blob: 406dfc5b5c12ebf3649356dac65f088b96afb26b [file] [log] [blame]
Harald Weltec76f29f2017-11-22 12:46:46 +01001module BSSMAP_Templates {
2
Harald Welte35bb7162018-01-03 21:07:52 +01003/* BSSMAP Templates, building on top of BSSAP_Types from Ericsson.
4 *
Harald Welte34b5a952019-05-27 11:54:11 +02005 * (C) 2017-2019 by Harald Welte <laforge@gnumonks.org>
6 * contributions by sysmocom - s.f.m.c. GmbH
Harald Welte35bb7162018-01-03 21:07:52 +01007 * All rights reserved.
8 *
9 * Released under the terms of GNU General Public License, Version 2 or
10 * (at your option) any later version.
Harald Welte34b5a952019-05-27 11:54:11 +020011 *
12 * SPDX-License-Identifier: GPL-2.0-or-later
Harald Welte35bb7162018-01-03 21:07:52 +010013 */
14
Harald Weltec76f29f2017-11-22 12:46:46 +010015import from General_Types all;
16import from Osmocom_Types all;
Harald Welte72cecfa2017-12-11 19:50:14 +010017import from GSM_Types all;
Harald Weltec76f29f2017-11-22 12:46:46 +010018import from BSSAP_Types all;
19
20type integer BssmapCause;
Philipp Maier34bd80e2018-03-27 14:28:52 +020021type integer SpeechVersion;
22type integer Channel;
23type integer ChannelMode;
24type octetstring oldToNewBSSIEs;
Harald Weltec76f29f2017-11-22 12:46:46 +010025
Harald Welteb69533d2017-12-15 13:55:17 +010026/* 48.008 3.2.2.5 - this actually belongs to BSSAP_Types.ttcn */
27type enumerated myBSSMAP_Cause {
28 /* 000 / 001: Normal event */
29 GSM0808_CAUSE_RADIO_INTERFACE_MESSAGE_FAILURE ('0000000'B),
30 GSM0808_CAUSE_RADIO_INTERFACE_FAILURE ('0000001'B),
31 GSM0808_CAUSE_UPLINK_QUALITY ('0000010'B),
32 GSM0808_CAUSE_UPLINK_STRENGTH ('0000011'B),
33 GSM0808_CAUSE_DOWNLINK_QUALITY ('0000100'B),
34 GSM0808_CAUSE_DOWNLINK_STRENGTH ('0000101'B),
35 GSM0808_CAUSE_DISTANCE ('0000110'B),
36 GSM0808_CAUSE_O_AND_M_INTERVENTION ('0000111'B),
37 GSM0808_CAUSE_RESPONSE_TO_MSC_INVOCATION ('0001000'B),
38 GSM0808_CAUSE_CALL_CONTROL ('0001001'B),
39 GSM0808_CAUSE_RADIO_INTERFACE_FAILURE_REVERSION ('0001010'B),
40 GSM0808_CAUSE_HANDOVER_SUCCESSFUL ('0001011'B),
41 GSM0808_CAUSE_BETTER_CELL ('0001100'B),
42 GSM0808_CAUSE_DIRECTED_RETRY ('0001101'B),
43 GSM0808_CAUSE_JOINED_GROUP_CALL_CHANNEL ('0001110'B),
44 GSM0808_CAUSE_TRAFFIC ('0001111'B),
45 GSM0808_CAUSE_REDUCE_LOAD_IN_SERVING_CELL ('0010000'B),
46 GSM0808_CAUSE_TRAFFIC_LOAD_IN_TGT_HIGHER_THAN_IN_SRC_CELL ('0010001'B),
47 GSM0808_CAUSE_RELOCATION_TRIGGERED ('0010010'B),
48 GSM0808_CAUSE_REQUSTED_OPT_NOT_AUTHORISED ('0010100'B),
49 GSM0808_CAUSE_ALT_CHAN_CONFIG_REQUESTED ('0010101'B),
50 GSM0808_CAUSE_RESP_TO_INT_HO_ENQ_MSG ('0010110'B),
51 GSM0808_CAUSE_INT_HO_ENQUIRY_REJECT ('0010111'B),
52 GSM0808_CAUSE_REDUNDANCY_LEVEL_NOT_ADEQUATE ('0011000'B),
53 /* reserved */
54 /* 010: Resource unavailable */
55 GSM0808_CAUSE_EQUIPMENT_FAILURE ('0100000'B),
56 GSM0808_CAUSE_NO_RADIO_RESOURCE_AVAILABLE ('0100001'B),
57 GSM0808_CAUSE_RQSTED_TERRESTRIAL_RESOURCE_UNAVAILABLE ('0100010'B),
58 GSM0808_CAUSE_CCCH_OVERLOAD ('0100011'B),
59 GSM0808_CAUSE_PROCESSOR_OVERLOAD ('0100100'B),
60 GSM0808_CAUSE_BSS_NOT_EQUIPPED ('0100101'B),
61 GSM0808_CAUSE_MS_NOT_EQUIPPED ('0100110'B),
62 GSM0808_CAUSE_INVALID_CELL ('0100111'B),
63 GSM0808_CAUSE_TRAFFIC_LOAD ('0101000'B),
64 GSM0808_CAUSE_PREEMPTION ('0101001'B),
65 GSM0808_CAUSE_DTM_HO_SGSN_FAILURE ('0101010'B),
66 GSM0808_CAUSE_DTM_HO_PS_ALLOC_FAILURE ('0101011'B),
67 /* reserved */
68 /* 011: Service or option not available, but implemented */
69 GSM0808_CAUSE_RQSTED_TRANSCODING_RATE_ADAPTION_UNAVAILABLE ('0110000'B),
70 GSM0808_CAUSE_CIRCUIT_POOL_MISMATCH ('0110001'B),
71 GSM0808_CAUSE_SWITCH_CIRCUIT_POOL ('0110010'B),
72 GSM0808_CAUSE_RQSTED_SPEECH_VERSION_UNAVAILABLE ('0110011'B),
73 GSM0808_CAUSE_LSA_NOT_ALLOWED ('0110100'B),
74 GSM0808_CAUSE_REQ_CODEC_TYPE_OR_CONFIG_UNAVAIL ('0110101'B),
75 GSM0808_CAUSE_REQ_A_IF_TYPE_UNAVAIL ('0110110'B),
76 GSM0808_CAUSE_INVALID_CSG_CELL ('0110111'B),
77 /* reserved */
78 /* 100: Service or option not implemented or currently disabled */
79 GSM0808_CAUSE_REQ_REDUND_LEVEL_NOT_AVAIL ('0111111'B),
80 GSM0808_CAUSE_CIPHERING_ALGORITHM_NOT_SUPPORTED ('1000000'B),
81 GSM0808_CAUSE_GERAN_IU_MODE_FAILURE ('1000001'B),
82 GSM0808_CAUSE_INC_RELOC_NOT_SUPP_DT_PUESBINE_FEATURE ('1000010'B),
83 GSM0808_CAUSE_ACCESS_RESTRICTED_DUE_TO_SHARED_NETWORKS ('1000011'B),
84 GSM0808_CAUSE_REQ_CODEC_TYPE_OR_CONFIG_NOT_SUPP ('1000100'B),
85 GSM0808_CAUSE_REQ_A_IF_TYPE_NOT_SUPP ('1000101'B),
86 GSM0808_CAUSE_REQ_REDUND_LVL_NOT_SUPP ('1000110'B),
87 /* reserved */
88 /* 101: Invalid message */
89 GSM0808_CAUSE_TERRESTRIAL_CIRCUIT_ALREADY_ALLOCATED ('1010000'B),
90 GSM0808_CAUSE_INVALID_MESSAGE_CONTENTS ('1010001'B),
91 GSM0808_CAUSE_INFORMATION_ELEMENT_OR_FIELD_MISSING ('1010010'B),
92 GSM0808_CAUSE_INCORRECT_VALUE ('1010011'B),
93 GSM0808_CAUSE_UNKNOWN_MESSAGE_TYPE ('1010100'B),
94 GSM0808_CAUSE_UNKNOWN_INFORMATION_ELEMENT ('1010101'B),
95 GSM0808_CAUSE_DTM_HO_INVALID_PS_IND ('1010110'B),
96 GSM0808_CAUSE_CALL_ID_ALREADY_ALLOC ('1010111'B),
97 /* reserved */
98 /* 110: protocol error */
99 GSM0808_CAUSE_PROTOCOL_ERROR_BETWEEN_BSS_AND_MSC ('1100000'B),
100 GSM0808_CAUSE_VGCS_VBS_CALL_NON_EXISTANT ('1100001'B),
101 GSM0808_CAUSE_DTM_HO_TIMER_EXPIRY ('1100010'B)
102} with { variant "FIELDLENGTH(7)" };
103
Harald Weltec76f29f2017-11-22 12:46:46 +0100104template PDU_BSSAP ts_BSSAP_BSSMAP := {
105 discriminator := '0'B,
106 spare := '0000000'B,
107 dlci := omit,
108 lengthIndicator := 0, /* overwritten by codec */
Harald Welteb3414b22017-11-23 18:22:10 +0100109 pdu := {
110 bssmap := ?
111 }
Harald Weltec76f29f2017-11-22 12:46:46 +0100112}
113
114template PDU_BSSAP tr_BSSAP_BSSMAP := {
115 discriminator := '0'B,
116 spare := '0000000'B,
Harald Welte049ca642018-01-21 13:54:34 +0100117 dlci := *,
Harald Weltec76f29f2017-11-22 12:46:46 +0100118 lengthIndicator := ?,
119 pdu := {
120 bssmap := ?
121 }
122}
123
Harald Welte0a6835c2018-01-21 13:56:01 +0100124template PDU_BSSAP ts_BSSAP_DTAP(octetstring dtap, template OCT1 dlci := omit) := {
Harald Welteb3414b22017-11-23 18:22:10 +0100125 discriminator := '1'B,
126 spare := '0000000'B,
Harald Welte0a6835c2018-01-21 13:56:01 +0100127 dlci := dlci,
Harald Welteb3414b22017-11-23 18:22:10 +0100128 lengthIndicator := 0, /* overwritten by codec */
129 pdu := {
Harald Welte0a6835c2018-01-21 13:56:01 +0100130 dtap := dtap
Harald Welteb3414b22017-11-23 18:22:10 +0100131 }
132}
133
134template PDU_BSSAP tr_BSSAP_DTAP := {
135 discriminator := '1'B,
136 spare := '0000000'B,
Harald Welte049ca642018-01-21 13:54:34 +0100137 dlci := *,
Harald Welteb3414b22017-11-23 18:22:10 +0100138 lengthIndicator := ?,
139 pdu := {
140 dtap := ?
141 }
142}
143
Harald Weltec76f29f2017-11-22 12:46:46 +0100144template (value) BSSMAP_IE_Cause ts_BSSMAP_IE_Cause(BssmapCause val) := {
145 elementIdentifier := '04'O,
146 lengthIndicator := 0,
147 causeValue := int2bit(val, 7),
148 extensionCauseValue := '0'B,
149 spare1 := omit
150}
151
Philipp Maier34bd80e2018-03-27 14:28:52 +0200152template (value) BSSMAP_IE_SpeechVersion ts_BSSMAP_IE_SpeechVersion(SpeechVersion val) := {
153 elementIdentifier := '40'O,
154 speechVersionIdentifier := int2bit(val, 7),
155 spare1_1 := '0'B
156}
157
158template (value) BSSMAP_IE_CurrentChannelType1 ts_BSSMAP_IE_CurrentChannelType1(Channel c, ChannelMode cm) := {
159 elementIdentifier := '31'O,
160 channel := int2bit(c, 4),
161 channelMode := int2bit(cm, 4)
162}
163
164template (value) BSSMAP_IE_OldToNewBSSInfo ts_BSSMAP_IE_OldToNewBSSInfo(oldToNewBSSIEs val) := {
165 elementIdentifier := '3A'O,
166 lengthIndicator := 0, /* overwritten by codec */
167 oldToNewBSSIEs := val
168}
169
Pau Espin Pedrol5eff9752019-05-23 15:03:54 +0200170template BSSMAP_IE_Osmo_OsmuxSupport tr_BSSMAP_IE_Osmo_OsmuxSupport := {
171 elementIdentifier := 'F0'O
172}
173
174private function f_enc_osmux_support(boolean osmux_enabled) return template BSSMAP_IE_Osmo_OsmuxSupport {
175 if (osmux_enabled) {
176 return tr_BSSMAP_IE_Osmo_OsmuxSupport;
177 }
178 return omit;
179}
180
181template (value) PDU_BSSAP ts_BSSMAP_Reset(BssmapCause cause, boolean osmux_enabled := false) modifies ts_BSSAP_BSSMAP := {
Harald Weltec76f29f2017-11-22 12:46:46 +0100182 pdu := {
183 bssmap := {
184 reset := {
185 messageType := '30'O,
186 cause := ts_BSSMAP_IE_Cause(cause),
Pau Espin Pedrol5eff9752019-05-23 15:03:54 +0200187 a_InterfaceSelectorForReset := omit,
188 osmuxSupport := f_enc_osmux_support(osmux_enabled)
Harald Weltec76f29f2017-11-22 12:46:46 +0100189 }
190 }
191 }
192}
193
Pau Espin Pedrol5eff9752019-05-23 15:03:54 +0200194template PDU_BSSAP tr_BSSMAP_Reset(boolean osmux_enabled := false) modifies tr_BSSAP_BSSMAP := {
Harald Welte365f4ed2017-11-23 00:00:43 +0100195 pdu := {
196 bssmap := {
197 reset := {
198 messageType := '30'O,
199 cause := ?,
Pau Espin Pedrol5eff9752019-05-23 15:03:54 +0200200 a_InterfaceSelectorForReset := *,
201 osmuxSupport := f_enc_osmux_support(osmux_enabled)
Harald Welte365f4ed2017-11-23 00:00:43 +0100202 }
203 }
204 }
205}
206
Pau Espin Pedrol5eff9752019-05-23 15:03:54 +0200207template (value) PDU_BSSAP ts_BSSMAP_ResetAck(boolean osmux_enabled := false) modifies ts_BSSAP_BSSMAP := {
Harald Weltec76f29f2017-11-22 12:46:46 +0100208 pdu := {
209 bssmap := {
210 resetAck := {
211 messageType := '31'O,
Pau Espin Pedrol5eff9752019-05-23 15:03:54 +0200212 a_InterfaceSelectorForReset := omit,
213 osmuxSupport := f_enc_osmux_support(osmux_enabled)
Harald Weltec76f29f2017-11-22 12:46:46 +0100214 }
215 }
216 }
217}
218
Pau Espin Pedrol5eff9752019-05-23 15:03:54 +0200219template PDU_BSSAP tr_BSSMAP_ResetAck(boolean osmux_enabled := false) modifies tr_BSSAP_BSSMAP := {
Harald Weltec76f29f2017-11-22 12:46:46 +0100220 pdu := {
221 bssmap := {
222 resetAck := {
223 messageType := '31'O,
Pau Espin Pedrol5eff9752019-05-23 15:03:54 +0200224 a_InterfaceSelectorForReset := *,
225 osmuxSupport := f_enc_osmux_support(osmux_enabled)
Harald Weltec76f29f2017-11-22 12:46:46 +0100226 }
227 }
228 }
229}
230
231template BSSMAP_IE_CellIdentifier ts_BSSMAP_IE_CellID := {
232 elementIdentifier := '05'O,
233 lengthIndicator := 0,
234 cellIdentifierDiscriminator := '0000'B,
235 spare1_4 := '0000'B,
236 cellIdentification := ?
237}
238
239type uint16_t BssmapLAC;
240type uint16_t BssmapCI;
241
Harald Welteae8ce232018-01-21 13:56:46 +0100242template BSSMAP_IE_CellIdentifier ts_CellId_CGI(hexstring mcc, hexstring mnc, BssmapLAC lac, BssmapCI ci)
Harald Weltec76f29f2017-11-22 12:46:46 +0100243modifies ts_BSSMAP_IE_CellID := {
244 cellIdentification := {
Harald Welteae8ce232018-01-21 13:56:46 +0100245 cI_CGI := ts_BSSMAP_CI_CGI(mcc, mnc, lac, ci)
Harald Weltec76f29f2017-11-22 12:46:46 +0100246 }
247}
Harald Weltec76f29f2017-11-22 12:46:46 +0100248
249template BSSMAP_IE_CellIdentifier ts_CellID_LAC_CI(BssmapLAC lac, BssmapCI ci)
250modifies ts_BSSMAP_IE_CellID := {
251 cellIdentification := {
252 cI_LAC_CI := {
253 lac := int2oct(lac, 2),
254 ci := int2oct(ci, 2)
255 }
256 }
257}
258
259template BSSMAP_IE_CellIdentifier ts_CellId_CI(BssmapCI ci)
260modifies ts_BSSMAP_IE_CellID := {
261 cellIdentification := {
262 cI_CI := int2oct(ci, 2)
263 }
264}
265
266template BSSMAP_IE_CellIdentifier ts_CellId_none
267modifies ts_BSSMAP_IE_CellID := {
268 cellIdentification := {
269 cI_noCell := ''O
270 }
271}
272
273
274template BSSMAP_IE_Layer3Information ts_BSSMAP_IE_L3Info(octetstring l3info) := {
275 elementIdentifier := '17'O,
276 lengthIndicator := 0,
277 layer3info := l3info
278}
279
Harald Weltef8a0bda2017-12-09 00:53:17 +0100280template BSSMAP_IE_Layer3Information tr_BSSMAP_IE_L3Info(template octetstring l3info) := {
281 elementIdentifier := '17'O,
282 lengthIndicator := ?,
283 layer3info := l3info
284}
285
286
Harald Weltec76f29f2017-11-22 12:46:46 +0100287template PDU_BSSAP ts_BSSMAP_ComplL3(BSSMAP_IE_CellIdentifier cell_id, octetstring l3_info)
288modifies ts_BSSAP_BSSMAP := {
289 pdu := {
290 bssmap := {
291 completeLayer3Information := {
292 messageType := '57'O,
293 cellIdentifier := cell_id,
294 layer3Information := ts_BSSMAP_IE_L3Info(l3_info),
295 chosenChannel := omit,
296 lSAIdentifier := omit,
297 aPDU := omit,
298 codecList := omit,
299 redirectAttemptFlag := omit,
300 sendSequenceNumber := omit,
301 iMSI := omit
302 }
303 }
304 }
305}
306
Harald Weltef8a0bda2017-12-09 00:53:17 +0100307template PDU_BSSAP tr_BSSMAP_ComplL3(template octetstring l3_info := ?,
308 template BSSMAP_IE_CellIdentifier cell_id := ?)
309modifies tr_BSSAP_BSSMAP := {
Harald Welte365f4ed2017-11-23 00:00:43 +0100310 pdu := {
311 bssmap := {
Harald Weltef8a0bda2017-12-09 00:53:17 +0100312 completeLayer3Information := {
313 messageType := '57'O,
314 cellIdentifier := cell_id,
315 layer3Information := tr_BSSMAP_IE_L3Info(l3_info),
316 chosenChannel := *,
317 lSAIdentifier := *,
318 aPDU := *,
319 codecList := *,
320 redirectAttemptFlag := *,
321 sendSequenceNumber := *,
322 iMSI := *
323 }
Harald Welte365f4ed2017-11-23 00:00:43 +0100324 }
325 }
326}
327
Neels Hofmeyr0ac63152019-05-07 01:20:17 +0200328template BSSMAP_IE_CellIdentifierList ts_BSSMAP_IE_CidList(template BSSMAP_FIELD_CellIdentificationList cid_list) := {
Harald Welte28d943e2017-11-25 15:00:50 +0100329 elementIdentifier := '1A'O,
330 lengthIndicator := 0, /* overwritten */
331 cellIdentifierDiscriminator := '0000'B, /* overwritten */
332 spare1_4 := '0000'B,
333 cellIdentificationList := cid_list
334}
Harald Welte365f4ed2017-11-23 00:00:43 +0100335
Harald Welte4bf5fc92017-12-15 13:56:06 +0100336const OCT1 ChRate_ANY := '00'O;
Harald Welte365f4ed2017-11-23 00:00:43 +0100337const OCT1 ChRate_TCHF := '08'O;
338const OCT1 ChRate_TCHH := '09'O;
Harald Welte4bf5fc92017-12-15 13:56:06 +0100339const OCT1 ChRate_TCHForH_Fpref := '0A'O;
340const OCT1 ChRate_TCHForH_Hpref := '0B'O;
341const OCT1 ChRate_TCHForH_Fpref_nochg := '1A'O;
342const OCT1 ChRate_TCHForH_Hpref_nochg := '1B'O;
343const OCT1 ChRate_TCHForH := '0F'O;
344const OCT1 ChRate_TCHForH_nochg := '1F'O;
Harald Welte365f4ed2017-11-23 00:00:43 +0100345
Harald Weltedbd6b3f2018-03-21 18:45:02 +0100346const OCT1 Spdi_TCHF_FR := '01'O;
347const OCT1 Spdi_TCHF_EFR := '11'O;
348const OCT1 Spdi_TCHF_AMR := '21'O;
349const OCT1 Spdi_TCHH_HR := '05'O;
350const OCT1 Spdi_TCHH_AMR := '25'O;
351
Harald Welte365f4ed2017-11-23 00:00:43 +0100352template (value) BSSMAP_IE_ChannelType ts_BSSMAP_IE_ChannelType := {
353 elementIdentifier := '0B'O, /* overwritten */
354 lengthIndicator := 0, /* overwritten */
355 speechOrDataIndicator := '0001'B, /* speech */
356 spare1_4 := '0000'B,
357 channelRateAndType := ChRate_TCHF,
Harald Weltedbd6b3f2018-03-21 18:45:02 +0100358 speechId_DataIndicator := Spdi_TCHF_FR
Harald Welte365f4ed2017-11-23 00:00:43 +0100359}
360
Harald Welte4bf5fc92017-12-15 13:56:06 +0100361template (value) BSSMAP_IE_ChannelType ts_BSSMAP_IE_ChannelTypeCTM modifies ts_BSSMAP_IE_ChannelType := {
362 speechOrDataIndicator := '0100'B /* speech + CTM */
363}
364
365template (value) BSSMAP_IE_ChannelType ts_BSSMAP_IE_ChannelTypeCSD := {
366 elementIdentifier := '0B'O, /* overwritten */
367 lengthIndicator := 0, /* overwritten */
368 speechOrDataIndicator := '0010'B, /* data */
369 spare1_4 := '0000'B,
370 channelRateAndType := ChRate_TCHF,
371 speechId_DataIndicator := '10'O /* 9600 bps / transparent */
372}
373
374template (value) BSSMAP_IE_ChannelType ts_BSSMAP_IE_ChannelTypeSIGNAL := {
375 elementIdentifier := '0B'O, /* overwritten */
376 lengthIndicator := 0, /* overwritten */
377 speechOrDataIndicator := '0011'B, /* data */
378 spare1_4 := '0000'B,
379 channelRateAndType := ChRate_ANY,
380 speechId_DataIndicator := '00'O /* spare */
381}
382
383template (value) BSSMAP_IE_EncryptionInformation ts_BSSMAP_IE_EncrInfo(OCT8 kc, OCT1 algs := '05'O) := {
384 elementIdentifier := '0A'O,
385 lengthIndicator := 0, /* overwritten */
386 permittedAlgorithms := algs,
387 key := kc
388}
389
Harald Welte16114282018-01-24 22:41:21 +0100390template BSSMAP_IE_EncryptionInformation tr_BSSMAP_IE_EncrInfo(template OCT8 kc := ?, template OCT1 algs := ?) := {
391 elementIdentifier := '0A'O,
392 lengthIndicator := ?, /* overwritten */
393 permittedAlgorithms := algs,
394 key := kc
395}
396
397
Harald Welte4bf5fc92017-12-15 13:56:06 +0100398
Harald Welte365f4ed2017-11-23 00:00:43 +0100399template (value) BSSMAP_IE_CircuitIdentityCode ts_BSSMAP_IE_CIC(uint11_t span, uint5_t ts) := {
400 elementIdentifier := '01'O, /* overwritten */
401 cicHigh := bit2oct(substr(int2bit(span, 11) << 5, 0, 8)),
402 cicLow := bit2oct((substr(int2bit(span, 11), 8, 3) << 5) & int2bit(ts, 5))
403}
404
Pau Espin Pedrol43021cb2019-06-18 17:32:15 +0200405function f_bssmap_ie_cic_2_int(BSSMAP_IE_CircuitIdentityCode cic_ie) return integer {
406 var integer cic := (oct2int(cic_ie.cicHigh) * 256) + oct2int(cic_ie.cicLow);
407 return cic;
408}
409
Harald Weltecc7e4dc2017-12-14 21:55:10 +0100410template (value) BSSMAP_IE_AoIP_TransportLayerAddress ts_BSSMAP_IE_AoIP_TLA(BSSMAP_FIELD_IPAddress addr,
Harald Welteb6e1d7e2018-01-26 21:38:59 +0100411 uint16_t udp_port,
412 integer len) := {
Harald Weltecc7e4dc2017-12-14 21:55:10 +0100413 elementIdentifier := '7C'O,
Harald Welteb6e1d7e2018-01-26 21:38:59 +0100414 lengthIndicator := len, /* overwritten */
Harald Weltecc7e4dc2017-12-14 21:55:10 +0100415 ipAddress := addr,
416 uDPPortValue := udp_port
417}
Harald Welte235ebf12017-12-15 14:18:16 +0100418template (value) BSSMAP_IE_AoIP_TransportLayerAddress ts_BSSMAP_IE_AoIP_TLA4(OCT4 ip, uint16_t pt) :=
Harald Welteb6e1d7e2018-01-26 21:38:59 +0100419 ts_BSSMAP_IE_AoIP_TLA({ipv4:=ip}, pt, 6);
Harald Welte235ebf12017-12-15 14:18:16 +0100420template (value) BSSMAP_IE_AoIP_TransportLayerAddress ts_BSSMAP_IE_AoIP_TLA6(OCT16 ip, uint16_t pt) :=
Harald Welteb6e1d7e2018-01-26 21:38:59 +0100421 ts_BSSMAP_IE_AoIP_TLA({ipv6:=ip}, pt, 18);
Harald Weltecc7e4dc2017-12-14 21:55:10 +0100422
Neels Hofmeyr3c89a6b2019-10-15 16:54:37 +0200423template BSSMAP_IE_AoIP_TransportLayerAddress tr_BSSMAP_IE_AoIP_TLA(template BSSMAP_FIELD_IPAddress addr,
424 template uint16_t udp_port,
425 template integer len := ?) := {
426 elementIdentifier := '7C'O,
427 lengthIndicator := len,
428 ipAddress := addr,
429 uDPPortValue := udp_port
430}
431template BSSMAP_IE_AoIP_TransportLayerAddress tr_BSSMAP_IE_AoIP_TLA4(template OCT4 ip, template uint16_t pt) :=
432 tr_BSSMAP_IE_AoIP_TLA({ipv4:=ip}, pt, 6);
433template BSSMAP_IE_AoIP_TransportLayerAddress tr_BSSMAP_IE_AoIP_TLA6(template OCT16 ip, template uint16_t pt) :=
434 tr_BSSMAP_IE_AoIP_TLA({ipv6:=ip}, pt, 18);
435
Harald Welte4bf5fc92017-12-15 13:56:06 +0100436template (value) BSSMAP_IE_KC128 ts_BSSMAP_IE_Kc128(OCT16 kc128) := {
437 elementIdentifier := '83'O,
438 kC128_Value := kc128
439}
440
Harald Weltef1b64e22017-12-15 14:55:14 +0100441/* 3.2.2.103 */
442template (value) BSSMAP_FIELD_CodecElement ts_CodecBase := {
443 codecType := GSM_FR,
444 tF := '0'B,
445 pT := '0'B,
446 pI := '0'B,
447 fI := '1'B,
448 extendedCodecType := omit,
449 s0_7 := omit,
450 s8_15 := omit
451}
452template (value) BSSMAP_FIELD_CodecElement ts_CodecFR modifies ts_CodecBase := {
453 codecType := GSM_FR
454}
455template (value) BSSMAP_FIELD_CodecElement ts_CodecEFR modifies ts_CodecBase := {
456 codecType := GSM_EFR
457}
458template (value) BSSMAP_FIELD_CodecElement ts_CodecHR modifies ts_CodecBase := {
459 codecType := GSM_HR
460}
461template (value) BSSMAP_FIELD_CodecElement ts_CodecAMR_F modifies ts_CodecBase := {
462 codecType := FR_AMR,
463 s0_7 := '11111111'B,
464 s8_15 := '01010111'B /* S11, S13 and S15 are reserved and coded with zeroes */
465}
466template (value) BSSMAP_FIELD_CodecElement ts_CodecAMR_H modifies ts_CodecBase := {
467 codecType := HR_AMR,
468 s0_7 := '00111111'B,
469 s8_15 := '00000111'B /* S6 - S7 and S11 – S15 are reserved and coded with zeroes */
470}
471template BSSMAP_IE_SpeechCodecList ts_BSSMAP_IE_CodecList(template BSSMAP_FIELD_CodecElements elem) := {
472 elementIdentifier := '7D'O,
473 lengthIndicator := 0, /* overwritten */
474 codecElements := valueof(elem)
475}
Neels Hofmeyr82fd04b2019-02-28 08:43:00 +0100476template BSSMAP_IE_SpeechCodec ts_BSSMAP_IE_SpeechCodec(template BSSMAP_FIELD_CodecElements elem) := {
477 elementIdentifier := '7E'O,
478 lengthIndicator := 0, /* overwritten */
479 codecElements := valueof(elem)
480}
Harald Weltef1b64e22017-12-15 14:55:14 +0100481
Pau Espin Pedrol5eff9752019-05-23 15:03:54 +0200482template (value) BSSMAP_IE_Osmo_OsmuxCID ts_OsmuxCID(INT1 cid) := {
483 elementIdentifier := 'F1'O,
484 osmuxCID := cid
485}
486
Harald Weltecc7e4dc2017-12-14 21:55:10 +0100487template PDU_BSSAP
488ts_BSSMAP_AssignmentReq(template BSSMAP_IE_CircuitIdentityCode cic := omit,
Pau Espin Pedrol5eff9752019-05-23 15:03:54 +0200489 template BSSMAP_IE_AoIP_TransportLayerAddress aoip := omit,
490 template BSSMAP_IE_Osmo_OsmuxCID osmuxCID := omit)
Harald Welte365f4ed2017-11-23 00:00:43 +0100491modifies ts_BSSAP_BSSMAP := {
492 pdu := {
493 bssmap := {
494 assignmentRequest := {
495 messageType :='01'O, /* overwritten */
496 channelType := ts_BSSMAP_IE_ChannelType,
497 layer3HeaderInfo := omit,
498 priority := omit,
Harald Weltecc7e4dc2017-12-14 21:55:10 +0100499 circuitIdentityCode := cic,
Harald Welte365f4ed2017-11-23 00:00:43 +0100500 downLinkDTX_Flag := omit,
501 interferenceBandToBeUsed := omit,
502 classmarkInformationType2 := omit,
503 groupCallReference := omit,
504 talkerFlag := omit,
505 configurationEvolutionIndication := omit,
506 lsaAccesControlSuppression := omit,
507 serviceHandover := omit,
508 encryptionInformation := omit,
509 talkerPriority := omit,
Harald Weltecc7e4dc2017-12-14 21:55:10 +0100510 aoIPTransportLayer := aoip,
Harald Welte365f4ed2017-11-23 00:00:43 +0100511 codecList := omit,
512 callIdentifier := omit,
513 kC128 := omit,
514 globalCallReference := omit,
515 lCLS_Configuration := omit,
516 lCLS_ConnectionStatusControl := omit,
Pau Espin Pedrol5eff9752019-05-23 15:03:54 +0200517 lCLS_CorrelationNotNeeded := omit,
518 osmuxCID := osmuxCID
Harald Welte365f4ed2017-11-23 00:00:43 +0100519 }
520 }
521 }
522}
Harald Weltec76f29f2017-11-22 12:46:46 +0100523
Harald Weltebe48a7c2018-01-26 21:39:25 +0100524template PDU_BSSAP tr_BSSMAP_AssignmentReq(template BSSMAP_IE_CircuitIdentityCode cic := *,
Pau Espin Pedrol5eff9752019-05-23 15:03:54 +0200525 template BSSMAP_IE_AoIP_TransportLayerAddress aoip := *,
526 template BSSMAP_IE_Osmo_OsmuxCID osmuxCID := *)
Harald Weltebe48a7c2018-01-26 21:39:25 +0100527modifies tr_BSSAP_BSSMAP := {
Harald Welteb3414b22017-11-23 18:22:10 +0100528 pdu := {
529 bssmap := {
530 assignmentRequest := {
531 messageType :='01'O, /* overwritten */
532 channelType := ?,
533 layer3HeaderInfo := *,
534 priority := *,
Harald Weltebe48a7c2018-01-26 21:39:25 +0100535 circuitIdentityCode := cic,
Harald Welteb3414b22017-11-23 18:22:10 +0100536 downLinkDTX_Flag := *,
537 interferenceBandToBeUsed := *,
538 classmarkInformationType2 := *,
539 groupCallReference := *,
540 talkerFlag := *,
541 configurationEvolutionIndication := *,
542 lsaAccesControlSuppression := *,
543 serviceHandover := *,
544 encryptionInformation := *,
545 talkerPriority := *,
Harald Weltebe48a7c2018-01-26 21:39:25 +0100546 aoIPTransportLayer := aoip,
Harald Welteb3414b22017-11-23 18:22:10 +0100547 codecList := *,
548 callIdentifier := *,
549 kC128 := *,
550 globalCallReference := *,
551 lCLS_Configuration := *,
552 lCLS_ConnectionStatusControl := *,
Pau Espin Pedrol5eff9752019-05-23 15:03:54 +0200553 lCLS_CorrelationNotNeeded := *,
554 osmuxCID := osmuxCID
Harald Welteb3414b22017-11-23 18:22:10 +0100555 }
556 }
557 }
558}
559
Harald Weltecc7e4dc2017-12-14 21:55:10 +0100560template PDU_BSSAP
561ts_BSSMAP_AssignmentComplete(template BSSMAP_IE_CircuitIdentityCode cic := omit,
Neels Hofmeyr82fd04b2019-02-28 08:43:00 +0100562 template BSSMAP_IE_AoIP_TransportLayerAddress aoip := omit,
Pau Espin Pedrol5eff9752019-05-23 15:03:54 +0200563 template BSSMAP_IE_SpeechCodec speechCodec := omit,
564 template BSSMAP_IE_Osmo_OsmuxCID osmuxCID := omit)
Harald Welteb3414b22017-11-23 18:22:10 +0100565modifies ts_BSSAP_BSSMAP := {
566 pdu := {
567 bssmap := {
568 assignmentComplete := {
569 messageType :='02'O, /* overwritten */
Harald Welte7ed2b082017-11-23 18:52:13 +0100570 rR_Cause := omit,
Harald Welteb3414b22017-11-23 18:22:10 +0100571 circuitIdentityCode := cic,
572 cellIdentifier := omit,
573 chosenChannel := omit,
574 chosenEncryptionAlgorithm := omit,
575 circuitPool := omit,
576 speechVersion := omit,
577 lSAIdentifier := omit,
578 talkerPriority := omit,
Harald Weltecc7e4dc2017-12-14 21:55:10 +0100579 aoIPTransportLayer := aoip,
Neels Hofmeyr82fd04b2019-02-28 08:43:00 +0100580 speechCodec := speechCodec,
Harald Welteb3414b22017-11-23 18:22:10 +0100581 codecList := omit,
Pau Espin Pedrol5eff9752019-05-23 15:03:54 +0200582 lCLS_BSS_Status := omit,
583 osmuxCID := osmuxCID
Harald Welteb3414b22017-11-23 18:22:10 +0100584 }
585 }
586 }
587}
588
Harald Weltecc7e4dc2017-12-14 21:55:10 +0100589template PDU_BSSAP tr_BSSMAP_AssignmentComplete(template BSSMAP_IE_CircuitIdentityCode cic := *,
Pau Espin Pedrol5eff9752019-05-23 15:03:54 +0200590 template BSSMAP_IE_AoIP_TransportLayerAddress aoip := *,
591 template BSSMAP_IE_Osmo_OsmuxCID osmuxCID := *)
Harald Weltecc7e4dc2017-12-14 21:55:10 +0100592modifies tr_BSSAP_BSSMAP := {
Harald Welteb3414b22017-11-23 18:22:10 +0100593 pdu := {
594 bssmap := {
595 assignmentComplete := {
596 messageType := '02'O, /* overwritten */
Harald Welte7ed2b082017-11-23 18:52:13 +0100597 rR_Cause := *,
Harald Weltecc7e4dc2017-12-14 21:55:10 +0100598 circuitIdentityCode := cic,
Harald Welteb3414b22017-11-23 18:22:10 +0100599 cellIdentifier := *,
600 chosenChannel := *,
601 chosenEncryptionAlgorithm := *,
602 circuitPool := *,
603 speechVersion := *,
604 lSAIdentifier := *,
605 talkerPriority := *,
Harald Weltecc7e4dc2017-12-14 21:55:10 +0100606 aoIPTransportLayer := aoip,
Harald Welteb3414b22017-11-23 18:22:10 +0100607 speechCodec := *,
608 codecList := *,
Pau Espin Pedrol5eff9752019-05-23 15:03:54 +0200609 lCLS_BSS_Status := *,
610 osmuxCID := osmuxCID
Harald Welteb3414b22017-11-23 18:22:10 +0100611 }
612 }
613 }
614}
615
Harald Welte16a4adf2017-12-14 18:54:01 +0100616template PDU_BSSAP tr_BSSMAP_AssignmentFail modifies tr_BSSAP_BSSMAP := {
617 pdu := {
618 bssmap := {
619 assignmentFailure := {
620 messageType := '03'O, /* overwritten */
621 rR_Cause := *,
622 circuitPool := *,
623 circuitPoolList := *,
624 talkerPriority := *,
625 codecList := *
626 }
627 }
628 }
629}
630
631
Harald Welteb3414b22017-11-23 18:22:10 +0100632template (value) PDU_BSSAP ts_BSSMAP_ClearCommand(BssmapCause cause)
633modifies ts_BSSAP_BSSMAP := {
634 pdu := {
635 bssmap := {
636 clearCommand := {
637 messageType := '20'O, /* overwritten */
638 layer3HeaderInfo := omit,
639 cause := ts_BSSMAP_IE_Cause(cause),
640 cSFB_Indication := omit
641 }
642 }
643 }
644}
Harald Welte99787102019-02-04 10:41:36 +0100645template (value) PDU_BSSAP ts_BSSMAP_ClearCommandCSFB(BssmapCause cause)
646modifies ts_BSSMAP_ClearCommand := {
647 pdu := {
648 bssmap := {
649 clearCommand := {
650 cSFB_Indication := {
651 elementIdentifier := '8F'O
652 }
653 }
654 }
655 }
656}
Harald Welteb3414b22017-11-23 18:22:10 +0100657
658template PDU_BSSAP tr_BSSMAP_ClearCommand modifies tr_BSSAP_BSSMAP := {
659 pdu := {
660 bssmap := {
661 clearCommand := {
662 messageType := '20'O, /* overwritten */
663 layer3HeaderInfo := *,
664 cause := ?,
665 cSFB_Indication := *
666 }
667 }
668 }
669}
670
Harald Welte4c422b72019-02-17 16:27:10 +0100671template PDU_BSSAP tr_BSSMAP_ClearCommandCSFB modifies tr_BSSAP_BSSMAP := {
672 pdu := {
673 bssmap := {
674 clearCommand := {
675 messageType := '20'O, /* overwritten */
676 layer3HeaderInfo := *,
677 cause := ?,
678 cSFB_Indication := {
679 elementIdentifier := '8F'O
680 }
681 }
682 }
683 }
684}
685
Harald Welteb3414b22017-11-23 18:22:10 +0100686template (value) PDU_BSSAP ts_BSSMAP_ClearComplete
687modifies ts_BSSAP_BSSMAP := {
688 pdu := {
689 bssmap := {
690 clearComplete := {
691 messageType := '21'O /* overwritten */
692 }
693 }
694 }
695}
696
Harald Weltec859df52017-11-24 23:41:41 +0100697template PDU_BSSAP tr_BSSMAP_ClearComplete modifies tr_BSSAP_BSSMAP := {
698 pdu := {
699 bssmap := {
700 clearComplete := {
701 messageType := '21'O
702 }
703 }
704 }
705}
706
Harald Weltebc881782018-01-23 20:09:15 +0100707template (value) PDU_BSSAP ts_BSSMAP_ClearRequest(BssmapCause cause)
708modifies ts_BSSAP_BSSMAP := {
709 pdu := {
710 bssmap := {
711 clearRequest := {
712 messageType := '22'O, /* overwritten */
713 cause := ts_BSSMAP_IE_Cause(cause)
714 }
715 }
716 }
717}
718
Harald Weltecfa79ad2017-12-09 22:33:47 +0100719template PDU_BSSAP tr_BSSMAP_ClearRequest modifies tr_BSSAP_BSSMAP := {
720 pdu := {
721 bssmap := {
722 clearRequest := {
723 messageType := '22'O, /* overwritten */
724 cause := ?
725 }
726 }
727 }
728}
729
Neels Hofmeyr0ac63152019-05-07 01:20:17 +0200730template PDU_BSSAP ts_BSSMAP_HandoverRequired(BssmapCause cause,
731 template BSSMAP_FIELD_CellIdentificationList cid_list)
732modifies ts_BSSAP_BSSMAP := {
733 pdu := {
734 bssmap := {
735 handoverRequired := {
736 messageType := '11'O,
737 cause := ts_BSSMAP_IE_Cause(cause),
738 responseRequest := omit,
739 cellIdentifierList := ts_BSSMAP_IE_CidList(cid_list),
740 circuitPoolList := omit,
741 currentChannelType1 := omit,
742 speechVersion := omit,
743 queueingIndicator := omit,
744 oldToNewBSSInfo := omit,
745 sourceToTargetRNCTransparentInfo := omit,
746 sourceToTargetRNCTransparentInfoCDMA := omit,
747 gERANClassmark := omit,
748 talkerPriority := omit,
749 speechCodec := omit,
750 cSG_Identifier := omit
751 }
752 }
753 }
754}
755
756
Neels Hofmeyrbd0ef932018-03-19 14:58:46 +0100757template PDU_BSSAP tr_BSSMAP_HandoverRequired modifies tr_BSSAP_BSSMAP := {
758 pdu := {
759 bssmap := {
760 handoverRequired := {
761 messageType := '11'O
762 }
763 }
764 }
765}
766
Neels Hofmeyr0ac63152019-05-07 01:20:17 +0200767template PDU_BSSAP tr_BSSMAP_HandoverRequiredReject modifies tr_BSSAP_BSSMAP := {
768 pdu := {
769 bssmap := {
770 handoverRequiredReject := {
771 messageType := '1A'O
772 }
773 }
774 }
775}
776
777template PDU_BSSAP tr_BSSMAP_HandoverCommand
778modifies tr_BSSAP_BSSMAP := {
779 pdu := {
780 bssmap := {
781 handoverCommand := {
782 messageType := '13'O
783 }
784 }
785 }
786}
787
788template PDU_BSSAP tr_BSSMAP_HandoverSucceeded
789modifies tr_BSSAP_BSSMAP := {
790 pdu := {
791 bssmap := {
792 handoverSucceeded := {
793 messageType := '15'O
794 }
795 }
796 }
797}
798
Neels Hofmeyrbd0ef932018-03-19 14:58:46 +0100799template (value) PDU_BSSAP ts_BSSMAP_HandoverCommand(octetstring layer3info)
800modifies ts_BSSAP_BSSMAP := {
801 pdu := {
802 bssmap := {
803 handoverCommand := {
804 messageType := '13'O,
805 layer3Information := {
806 elementIdentifier := '17'O,
807 lengthIndicator := 0,
808 layer3info := layer3info
809 },
810 cellIdentifier := omit,
811 newBSSToOldBSSInfo := omit,
812 talkerPriority := omit
813 }
814 }
815 }
816}
817
Neels Hofmeyr61ebb8b2018-10-09 18:28:06 +0200818template PDU_BSSAP tr_BSSMAP_HandoverFailure modifies tr_BSSAP_BSSMAP := {
819 pdu := {
820 bssmap := {
821 handoverFailure := {
822 messageType := '16'O,
823 cause := ?,
824 rR_Cause := *,
825 circuitPool := *,
826 circuitPoolList := *,
827 gERANClassmark := *,
828 newBSSToOldBSSInfo := *,
829 interSystemInformation := *,
830 talkerPriority := *,
831 codecList := *
832 }
833 }
834 }
835}
836
Neels Hofmeyr0ac63152019-05-07 01:20:17 +0200837template PDU_BSSAP tr_BSSMAP_HandoverRequest modifies tr_BSSAP_BSSMAP := {
838 pdu := {
839 bssmap := {
840 handoverRequest := {
841 messageType := '10'O
842 }
843 }
844 }
845}
846
Neels Hofmeyrbd0ef932018-03-19 14:58:46 +0100847template PDU_BSSAP ts_BSSMAP_HandoverRequest(
848 template BSSMAP_IE_CircuitIdentityCode cic := omit,
849 template BSSMAP_IE_AoIP_TransportLayerAddress aoip_tla := omit,
850 template BSSMAP_IE_CellIdentifier cell_id_target := ts_CellID_LAC_CI(1, 0),
851 template BSSMAP_IE_CellIdentifier cell_id_source := ts_CellID_LAC_CI(1, 1)
852 )
853modifies ts_BSSAP_BSSMAP := {
854 pdu := {
855 bssmap := {
856 handoverRequest := {
857 messageType := '10'O,
858 channelType := ts_BSSMAP_IE_ChannelType,
859 encryptionInformation :=
860 ts_BSSMAP_IE_EncrInfo('0000000000000000'O,'01'O),
861 classmarkInformationType := {
862 classmarkInformationType1 := {
863 elementIdentifier := '1D'O,
864 rf_PowerCapability := '000'B,
865 a5_1 := '0'B,
866 esind := '0'B,
867 revisionLevel := '10'B,
868 spare1_1 := '0'B
869 }
870 },
871 cellIdentifierSource := cell_id_source,
872 priority := omit,
873 circuitIdentityCode := cic,
874 downLinkDTX_Flag := omit,
875 cellIdentifierTarget := cell_id_target,
876 interferenceBandToBeUsed := omit,
877 cause := omit,
878 classmarkInformationType3 := omit,
879 currentChannelType1 := omit,
880 speechVersion := omit,
881 groupCallReference := omit,
882 talkerFlag := omit,
883 configurationEvolutionIndication := omit,
884 chosenEncryptionAlgorithm := omit,
885 oldToNewBSSInfo := omit,
886 lSAInformation := omit,
887 lSAAccessControlSuppression := omit,
888 serviceHandover := omit,
889 iMSI_bssmap := omit,
890 sourceToTargetRNCTransparentInfo := omit,
891 sourceToTargetRNCTransparentInfoCDMA := omit,
892 sNAAccessInformation := omit,
893 talkerPriority := omit,
894 aoIPTransportLayer := aoip_tla,
895 codecList := omit,
896 callIdentifier := omit,
897 kC128 := omit,
898 globalCallReference := omit,
899 lCLS_Configuration := omit,
900 connectionStatusControl := omit
901 }
902 }
903 }
904}
905
906template PDU_BSSAP tr_BSSMAP_HandoverRequestAcknowledge(template octetstring layer3info)
907modifies tr_BSSAP_BSSMAP := {
908 pdu := {
909 bssmap := {
910 handoverRequestAck := {
911 messageType := '12'O,
912 layer3Information := {
913 elementIdentifier := '17'O,
914 lengthIndicator := ?,
915 layer3info := layer3info
916 }
917 }
918 }
919 }
920}
921
Neels Hofmeyr0ac63152019-05-07 01:20:17 +0200922template PDU_BSSAP ts_BSSMAP_HandoverRequestAcknowledge(
923 template octetstring layer3info,
924 template LIN1 layer3infoLength,
925 template BSSMAP_IE_AoIP_TransportLayerAddress aoIPTransportLayer := omit,
926 template BSSMAP_IE_SpeechCodec speechCodec := omit,
927 template BSSMAP_IE_ChosenChannel chosenChannel := omit,
928 template BSSMAP_IE_ChosenEncryptionAlgorithm chosenEncryptionAlgorithm := omit)
929modifies ts_BSSAP_BSSMAP := {
930 pdu := {
931 bssmap := {
932 handoverRequestAck := {
933 messageType := '12'O,
934 layer3Information := {
935 elementIdentifier := '17'O,
936 lengthIndicator := layer3infoLength,
937 layer3info := layer3info
938 },
939 chosenChannel := chosenChannel,
940 chosenEncryptionAlgorithm := chosenEncryptionAlgorithm,
941 circuitPool := omit,
942 speechVersion := omit,
943 circuitIdentityCode := omit,
944 lSAIdentifier := omit,
945 newBSSToOldBSSInfo := omit,
946 interSystemInformation := omit,
947 talkerPriority := omit,
948 aoIPTransportLayer := aoIPTransportLayer,
949 codecList := omit,
950 speechCodec := speechCodec,
951 lCLS_bSS_Status := omit
952 }
953 }
954 }
955}
956
Neels Hofmeyrbd0ef932018-03-19 14:58:46 +0100957template PDU_BSSAP tr_BSSMAP_HandoverDetect
958modifies tr_BSSAP_BSSMAP := {
959 pdu := {
960 bssmap := {
961 handoverDetect := {
962 messageType := '1B'O,
963 talkerPriority := *
964 }
965 }
966 }
967}
968
Neels Hofmeyr0ac63152019-05-07 01:20:17 +0200969template PDU_BSSAP ts_BSSMAP_HandoverDetect
970modifies ts_BSSAP_BSSMAP := {
971 pdu := {
972 bssmap := {
973 handoverDetect := {
974 messageType := '1B'O,
975 talkerPriority := omit
976 }
977 }
978 }
979}
980
Neels Hofmeyrbd0ef932018-03-19 14:58:46 +0100981template PDU_BSSAP tr_BSSMAP_HandoverComplete
982modifies tr_BSSAP_BSSMAP := {
983 pdu := {
984 bssmap := {
985 handoverComplete := {
986 messageType := '14'O,
987 rR_Cause := *,
988 talkerPriority := *,
989 speechCodec := *,
990 codecList := *,
991 chosenEncryptionAlgorithm := *,
992 chosenChannel := *,
993 lCLS_BSS_Status := *
994 }
995 }
996 }
997}
Harald Weltecfa79ad2017-12-09 22:33:47 +0100998
Neels Hofmeyr0ac63152019-05-07 01:20:17 +0200999template PDU_BSSAP ts_BSSMAP_HandoverComplete
1000modifies ts_BSSAP_BSSMAP := {
1001 pdu := {
1002 bssmap := {
1003 handoverComplete := {
1004 messageType := '14'O,
1005 rR_Cause := omit,
1006 talkerPriority := omit,
1007 speechCodec := omit,
1008 codecList := omit,
1009 chosenEncryptionAlgorithm := omit,
1010 chosenChannel := omit,
1011 lCLS_BSS_Status := omit
1012 }
1013 }
1014 }
1015}
1016
Philipp Maieraee60392018-11-05 17:09:00 +01001017template PDU_BSSAP tr_BSSMAP_HandoverPerformed
1018modifies tr_BSSAP_BSSMAP := {
1019 pdu := {
1020 bssmap := {
1021 handoverPerformed := {
1022 messageType := '17'O,
1023 cause := ?,
1024 cellIdentifier := ?,
Philipp Maier8d33a132018-11-12 11:58:55 +01001025 chosenChannel := *,
1026 chosenEncryptionAlgorithm := *,
1027 speechVersion := *,
1028 lSAIdentifier := *,
1029 talkerPriority := *,
1030 codecList := *,
1031 speechCodec := *,
1032 lCLS_BSS_Status := *
Philipp Maieraee60392018-11-05 17:09:00 +01001033 }
1034 }
1035 }
1036}
1037
Harald Welte28d943e2017-11-25 15:00:50 +01001038template BSSMAP_IE_IMSI ts_BSSMAP_Imsi(hexstring imsi_digits) := {
1039 elementIdentifier := '08'O,
1040 lengthIndicator := 0, /* overwritten */
1041 typeOfIdentity := '001'B, /* IMSI */
1042 oddEvenIndicator := f_hex_is_odd_length(imsi_digits),
1043 digits := imsi_digits
1044}
1045
Harald Welte17d21152018-01-27 00:47:11 +01001046template BSSMAP_IE_IMSI tr_BSSMAP_Imsi(template hexstring imsi_digits) := {
1047 elementIdentifier := '08'O,
1048 lengthIndicator := ?, /* overwritten */
1049 typeOfIdentity := '001'B, /* IMSI */
1050 oddEvenIndicator := ?,
1051 digits := imsi_digits
1052}
1053
Harald Welte72cecfa2017-12-11 19:50:14 +01001054template BSSMAP_FIELD_CellIdentificationList ts_BSSMAP_CIL_noCell := {
1055 cIl_noCell := ''O
1056}
Harald Welteaba42162019-06-19 18:17:59 +02001057template (value) BSSMAP_FIELD_CellIdentificationList ts_BSSMAP_CIL_BSS := {
1058 cIl_allInBSS := ''O
1059}
1060template BSSMAP_FIELD_CellIdentificationList tr_BSSMAP_CIL_BSS := {
1061 cIl_allInBSS := ''O
1062}
1063
1064template (value) BSSMAP_FIELD_CellIdentificationList
1065 ts_BSSMAP_CIL_CGI(template (value) BSSMAP_FIELD_CellIdentificationList_CGI cgil) := {
1066 cIl_CGI := cgil
1067}
1068template BSSMAP_FIELD_CellIdentificationList
1069 tr_BSSMAP_CIL_CGI(template BSSMAP_FIELD_CellIdentificationList_CGI cgil) := {
1070 cIl_CGI := cgil
1071}
1072
1073template (value) BSSMAP_FIELD_CellIdentificationList
1074 ts_BSSMAP_CIL_LAC_CI(template (value) BSSMAP_FIELD_CellIdentificationList_LAC_CI lac_cil) := {
1075 cIl_LAC_CI := lac_cil
1076}
1077template BSSMAP_FIELD_CellIdentificationList
1078 tr_BSSMAP_CIL_LAC_CI(template BSSMAP_FIELD_CellIdentificationList_LAC_CI lac_cil) := {
1079 cIl_LAC_CI := lac_cil
1080}
1081
1082template (value) BSSMAP_FIELD_CellIdentificationList
1083 ts_BSSMAP_CIL_CI(template (value) RecordOfOCT2 cil) := {
1084 cIl_CI := cil
1085}
1086template BSSMAP_FIELD_CellIdentificationList tr_BSSMAP_CIL_CI(template RecordOfOCT2 cil) := {
1087 cIl_CI := cil
1088}
1089
1090template (value) BSSMAP_FIELD_CellIdentificationList
1091 ts_BSSMAP_CIL_LAI(template (value) BSSMAP_FIELD_CellIdentificationList_LAI lail) := {
1092 cIl_LAI := lail
1093}
1094template BSSMAP_FIELD_CellIdentificationList
1095 tr_BSSMAP_CIL_LAI(template BSSMAP_FIELD_CellIdentificationList_LAI lail) := {
1096 cIl_LAI := lail
1097}
1098
1099template (value) BSSMAP_FIELD_CellIdentificationList
1100 ts_BSSMAP_CIL_LAC(template (value) RecordOfOCT2 lacl) := {
1101 cIl_LAC := lacl
1102}
1103template BSSMAP_FIELD_CellIdentificationList tr_BSSMAP_CIL_LAC(template RecordOfOCT2 lacl) := {
1104 cIl_LAC := lacl
1105}
1106
Harald Welte72cecfa2017-12-11 19:50:14 +01001107
1108private function f_enc_mcc_mnc(GsmMcc mcc, GsmMnc mnc) return OCT3 {
Harald Welte24135bd2018-03-17 19:27:53 +01001109 if (lengthof(mnc) == 2) {
1110 return hex2oct(mcc[1] & mcc[0] & 'F'H & mcc[2] & mnc[1] & mnc[0]);
Stefan Sperling83348bc2018-03-14 17:44:40 +01001111 } else {
1112 return hex2oct(mcc[1] & mcc[0] & mnc[2] & mcc[2] & mnc[1] & mnc[0]);
1113 }
Harald Welte72cecfa2017-12-11 19:50:14 +01001114}
1115
Harald Welteaba42162019-06-19 18:17:59 +02001116template (value) BSSMAP_FIELD_CellIdentification_CGI ts_BSSMAP_CI_CGI(GsmMcc mcc, GsmMnc mnc, GsmLac lac, GsmCellId ci) := {
Harald Welte72cecfa2017-12-11 19:50:14 +01001117 mcc_mnc := f_enc_mcc_mnc(mcc, mnc),
1118 lac := int2oct(lac, 2),
1119 ci := int2oct(ci, 2)
1120}
1121
Harald Welteaba42162019-06-19 18:17:59 +02001122template (value) BSSMAP_FIELD_CellIdentification_LAC_CI ts_BSSMAP_CI_LAC_CI(GsmLac lac, GsmCellId ci) := {
Harald Welte72cecfa2017-12-11 19:50:14 +01001123 lac := int2oct(lac, 2),
1124 ci := int2oct(ci, 2)
1125}
1126
Harald Welteaba42162019-06-19 18:17:59 +02001127template (value) BSSMAP_FIELD_CellIdentification_LAI ts_BSSMAP_CI_LAI(GsmMcc mcc, GsmMnc mnc, GsmLac lac) := {
Harald Welte72cecfa2017-12-11 19:50:14 +01001128 mcc_mnc := f_enc_mcc_mnc(mcc, mnc),
1129 lac := int2oct(lac, 2)
1130}
1131
Harald Welteaba42162019-06-19 18:17:59 +02001132template (value) OCT2 ts_BSSMAP_CI_LAC(GsmLac lac) := int2oct(lac, 2);
1133template (value) OCT2 ts_BSSMAP_CI_CI(GsmCellId ci) := int2oct(ci, 2);
Harald Welte72cecfa2017-12-11 19:50:14 +01001134
Harald Welteaba42162019-06-19 18:17:59 +02001135template (value) BSSMAP_FIELD_CellIdentification_PLMN_LAC_RNC
Harald Welte751d3eb2018-01-31 15:51:06 +01001136ts_BSSMAP_CI_PLMN_LAC_RNC(GsmMcc mcc, GsmMnc mnc, GsmLac lac, uint16_t rnc_id) := {
1137 mcc_mnc := f_enc_mcc_mnc(mcc, mnc),
1138 lac := int2oct(lac, 2),
1139 rncId := int2oct(rnc_id, 2)
1140}
1141
Harald Welteaba42162019-06-19 18:17:59 +02001142template (value) BSSMAP_FIELD_CellIdentification_LAC_RNC ts_BSSMAP_CI_LAC_RNC(GsmLac lac, uint16_t rnc_id) := {
Harald Welte751d3eb2018-01-31 15:51:06 +01001143 lac := int2oct(lac, 2),
1144 rncId := int2oct(rnc_id, 2)
1145}
1146
Harald Welte72cecfa2017-12-11 19:50:14 +01001147template BSSMAP_IE_ChannelNeeded ts_BSSMAP_IE_ChanNeeded(BIT2 chneed) := {
1148 elementIdentifier := '24'O,
1149 channel := chneed,
1150 spare := '000000'B
1151}
1152
1153template BSSMAP_IE_TMSI ts_BSSMAP_IE_TMSI(OCT4 tmsi) := {
1154 elementIdentifier := '09'O,
1155 lengthIndicator := 4,
1156 tmsiOctets := tmsi
1157};
1158
Harald Welte17d21152018-01-27 00:47:11 +01001159template BSSMAP_IE_TMSI tr_BSSMAP_IE_TMSI(template OCT4 tmsi) := {
1160 elementIdentifier := '09'O,
1161 lengthIndicator := 4,
1162 tmsiOctets := tmsi
1163};
1164
Harald Welte72cecfa2017-12-11 19:50:14 +01001165private function f_tmsi_or_omit(template OCT4 tmsi) return template BSSMAP_IE_TMSI {
1166 var template BSSMAP_IE_TMSI ret;
1167 if (ispresent(tmsi)) {
1168 ret := ts_BSSMAP_IE_TMSI(valueof(tmsi));
1169 } else {
1170 ret := omit;
1171 }
1172 return ret;
1173}
1174
1175template PDU_BSSAP ts_BSSMAP_Paging(hexstring imsi_digits,
1176 template BSSMAP_FIELD_CellIdentificationList cid_list,
1177 template OCT4 tmsi := omit,
1178 template BSSMAP_IE_ChannelNeeded chneed := omit)
Harald Welte28d943e2017-11-25 15:00:50 +01001179modifies ts_BSSAP_BSSMAP := {
1180 pdu := {
1181 bssmap := {
1182 paging := {
Harald Welte17d21152018-01-27 00:47:11 +01001183 messageType := '52'O,
Harald Welte28d943e2017-11-25 15:00:50 +01001184 iMSI := ts_BSSMAP_Imsi(imsi_digits),
Harald Welte72cecfa2017-12-11 19:50:14 +01001185 tMSI := f_tmsi_or_omit(tmsi),
Neels Hofmeyr0ac63152019-05-07 01:20:17 +02001186 cellIdentifierList := ts_BSSMAP_IE_CidList(cid_list),
Harald Welte72cecfa2017-12-11 19:50:14 +01001187 channelNeeded := chneed,
Harald Welte28d943e2017-11-25 15:00:50 +01001188 eMLPP_Priority := omit,
1189 pagingInformation := omit /* only VGCS/VBS flag */
1190 }
1191 }
1192 }
1193}
1194
Harald Welte17d21152018-01-27 00:47:11 +01001195template PDU_BSSAP tr_BSSMAP_Paging(template hexstring imsi_digits := ?,
1196 template OCT4 tmsi := *,
1197 template BSSMAP_IE_ChannelNeeded chneed := *)
1198modifies tr_BSSAP_BSSMAP := {
1199 pdu := {
1200 bssmap := {
1201 paging := {
1202 messageType := '52'O,
1203 iMSI := tr_BSSMAP_Imsi(imsi_digits),
1204 tMSI := tr_BSSMAP_IE_TMSI(tmsi) ifpresent,
1205 cellIdentifierList := ?,
1206 channelNeeded := chneed,
1207 eMLPP_Priority := omit,
1208 pagingInformation := omit /* only VGCS/VBS flag */
1209 }
1210 }
1211 }
1212}
1213
1214
Harald Welte73cd2712017-12-17 00:44:52 +01001215template PDU_BSSAP ts_BSSMAP_CipherModeCmd(OCT1 alg, OCT8 key)
1216modifies ts_BSSAP_BSSMAP := {
1217 pdu := {
1218 bssmap := {
1219 cipherModeCommand := {
1220 messageType := '53'O,
1221 layer3HeaderInfo := omit,
1222 encryptionInformation := ts_BSSMAP_IE_EncrInfo(key, alg),
1223 cipherResponseMode := omit,
1224 kC128 := omit
1225 }
1226 }
1227 }
1228}
1229
1230template PDU_BSSAP ts_BSSMAP_CipherModeCmdKc128(OCT1 alg, OCT8 key, OCT16 kc128)
1231modifies ts_BSSAP_BSSMAP := {
1232 pdu := {
1233 bssmap := {
1234 cipherModeCommand := {
1235 messageType := '53'O,
1236 layer3HeaderInfo := omit,
1237 encryptionInformation := ts_BSSMAP_IE_EncrInfo(key, alg),
1238 cipherResponseMode := omit,
1239 kC128 := { '83'O, kc128 }
1240 }
1241 }
1242 }
1243}
1244
Harald Welte16114282018-01-24 22:41:21 +01001245template PDU_BSSAP tr_BSSMAP_CipherModeCmd(template OCT1 alg, template OCT8 key)
1246modifies tr_BSSAP_BSSMAP := {
1247 pdu := {
1248 bssmap := {
1249 cipherModeCommand := {
1250 messageType := '53'O,
1251 layer3HeaderInfo := *,
1252 encryptionInformation := tr_BSSMAP_IE_EncrInfo(key, alg),
1253 cipherResponseMode := *,
1254 kC128 := *
1255 }
1256 }
1257 }
1258}
1259
1260template PDU_BSSAP ts_BSSMAP_CipherModeCompl(OCT1 alg)
1261modifies ts_BSSAP_BSSMAP := {
1262 pdu := {
1263 bssmap := {
1264 cipherModeComplete := {
1265 messageType := '55'O,
1266 layer3MessageContents := omit,
1267 chosenEncryptionAlgorithm := {
1268 elementIdentifier := '2C'O,
1269 algorithmIdentifier := alg
1270 }
1271 }
1272 }
1273 }
1274}
1275
Stefan Sperlinga2d59c62018-12-18 16:32:44 +01001276template PDU_BSSAP ts_BSSMAP_CipherModeComplAlg(template BSSMAP_IE_ChosenEncryptionAlgorithm chosenEncryptionAlgorithm := ?)
1277modifies ts_BSSAP_BSSMAP := {
1278 pdu := {
1279 bssmap := {
1280 cipherModeComplete := {
1281 messageType := '55'O,
1282 layer3MessageContents := omit,
1283 chosenEncryptionAlgorithm := chosenEncryptionAlgorithm
1284 }
1285 }
1286 }
1287}
1288
Harald Welte73cd2712017-12-17 00:44:52 +01001289template PDU_BSSAP tr_BSSMAP_CipherModeCompl(template OCT1 alg := ?) modifies tr_BSSAP_BSSMAP := {
1290 pdu := {
1291 bssmap := {
1292 cipherModeComplete := {
1293 messageType := '55'O,
1294 layer3MessageContents := *,
1295 chosenEncryptionAlgorithm := {
1296 elementIdentifier := '2C'O,
1297 algorithmIdentifier := alg
1298 }
1299 }
1300 }
1301 }
1302}
1303
1304template PDU_BSSAP tr_BSSMAP_CipherModeRej modifies tr_BSSAP_BSSMAP := {
1305 pdu := {
1306 bssmap := {
1307 cipherModeReject := {
1308 messageType := '59'O,
1309 cause := ?
1310 }
1311 }
1312 }
1313}
1314
Daniel Willmann52918e52018-09-20 14:39:09 +02001315template PDU_BSSAP tr_BSSMAP_ClassmarkReq modifies tr_BSSAP_BSSMAP := {
1316 pdu := {
1317 bssmap := {
1318 classmarkRequest := {
1319 messageType := '58'O,
1320 talkerPriority := *
1321 }
1322 }
1323 }
1324}
1325
Harald Welte5c2622c2018-01-21 20:45:20 +01001326template BSSMAP_IE_ClassmarkInformationType2 ts_CM2_default := {
1327 elementIdentifier := '12'O,
1328 lengthIndicator := 0, /* overwritten */
1329 /* CM1 */
1330 rf_PowerCapability := '010'B, /* class3 */
1331 a5_1 := '0'B, /* supported */
1332 esind := '1'B, /* early classmark supported */
1333 revisionLevel := '10'B, /* R99 */
1334 spare1_1 := '0'B,
1335 /* CM2 */
1336 fc := '1'B, /* E-GSM support */
1337 vgcs := '0'B,
1338 vbs := '0'B,
1339 sm_Capability := '1'B,
1340 ss_ScreenIndicator := '00'B,
1341 ps_Capability := '1'B,
1342 spare2_1 := '0'B,
1343 classmarkInformationType2_oct5 := {
1344 a5_2 := '0'B, /* not available */
1345 a5_3 := '1'B, /* available */
1346 cmsp := '0'B, /* not supported */
1347 solsa := '0'B, /* not suported */
1348 ucs2 := '0'B, /* GSM alphabet preferred */
1349 lcsvacap := '0'B, /* not supported */
1350 spare := '0'B,
1351 cm3 := '0'B /* no CM3 */
1352 }
1353}
1354
1355template PDU_BSSAP ts_BSSMAP_ClassmarkUpd(template BSSMAP_IE_ClassmarkInformationType2 cm2 := ts_CM2_default,
1356 template BSSMAP_IE_ClassmarkInformationType3 cm3 := omit)
1357modifies ts_BSSAP_BSSMAP := {
1358 pdu := {
1359 bssmap := {
1360 classmarkUpdate := {
1361 messageType := '54'O,
1362 classmarkInformationType2 := cm2,
1363 classmarkInformationType3 := cm3,
1364 talkerPriority := omit
1365 }
1366 }
1367 }
1368}
1369
Harald Welte898113b2018-01-31 18:32:21 +01001370template PDU_BSSAP tr_BSSMAP_ClassmarkUpd(template BSSMAP_IE_ClassmarkInformationType2 cm2 := *,
1371 template BSSMAP_IE_ClassmarkInformationType3 cm3 := *)
1372modifies tr_BSSAP_BSSMAP := {
1373 pdu := {
1374 bssmap := {
1375 classmarkUpdate := {
1376 messageType := '54'O,
1377 classmarkInformationType2 := cm2,
1378 classmarkInformationType3 := cm3,
1379 talkerPriority := *
1380 }
1381 }
1382 }
1383}
1384
Neels Hofmeyr92b12b72018-09-18 14:30:23 +02001385template PDU_BSSAP ts_BSSMAP_ClassmarkRequest
1386modifies ts_BSSAP_BSSMAP := {
1387 pdu := {
1388 bssmap := {
1389 classmarkRequest := {
1390 messageType := '58'O,
1391 talkerPriority := omit
1392 }
1393 }
1394 }
1395}
1396
Harald Welte49518bf2018-02-10 11:39:19 +01001397/* return Layer3 octetstring inside BSSAP PDU */
1398function f_bssap_extract_l3(PDU_BSSAP bssap) return template octetstring {
1399 if (ischosen(bssap.pdu.bssmap)) {
1400 var PDU_BSSMAP bssmap := bssap.pdu.bssmap;
1401 if (ischosen(bssmap.completeLayer3Information)) {
1402 return bssmap.completeLayer3Information.layer3Information.layer3info;
1403 } else if (ischosen(bssmap.handoverRequestAck)) {
1404 return bssmap.handoverRequestAck.layer3Information.layer3info;
1405 } else if (ischosen(bssmap.handoverCommand)) {
1406 return bssmap.handoverCommand.layer3Information.layer3info;
1407 } else if (ischosen(bssmap.uplinkRequest)) {
1408 return bssmap.uplinkRequest.layer3Information.layer3info;
1409 } else if (ischosen(bssmap.uplinkRequestConfirmation)) {
1410 return bssmap.uplinkRequestConfirmation.layer3Information.layer3info;
1411 } else if (ischosen(bssmap.uplinkApplicationData)) {
1412 return bssmap.uplinkApplicationData.layer3Information.layer3info;
1413 } else if (ischosen(bssmap.rerouteCommand)) {
1414 return bssmap.rerouteCommand.initialLayer3Information.layer3info;
1415 } else {
1416 return omit;
1417 }
1418 } else {
1419 return bssap.pdu.dtap;
1420 }
1421}
1422
Harald Welte0b50aed2018-05-28 22:33:07 +02001423/* TS 29.205 B.2.1.9 */
1424template (value) GlobalCallReferenceValue ts_GCR(octetstring net_id, OCT2 node_id, OCT5 cref_id) := {
1425 networkIDLengthIndicator := 0, /* overwritten */
1426 networkID := net_id,
1427 nodeIDLengthIndicator := 0, /* overwritten */
1428 nodeID := node_id,
1429 callReferenceIDLengthIndicator := 0, /* overwritten */
1430 callReferenceID := cref_id
1431}
1432template GlobalCallReferenceValue tr_GCR(template octetstring net_id,
1433 template OCT2 node_id,
1434 template OCT5 cref_id) := {
1435 networkIDLengthIndicator := ?,
1436 networkID := net_id,
1437 nodeIDLengthIndicator := ?,
1438 nodeID := node_id,
1439 callReferenceIDLengthIndicator := ?,
1440 callReferenceID := cref_id
1441}
1442
1443/* TS 47.008 3.2.2.115 */
1444template (value) BSSMAP_IE_GlobalCallReference ts_BSSMAP_IE_GCR(template (value) GlobalCallReferenceValue gcr) := {
1445 elementIdentifier := '89'O,
1446 lengthIndicator := 0, /* overwritten */
1447 globalCallReferenceValue := gcr
1448}
1449template BSSMAP_IE_GlobalCallReference tr_BSSMAP_IE_GCR(template GlobalCallReferenceValue gcr) := {
1450 elementIdentifier := '89'O,
1451 lengthIndicator := ?,
1452 globalCallReferenceValue := gcr
1453}
1454
1455/* TS 48.008 3.2.2.116 */
1456const BIT4 LCLS_CFG_both_way := '0000'B;
1457const BIT4 LCLS_CFG_both_way_and_bicast_UL := '0001'B;
1458const BIT4 LCLS_CFG_both_way_and_send_DL := '0010'B;
1459const BIT4 LCLS_CFG_both_way_and_send_DL_block_local_DL := '0011'B;
1460const BIT4 LCLS_CFG_both_way_and_bicast_UL_send_DL := '0100'B;
1461const BIT4 LCLS_CFG_both_way_and_bicast_UL_send_DL_block_local_DL := '0101'B;
1462
1463template (value) BSSMAP_IE_LCLS_Configuration ts_BSSMAP_IE_LclsCfg(BIT4 cfg_val) := {
1464 elementIdentifier := '8A'O,
1465 lCLS_ConfigurationValue := cfg_val,
1466 spare := '0000'B
1467}
1468template BSSMAP_IE_LCLS_Configuration tr_BSSMAP_IE_LclsCfg(template BIT4 cfg_val) := {
1469 elementIdentifier := '8A'O,
1470 lCLS_ConfigurationValue := cfg_val,
1471 spare := '0000'B
1472}
1473
1474/* TS 48.008 3.2.2.117 */
1475const BIT4 LCLS_CSC_connect := '0000'B;
1476const BIT4 LCLS_CSC_do_not_connect := '0001'B;
1477const BIT4 LCLS_CSC_release_lcls := '0010'B;
1478const BIT4 LCLS_CSC_bicast_UL_at_handover := '0011'B;
1479const BIT4 LCLS_CSC_bicast_UL_and_recv_DL_at_handover := '0100'B;
1480
1481template (value) BSSMAP_IE_LCLS_ConnectionStatusControl ts_BSSMAP_IE_LclsCsc(BIT4 csc) := {
1482 elementIdentifier := '8B'O,
1483 lCLS_ConnectionStatusControlValue := csc,
1484 spare := '0000'B
1485}
1486template BSSMAP_IE_LCLS_ConnectionStatusControl tr_BSSMAP_IE_LclsCsc(template BIT4 csc) := {
1487 elementIdentifier := '8B'O,
1488 lCLS_ConnectionStatusControlValue := csc,
1489 spare := '0000'B
1490}
1491
1492/* TS 48.008 3.2.2.119 */
1493const BIT4 LCLS_STS_not_yet_ls := '0000'B;
1494const BIT4 LCLS_STS_not_possible_ls := '0001'B;
1495const BIT4 LCLS_STS_no_longer_ls := '0010'B;
1496const BIT4 LCLS_STS_req_lcls_not_supp := '0011'B;
1497const BIT4 LCLS_STS_locally_switched := '0100'B;
1498
1499template (value) BSSMAP_IE_LCLS_BSS_Status ts_BSSMAP_IE_LclsSts(BIT4 sts) := {
1500 elementIdentifier := '8D'O,
1501 lCLS_BSS_StatusValue := sts,
1502 spare := '0000'B
1503}
1504template BSSMAP_IE_LCLS_BSS_Status tr_BSSMAP_IE_LclsSts(template BIT4 sts) := {
1505 elementIdentifier := '8D'O,
1506 lCLS_BSS_StatusValue := sts,
1507 spare := '0000'B
1508}
1509
1510/* TS 48.008 3.2.1.91 */
1511template (value) PDU_BSSAP ts_BSSMAP_LclsConnCtrl(template (omit) BSSMAP_IE_LCLS_Configuration cfg,
Harald Welte354722e2018-06-01 13:15:32 +02001512 template (omit) BSSMAP_IE_LCLS_ConnectionStatusControl csc) modifies ts_BSSAP_BSSMAP := {
Harald Welte0b50aed2018-05-28 22:33:07 +02001513 pdu := {
1514 bssmap := {
1515 lCLS_ConnectControl := {
1516 messageType := '74'O,
1517 lCLS_Configuration := cfg,
1518 lCLS_ConnectionStatusControl := csc
1519 }
1520 }
1521 }
1522}
1523template PDU_BSSAP tr_BSSMAP_LclsConnCtrl(template BSSMAP_IE_LCLS_Configuration cfg,
Harald Welte354722e2018-06-01 13:15:32 +02001524 template BSSMAP_IE_LCLS_ConnectionStatusControl csc)
1525modifies tr_BSSAP_BSSMAP := {
Harald Welte0b50aed2018-05-28 22:33:07 +02001526 pdu := {
1527 bssmap := {
1528 lCLS_ConnectControl := {
1529 messageType := '74'O,
1530 lCLS_Configuration := cfg,
1531 lCLS_ConnectionStatusControl := csc
1532 }
1533 }
1534 }
1535}
1536
1537/* TS 48.008 3.2.1.92 */
Harald Welte354722e2018-06-01 13:15:32 +02001538template (value) PDU_BSSAP ts_BSSMAP_LclsConnCtrlAck(template (value) BSSMAP_IE_LCLS_BSS_Status sts)
1539modifies ts_BSSAP_BSSMAP := {
Harald Welte0b50aed2018-05-28 22:33:07 +02001540 pdu := {
1541 bssmap := {
1542 lCLS_connectControlAck := {
1543 messageType := '75'O,
1544 lCLS_BSS_Status := sts
1545 }
1546 }
1547 }
1548}
Harald Welte354722e2018-06-01 13:15:32 +02001549template PDU_BSSAP tr_BSSMAP_LclsConnCtrlAck(template BSSMAP_IE_LCLS_BSS_Status sts)
1550modifies tr_BSSAP_BSSMAP := {
Harald Welte0b50aed2018-05-28 22:33:07 +02001551 pdu := {
1552 bssmap := {
1553 lCLS_connectControlAck := {
1554 messageType := '75'O,
1555 lCLS_BSS_Status := sts
1556 }
1557 }
1558 }
1559}
1560
1561/* TS 48.008 3.2.1.93 */
1562template (value) PDU_BSSAP ts_BSSMAP_LclsNotification(template (omit) BSSMAP_IE_LCLS_BSS_Status sts,
Harald Welte354722e2018-06-01 13:15:32 +02001563 template (omit) BSSMAP_IE_LCLS_BreakRequest brq)
1564modifies ts_BSSAP_BSSMAP := {
Harald Welte0b50aed2018-05-28 22:33:07 +02001565 pdu := {
1566 bssmap := {
1567 lCLS_Notification := {
1568 messageType := '76'O,
1569 lCLS_BSS_Status := sts,
1570 lCLS_BreakRequest := brq
1571 }
1572 }
1573 }
1574}
1575template PDU_BSSAP tr_BSSMAP_LclsNotification(template BSSMAP_IE_LCLS_BSS_Status sts,
Harald Welte354722e2018-06-01 13:15:32 +02001576 template BSSMAP_IE_LCLS_BreakRequest brq)
1577modifies tr_BSSAP_BSSMAP := {
Harald Welte0b50aed2018-05-28 22:33:07 +02001578 pdu := {
1579 bssmap := {
1580 lCLS_Notification := {
1581 messageType := '76'O,
1582 lCLS_BSS_Status := sts,
1583 lCLS_BreakRequest := brq
1584 }
1585 }
1586 }
1587}
1588
Harald Weltecc0b0142018-05-29 15:19:33 +02001589template PDU_BSSAP tr_BSSMAP_LclsNotificationSts(BIT4 sts)
1590modifies tr_BSSAP_BSSMAP := {
1591 pdu := {
1592 bssmap := {
1593 lCLS_Notification := {
1594 messageType := '76'O,
1595 lCLS_BSS_Status := tr_BSSMAP_IE_LclsSts(sts),
1596 lCLS_BreakRequest := omit
1597 }
1598 }
1599 }
1600}
Harald Welte898113b2018-01-31 18:32:21 +01001601
1602
Harald Welte73cd2712017-12-17 00:44:52 +01001603
Harald Weltec859df52017-11-24 23:41:41 +01001604
Harald Welteb69533d2017-12-15 13:55:17 +01001605} with { encode "RAW" };