blob: 43a7d7db42198865c32f91b9a215514a14ca3cd0 [file] [log] [blame]
Harald Welteea260342019-08-01 09:49:38 +02001module CBSP_Types {
2
3/* CBSP_Types, defining abstract TTCN-3 data types for the CBSP protocol.
4 *
5 * CBSP is a ETSI/3GPP standard protocol used between CBC (Cell Broadcast Centre)
6 * and BSC (Base Station Controller) in 2G/GSM/GERAN networks. It is specified
7 * in 3GPP TS 48.049.
8 *
9 * (C) 2019 by Harald Welte <laforge@gnumonks.org>
10 * All rights reserved.
11 *
12 * Released under the terms of GNU General Public License, Version 2 or
13 * (at your option) any later version.
14 */
15
16import from General_Types all;
17import from Osmocom_Types all;
18import from BSSAP_Types all;
19
20
21/* 8.2.2 Message Type */
22type enumerated CBSP_MessageType {
23 CBSP_MSGT_WRITE_REPLACE ('01'O),
24 CBSP_MSGT_WRITE_REPLACE_COMPL ('02'O),
25 CBSP_MSGT_WRITE_REPLACE_FAIL ('03'O),
26 CBSP_MSGT_KILL ('04'O),
27 CBSP_MSGT_KILL_COMPL ('05'O),
28 CBSP_MSGT_KILL_FAIL ('06'O),
29 CBSP_MSGT_LOAD_QUERY ('07'O),
30 CBSP_MSGT_LOAD_QUERY_COMPL ('08'O),
31 CBSP_MSGT_LOAD_QUERY_FAIL ('09'O),
32 CBSP_MSGT_MSG_STATUS_QUERY ('0a'O),
33 CBSP_MSGT_MSG_STATUS_QUERY_COMPL ('0b'O),
34 CBSP_MSGT_MSG_STATUS_QUERY_FAIL ('0c'O),
35 CBSP_MSGT_SET_DRX ('0d'O),
36 CBSP_MSGT_SET_DRX_COMPL ('0e'O),
37 CBSP_MSGT_SET_DRX_FAIL ('0f'O),
38 CBSP_MSGT_RESET ('10'O),
39 CBSP_MSGT_RESET_COMPL ('11'O),
40 CBSP_MSGT_RESET_FAIL ('12'O),
41 CBSP_MSGT_RESTART ('13'O),
42 CBSP_MSGT_FAILURE ('14'O),
43 CBSP_MSGT_ERROR_IND ('15'O),
44 CBSP_MSGT_KEEP_ALIVE ('16'O),
45 CBSP_MSGT_KEEP_ALIVE_COMPL ('17'O)
46} with { variant "FIELDLENGTH(8)" };
47
48/* 8.2.1 Information Element Identifier */
49type enumerated CBSP_IEI {
50 CBSP_IEI_MSG_CONTENT ('01'O),
51 CBSP_IEI_OLD_SERIAL_NR ('02'O),
52 CBSP_IEI_NEW_SERIAL_NR ('03'O),
53 CBSP_IEI_CELL_LIST ('04'O),
54 CBSP_IEI_CATEGORY ('05'O),
55 CBSP_IEI_REP_PERIOD ('06'O),
56 CBSP_IEI_NUM_BCAST_REQ ('07'O),
57 CBSP_IEI_NUM_BCAST_COMPL_LIST ('08'O),
58 CBSP_IEI_FAILURE_LIST ('09'O),
59 CBSP_IEI_RR_LOADING_LIST ('0a'O),
60 CBSP_IEI_CAUSE ('0b'O),
61 CBSP_IEI_DCS ('0c'O),
62 CBSP_IEI_RECOVERY_IND ('0d'O),
63 CBSP_IEI_MSG_ID ('0e'O),
64 CBSP_IEI_EMERG_IND ('0f'O),
65 CBSP_IEI_WARN_TYPE ('10'O),
66 CBSP_IEI_WARN_SEC_INFO ('11'O),
67 CBSP_IEI_CHANNEL_IND ('12'O),
68 CBSP_IEI_NUM_OF_PAGES ('13'O),
69 CBSP_IEI_SCHEDULE_PERIOD ('14'O),
70 CBSP_IEI_NUM_OF_RES_SLOTS ('15'O),
71 CBSP_IEI_BCAST_MSG_TYPE ('16'O),
72 CBSP_IEI_WARNING_PERIOD ('17'O),
73 CBSP_IEI_KEEP_ALIVE_REP_PERIOD ('18'O)
74} with { variant "FIELDLENGTH(8)" };
75
76/* 8.2.7 Category */
77type enumerated CBSP_Category {
78 CBSP_CATEG_HIGH_PRIO ('00'O),
79 CBSP_CATEG_BACKGROUND ('01'O),
80 CBSP_CATEG_NORMAL ('02'O)
81} with { variant "FIELDLENGTH(8)" };
82
83/* Cell ID Discriminator (8.2.11, ...) */
84type enumerated CBSP_CellIdDisc {
85 CBSP_CIDD_WHOLE_CGI (0),
86 CBSP_CIDD_LAC_CI (1),
87 CBSP_CIDD_CI (2),
88 CBSP_CIDD_LAI (4),
89 CBSP_CIDD_LAC (5),
90 CBSP_CIDD_ALL_IN_BSC (6)
91} with { variant "FIELDLENGTH(4)" };
92
93/* 8.2.13 Cause */
94type enumerated CBSP_Cause {
95 CBSP_CAUSE_PARAM_NOT_RECOGNISED ('00'O),
96 CBSP_CAUSE_PARAM_VAL_INVALID ('01'O),
97 CBSP_CAUSE_MSG_REF_NOT_IDENTIFIED ('02'O),
98 CBSP_CAUSE_CELL_ID_NOT_VALID ('03'O),
99 CBSP_CAUSE_UNRECOGNISED_MSG ('04'O),
100 CBSP_CAUSE_MISSING_MAND_IE ('05'O),
101 CBSP_CAUSE_BSC_CAPACITY_EXCEEDED ('06'O),
102 CBSP_CAUSE_CELL_MEMORY_EXCEEDED ('07'O),
103 CBSP_CAUSE_BSC_MEMORY_EXCEEDED ('08'O),
104 CBSP_CAUSE_CB_NOT_SUPPORTED ('09'O),
105 CBSP_CAUSE_CB_NOT_OPERATIONAL ('0a'O),
106 CBSP_CAUSE_INCOMPATIBLE_DRX_PARAM ('0b'O),
107 CBSP_CAUSE_EXT_CHAN_NOT_SUPPORTED ('0c'O),
108 CBSP_CAUSE_MSG_REF_ALREADY_USED ('0d'O),
109 CBSP_CAUSE_UNSPECIFIED_ERROR ('0e'O),
110 CBSP_CAUSE_LAI_OR_LAC_NPT_VALID ('0f'O)
111} with { variant "FIELDLENGTH(8)" };
112
113type record CBSP_IE_MessageContent {
114 uint8_t user_len,
115 octetstring val
116} with { variant (val) "FIELDLENGTH(82)" };
117
118/* 8.2.6 Cell List */
119type record CBSP_IE_CellList {
120 uint16_t len,
121 BIT4 spare1_4,
122 BIT4 cell_id_discr,
123 BSSMAP_FIELD_CellIdentificationList cell_id
124} with {
125 variant (len) "LENGTHTO(cell_id_discr,spare1_4,cell_id)"
126 variant (cell_id) "CROSSTAG(
127 cIl_CGI, cell_id_discr = '0000'B;
128 cIl_LAC_CI, cell_id_discr = '0001'B;
129 cIl_CI, cell_id_discr = '0010'B;
130 cIl_LAI, cell_id_discr = '0100'B;
131 cIl_LAC, cell_id_discr = '0101'B;
132 cIl_allInBSS, cell_id_discr = '0110'B;
133 )"
134};
135
136/* 8.2.10 Number of Broadcasts Completed List */
137type record CBSP_IE_NumBcastComplList {
138 uint16_t len,
139 BIT4 spare1_4,
140 BIT4 cell_id_discr,
141 CBSP_FIELD_NumBcastCompl list
142} with {
143 variant (len) "LENGTHTO(cell_id_discr,spare1_4,list)"
144 variant (list) "CROSSTAG(
145 cI_CGI, cell_id_discr = '0000'B;
146 cI_LAC_CI, cell_id_discr = '0001'B;
147 cI_CI, cell_id_discr = '0010'B;
148 cI_LAI, cell_id_discr = '0100'B;
149 cI_LAC, cell_id_discr = '0101'B;
150 cI_allInBSS, cell_id_discr = '0110'B;
151 )"
152};
153type union CBSP_FIELD_NumBcastCompl {
154 CBSP_FIELD_NumBcastCompl_CGI cI_CGI,
155 CBSP_FIELD_NumBcastCompl_LAC_CI cI_LAC_CI,
156 OCT0 cI_allInBSS,
157 CBSP_FIELD_NumBcastCompl_CI cI_CI,
158 CBSP_FIELD_NumBcastCompl_LAC cI_LAC,
159 CBSP_FIELD_NumBcastCompl_LAI cI_LAI
160};
161type record CBSP_FIELD_NumBcastCompl_CGI {
162 BSSMAP_FIELD_CellIdentification_CGI ci,
163 uint16_t num_bcats_compl,
164 CBSP_NumBcastInfo num_bcast_info,
165 BIT4 spare1_4
166};
167type record CBSP_FIELD_NumBcastCompl_LAC_CI {
168 BSSMAP_FIELD_CellIdentification_LAC_CI ci,
169 uint16_t num_bcats_compl,
170 CBSP_NumBcastInfo num_bcast_info,
171 BIT4 spare1_4
172};
173type record CBSP_FIELD_NumBcastCompl_LAI {
174 BSSMAP_FIELD_CellIdentification_LAI ci,
175 uint16_t num_bcats_compl,
176 CBSP_NumBcastInfo num_bcast_info,
177 BIT4 spare1_4
178};
179type record CBSP_FIELD_NumBcastCompl_CI {
180 OCT2 ci,
181 uint16_t num_bcats_compl,
182 CBSP_NumBcastInfo num_bcast_info,
183 BIT4 spare1_4
184};
185type record CBSP_FIELD_NumBcastCompl_LAC {
186 OCT2 lac,
187 uint16_t num_bcats_compl,
188 CBSP_NumBcastInfo num_bcast_info,
189 BIT4 spare1_4
190};
191type enumerated CBSP_NumBcastInfo {
192 CBSP_NUM_BCAST_INFO_VALID (0),
193 CBSP_NUM_BCAST_INFO_OVERFLOW (1),
194 CBSP_NUM_BCAST_INFO_UNKNOWN (2)
195} with { variant "FIELDLENGTH(4)" };
196
197
198/* 8.2.11 Failure List */
199type record CBSP_FailureListItem {
200 BIT4 spare1_4,
201 BIT4 cell_id_discr,
202 CBSP_FIELD_CellIdentification cell_id,
203 CBSP_Cause cause
204} with {
205 variant (cell_id) "CROSSTAG(
206 cI_CGI, cell_id_discr = '0000'B;
207 cI_LAC_CI, cell_id_discr = '0001'B;
208 cI_CI, cell_id_discr = '0010'B;
209 cI_LAI, cell_id_discr = '0100'B;
210 cI_LAC, cell_id_discr = '0101'B;
211 cI_allInBSS, cell_id_discr = '0110'B;
212 )"
213};
214type union CBSP_FIELD_CellIdentification
215{
216 BSSMAP_FIELD_CellIdentification_CGI cI_CGI,
217 BSSMAP_FIELD_CellIdentification_LAC_CI cI_LAC_CI,
218 OCT2 cI_CI,
219 BSSMAP_FIELD_CellIdentification_LAI cI_LAI,
220 OCT2 cI_LAC,
221 OCT2 cI_allInBSS
222};
223
224type record of CBSP_FailureListItem CBSP_FailureListItems;
225type record CBSP_IE_FailureList {
226 uint16_t len,
227 CBSP_FailureListItems list
228} with {
229 variant (len) "LENGTHTO(list)"
230};
231
232/* 8.2.12 RR Loading List */
233type record CBSP_IE_RrLoadingList {
234 uint16_t len,
235 BIT4 spare1_4,
236 BIT4 cell_id_discr,
237 CBSP_FIELD_RrLoadingList list
238} with {
239 variant (len) "LENGTHTO(cell_id_discr,spare1_4,list)"
240 variant (list) "CROSSTAG(
241 cI_CGI, cell_id_discr = '0000'B;
242 cI_LAC_CI, cell_id_discr = '0001'B;
243 cI_CI, cell_id_discr = '0010'B;
244 cI_LAI, cell_id_discr = '0100'B;
245 cI_LAC, cell_id_discr = '0101'B;
246 cI_allInBSS, cell_id_discr = '0110'B;
247 )"
248};
249type union CBSP_FIELD_RrLoadingList {
250 CBSP_FIELD_RrLoadingList_CGI cI_CGI,
251 CBSP_FIELD_RrLoadingList_LAC_CI cI_LAC_CI,
252 OCT0 cI_allInBSS,
253 CBSP_FIELD_RrLoadingList_CI cI_CI,
254 CBSP_FIELD_RrLoadingList_LAC cI_LAC,
255 CBSP_FIELD_RrLoadingList_LAI cI_LAI
256};
257type record CBSP_FIELD_RrLoadingList_CGI {
258 BSSMAP_FIELD_CellIdentification_CGI ci,
259 uint8_t load1,
260 uint8_t load2
261};
262type record CBSP_FIELD_RrLoadingList_LAC_CI {
263 BSSMAP_FIELD_CellIdentification_LAC_CI ci,
264 uint8_t load1,
265 uint8_t load2
266};
267type record CBSP_FIELD_RrLoadingList_LAI {
268 BSSMAP_FIELD_CellIdentification_LAI ci,
269 uint8_t load1,
270 uint8_t load2
271};
272type record CBSP_FIELD_RrLoadingList_CI {
273 OCT2 ci,
274 uint8_t load1,
275 uint8_t load2
276};
277type record CBSP_FIELD_RrLoadingList_LAC {
278 OCT2 lac,
279 uint8_t load1,
280 uint8_t load2
281};
282
283/* 8.2.15 Recovery Indication */
284type record CBSP_IE_RecoveryInd {
285 BIT4 spare1_4,
286 CBSP_RecoveryInd recovery
287};
288type enumerated CBSP_RecoveryInd {
289 CBSP_RI_DATA_AVAILABLE (0),
290 CBSP_RI_DATA_LOST (1)
291} with { variant "FIELDLENGTH(4)" };
292
293/* 8.2.24 Broadcast Message Type */
294type record CBSP_IE_BcastMsgType {
295 BIT4 spare1_4,
296 CBSP_BcastMsgType msg_type
297};
298type enumerated CBSP_BcastMsgType {
299 CBSP_BC_MSGT_CBS (0),
300 CBSP_BC_MSGT_EMERG (1)
301} with { variant "FIELDLENGTH(4)" };
302
303
304type union CBSP_IE_Body {
305 CBSP_IE_MessageContent msg_content,
306 uint16_t old_ser_nr,
307 uint16_t new_ser_nr,
308 CBSP_IE_CellList cell_list,
309 CBSP_Category category,
310 uint16_t rep_period,
311 uint16_t num_bcast_req,
312 CBSP_IE_NumBcastComplList num_bcast_compl_list,
313 CBSP_IE_FailureList failure_list,
314 CBSP_IE_RrLoadingList rr_loading_list,
315 CBSP_Cause cause,
316 uint8_t dcs,
317 CBSP_IE_RecoveryInd recovery_ind,
318 uint16_t msg_id,
319 uint8_t emerg_ind,
320 uint16_t warn_type,
321 octetstring warn_sec_info,
322 uint8_t channel_ind,
323 uint8_t num_of_pages,
324 uint8_t schedule_period,
325 uint8_t num_of_res_slots,
326 CBSP_IE_BcastMsgType bcast_msg_type,
327 uint8_t warning_period,
328 uint8_t keep_alive_rep_period
329} with {
330 variant (warn_sec_info) "FIELDLENGTH(50)"
331};
332
333type record CBSP_IE {
334 CBSP_IEI iei,
335 CBSP_IE_Body body
336} with {
337 variant (body) "CROSSTAG( msg_content, iei = CBSP_IEI_MSG_CONTENT;
338 old_ser_nr, iei = CBSP_IEI_OLD_SERIAL_NR;
339 new_ser_nr, iei = CBSP_IEI_NEW_SERIAL_NR;
340 cell_list, iei = CBSP_IEI_CELL_LIST;
341 category, iei = CBSP_IEI_CATEGORY;
342 rep_period, iei = CBSP_IEI_REP_PERIOD;
343 num_bcast_req, iei = CBSP_IEI_NUM_BCAST_REQ;
344 num_bcast_compl_list, iei = CBSP_IEI_NUM_BCAST_COMPL_LIST;
345 failure_list, iei = CBSP_IEI_FAILURE_LIST;
346 rr_loading_list, iei = CBSP_IEI_RR_LOADING_LIST;
347 cause, iei = CBSP_IEI_CAUSE;
348 dcs, iei = CBSP_IEI_DCS;
349 recovery_ind, iei = CBSP_IEI_RECOVERY_IND;
350 msg_id, iei = CBSP_IEI_MSG_ID;
351 emerg_ind, iei = CBSP_IEI_EMERG_IND;
352 warn_type, iei = CBSP_IEI_WARN_TYPE;
353 warn_sec_info, iei = CBSP_IEI_WARN_SEC_INFO;
354 channel_ind, iei = CBSP_IEI_CHANNEL_IND;
355 num_of_pages, iei = CBSP_IEI_NUM_OF_PAGES;
356 schedule_period, iei = CBSP_IEI_SCHEDULE_PERIOD;
357 num_of_res_slots, iei = CBSP_IEI_NUM_OF_RES_SLOTS;
358 bcast_msg_type, iei = CBSP_IEI_BCAST_MSG_TYPE;
359 warning_period, iei = CBSP_IEI_WARNING_PERIOD;
360 keep_alive_rep_period, iei = CBSP_IEI_KEEP_ALIVE_REP_PERIOD
361 )"
362};
363
364type set of CBSP_IE CBSP_IEs;
365
366type record CBSP_PDU {
367 CBSP_MessageType msg_type,
368 uint24_t len,
369 CBSP_IEs ies
370} with {
371 variant (len) "LENGTHTO(ies)"
372};
373
374external function enc_CBSP_PDU(in CBSP_PDU msg) return octetstring
375 with { extension "prototype(convert) encode(RAW)" };
376
377external function dec_CBSP_PDU(in octetstring msg) return CBSP_PDU
378 with { extension "prototype(convert) decode(RAW)" };
379
380
381} with { encode "RAW"; variant "FIELDORDER(msb)" }