blob: 7bfaf9b241ef28363d9e2a3e79ea13606bc71502 [file] [log] [blame]
Harald Welte883340c2018-02-28 18:59:29 +01001module PCUIF_Types {
2
3import from General_Types all;
4import from Osmocom_Types all;
5
6/* Osmocom PCU Interface Types, as per osmo-pcu/include/osmocom/pcu/pcuif_proto.h */
7
8const charstring PCU_SOCK_DEFAULT := "/tmp/pcu_bts";
Harald Welte3568dc72018-03-13 17:06:51 +01009const uint32_t PCU_IF_VERSION := 9;
Harald Welte883340c2018-02-28 18:59:29 +010010
11type enumerated PCUIF_MsgType {
12 PCU_IF_MSG_DATA_REQ ('00'O),
13 PCU_IF_MSG_DATA_CNF ('01'O),
14 PCU_IF_MSG_DATA_IND ('02'O),
15 PCU_IF_MSG_SUSP_REQ ('03'O),
16 PCU_IF_MSG_RTS_REQ ('10'O),
17 PCU_IF_MSG_DATA_CNF_DT ('11'O),
18 PCU_IF_MSG_RACH_IND ('22'O),
19 PCU_IF_MSG_INFO_IND ('32'O),
20 PCU_IF_MSG_ACT_REQ ('40'O),
21 PCU_IF_MSG_TIME_IND ('52'O),
22 PCU_IF_MSG_PAG_REQ ('60'O),
23 PCU_IF_MSG_TXT_IND ('70'O)
24} with { variant "FIELDLENGTH(8)" };
25
26type enumerated PCUIF_Sapi {
27 PCU_IF_SAPI_UNKNOWN ('00'O),
28 PCU_IF_SAPI_RACH ('01'O),
29 PCU_IF_SAPI_AGCH ('02'O),
30 PCU_IF_SAPI_PCH ('03'O),
31 PCU_IF_SAPI_BCCH ('04'O),
32 PCU_IF_SAPI_PDTCH ('05'O),
33 PCU_IF_SAPI_PRACH ('06'O),
34 PCU_IF_SAPI_PTCCH ('07'O),
35 PCU_IF_SAPI_AGCH_DT ('08'O)
36} with { variant "FIELDLENGTH(8)" };
37
38type record PCUIF_Flags {
39 boolean bts_active,
40 boolean sysmo_direct_dsp,
41 BIT14 spare,
42 boolean cs1,
43 boolean cs2,
44 boolean cs3,
45 boolean cs4,
46 boolean mcs1,
47 boolean mcs2,
48 boolean mcs3,
49 boolean mcs4,
50 boolean mcs5,
51 boolean mcs6,
52 boolean mcs7,
53 boolean mcs8,
54 boolean mcs9,
55 BIT3 spare2
56} with { variant "" };
57
58type enumerated PCUIF_TextType {
59 PCU_VERSION (0),
60 PCU_OML_ALERT (1)
61} with { variant "FIELDLENGTH(8)" };
62
63type charstring PCUIF_Text length(128) with { variant "FIELDLENGTH(128)" };
64
65type record PCUIF_txt_ind {
66 PCUIF_TextType txt_type,
67 PCUIF_Text text
68} with { variant "" };
69
70type octetstring OCT162 length(162) with { variant "FIELDLENGTH(162)" };
71
72type record PCUIF_data {
73 PCUIF_Sapi sapi,
74 uint8_t len,
75 OCT162 data,
76 uint32_t fn,
77 uint16_t arfcn,
78 uint8_t trx_nr,
79 uint8_t ts_nr,
80 uint8_t block_nr,
81 int8_t rssi,
82 uint16_t ber10k,
83 int16_t ta_offs_qbits,
84 int16_t lqual_cb
85} with { variant "" };
86
87type record PCUIF_data_cnf_dt {
88 PCUIF_Sapi sapi,
89 OCT4 tlli,
90 uint32_t fn,
91 uint16_t arfcn,
92 uint8_t trx_nr,
93 uint8_t ts_nr,
94 uint8_t block_nr,
95 int8_t rssi,
96 uint16_t ber10k,
97 int16_t ta_offs_qbits,
98 int16_t lqual_cb
99} with { variant "" };
100
101type record PCUIF_rts_req {
102 PCUIF_Sapi sapi,
103 OCT3 spare,
104 uint32_t fn,
105 uint16_t arfcn,
106 uint8_t trx_nr,
107 uint8_t ts_nr,
108 uint8_t block_nr
109} with { variant "" };
110
111type record PCUIF_rach_ind {
112 PCUIF_Sapi sapi,
113 uint16_t ra,
114 int16_t qta,
115 uint32_t fn,
116 uint16_t arfcn,
117 uint8_t is_11bit,
118 uint8_t burst_type
119} with { variant "" };
120
121type record PCUIF_InfoTrx {
122 uint16_t arfcn,
123 BIT8 pdch_mask,
124 OCT1 spare,
125 OCT8 tsc,
126 uint32_t hLayer1
Harald Weltef1486592018-04-04 19:26:41 +0200127} with { variant (pdch_mask) "BITORDER(msb)" };
Harald Welte883340c2018-02-28 18:59:29 +0100128
129type record PCUIF_info_ind {
130 uint32_t version,
131 PCUIF_Flags flags,
132 record length(8) of PCUIF_InfoTrx trx,
133 uint8_t bsic,
134
135 uint16_t mcc,
136 uint16_t mnc,
Harald Welte3568dc72018-03-13 17:06:51 +0100137 uint8_t mnc_3_digits,
Harald Welte883340c2018-02-28 18:59:29 +0100138 uint16_t lac,
139 uint16_t rac,
140
141 uint16_t nsei,
142 record length(7) of uint8_t nse_timer,
143 record length(11) of uint8_t cell_timer,
144
145 uint16_t cell_id,
146 uint16_t repeat_time,
147 uint8_t repeat_count,
148 uint16_t bvci,
149 uint8_t t3142,
150 uint8_t t3169,
151 uint8_t t3191,
152 uint8_t t3193_10ms,
153 uint8_t t3195,
154 uint8_t t3101,
155 uint8_t t3103,
156 uint8_t t3105,
157 uint8_t cv_countdown,
158 uint16_t dl_tbf_ext,
159 uint16_t ul_tbf_ext,
160 uint8_t initial_cs,
161 uint8_t initial_mcs,
162
163 record length(2) of uint16_t nsvci,
164 record length(2) of uint16_t local_pprt,
165 record length(2) of uint16_t remote_port,
166 record length(2) of uint32_t remote_ip
167} with { variant "" }
168
169type record PCUIF_act_req {
170 uint8_t is_activate,
171 uint8_t trx_nr,
172 uint8_t ts_nr,
173 OCT1 spare
174} with { variant "" };
175
176type record PCUIF_time_ind {
177 uint32_t fn
178} with { variant "" };
179
180type record PCUIF_pag_req {
181 PCUIF_Sapi sapi,
182 uint8_t chan_needed,
183 OCT9 identity_lv
184} with { variant "" };
185
186type record PCUIF_susp_req {
187 OCT4 tlli,
188 OCT6 ra_id,
189 uint8_t cause
190} with { variant "" };
191
192
193type union PCUIF_MsgUnion {
194 PCUIF_data data_req,
195 PCUIF_data data_cnf,
196 PCUIF_data_cnf_dt data_cnf_dt,
197 PCUIF_data data_ind,
198 PCUIF_susp_req susp_req,
199 PCUIF_rts_req rts_req,
200 PCUIF_rach_ind rach_ind,
201 PCUIF_txt_ind txt_ind,
202 PCUIF_info_ind info_ind,
203 PCUIF_act_req act_req,
204 PCUIF_time_ind time_ind,
205 PCUIF_pag_req pag_req
206} with { variant "" };
207
208type record PCUIF_Message {
209 PCUIF_MsgType msg_type,
210 uint8_t bts_nr,
211 OCT2 spare,
212 PCUIF_MsgUnion u
213} with { variant (u) "CROSSTAG(
214 data_req, msg_type = PCU_IF_MSG_DATA_REQ;
215 data_cnf, msg_type = PCU_IF_MSG_DATA_CNF;
216 data_cnf_dt, msg_type = PCU_IF_MSG_DATA_CNF_DT;
217 data_ind, msg_type = PCU_IF_MSG_DATA_IND;
218 susp_req, msg_type = PCU_IF_MSG_SUSP_REQ;
219 rts_req, msg_type = PCU_IF_MSG_RTS_REQ;
220 rach_ind, msg_type = PCU_IF_MSG_RACH_IND;
221 txt_ind, msg_type = PCU_IF_MSG_TXT_IND;
222 info_ind, msg_type = PCU_IF_MSG_INFO_IND;
223 act_req, msg_type = PCU_IF_MSG_ACT_REQ;
224 time_ind, msg_type = PCU_IF_MSG_TIME_IND;
225 pag_req, msg_type = PCU_IF_MSG_PAG_REQ)"
Harald Welte3568dc72018-03-13 17:06:51 +0100226 variant "PADDING(1696)" /* 212 * 8 */
Harald Welte883340c2018-02-28 18:59:29 +0100227};
228
229external function enc_PCUIF_Message(in PCUIF_Message pdu) return octetstring
230 with { extension "prototype(convert) encode(RAW)" };
231external function dec_PCUIF_Message(in octetstring stream) return PCUIF_Message
232 with { extension "prototype(convert) decode(RAW)" };
233
234
235template PCUIF_Message tr_PCUIF_RTS_REQ(template uint8_t bts_nr := ?,
236 template uint8_t trx_nr := ?,
237 template uint8_t ts_nr := ?,
238 template PCUIF_Sapi sapi := ?,
239 template uint32_t fn := ?,
240 template uint8_t block_nr := ?
241 ) := {
242 msg_type := PCU_IF_MSG_RTS_REQ,
243 bts_nr := bts_nr,
244 spare := ?,
245 u := {
246 rts_req := {
247 sapi := sapi,
248 spare := ?,
249 fn := fn,
250 arfcn := ?,
251 trx_nr := trx_nr,
252 ts_nr := ts_nr,
253 block_nr := block_nr
254 }
255 }
256}
257
258template (value) PCUIF_Message ts_PCUIF_TXT_IND(uint8_t bts_nr, PCUIF_TextType tt, charstring text) := {
259 msg_type := PCU_IF_MSG_TXT_IND,
260 bts_nr := bts_nr,
261 spare := '0000'O,
262 u := {
263 txt_ind := {
264 txt_type := tt,
265 text := text
266 }
267 }
268}
269
270template (value) PCUIF_Message ts_PCUIF_ACT_REQ(uint8_t bts_nr, uint8_t trx_nr, uint8_t ts_nr) := {
271 msg_type := PCU_IF_MSG_ACT_REQ,
272 bts_nr := bts_nr,
273 spare := '0000'O,
274 u := {
275 act_req := {
276 is_activate := 1,
277 trx_nr := trx_nr,
278 ts_nr := ts_nr,
279 spare := '00'O
280 }
281 }
282}
283
284template (value) PCUIF_Message ts_PCUIF_DEACT_REQ(uint8_t bts_nr, uint8_t trx_nr, uint8_t ts_nr) := {
285 msg_type := PCU_IF_MSG_ACT_REQ,
286 bts_nr := bts_nr,
287 spare := '0000'O,
288 u := {
289 act_req := {
290 is_activate := 0,
291 trx_nr := trx_nr,
292 ts_nr := ts_nr,
293 spare := '00'O
294 }
295 }
296}
297
298template PCUIF_Message tr_PCUIF_DATA_IND(template uint8_t bts_nr := ?,
299 template uint8_t trx_nr := ?,
300 template uint8_t ts_nr := ?,
301 template uint8_t block_nr := ?,
302 template PCUIF_Sapi sapi := ?,
303 template OCT162 data := ?) := {
304 msg_type := PCU_IF_MSG_DATA_IND,
305 bts_nr := bts_nr,
306 spare := ?,
307 u := {
308 data_ind := {
309 sapi := sapi,
310 len := ?,
311 data := data,
312 fn := ?,
313 arfcn := ?,
314 trx_nr := trx_nr,
315 ts_nr := ts_nr,
316 block_nr := block_nr,
317 rssi := ?,
318 ber10k := ?,
319 ta_offs_qbits := ?,
320 lqual_cb := ?
321 }
322 }
323}
324
325template (value) PCUIF_Message ts_PCUIF_DATA_REQ(uint8_t bts_nr, uint8_t trx_nr,
326 uint8_t ts_nr, uint8_t block_nr,
327 uint32_t fn, PCUIF_Sapi sapi,
328 octetstring data) := {
329 msg_type := PCU_IF_MSG_DATA_REQ,
330 bts_nr := bts_nr,
331 spare := '0000'O,
332 u := {
333 data_req := {
334 sapi := sapi,
335 len := lengthof(data),
336 data := data,
337 fn := fn,
338 arfcn := 0, /* unused in BTS */
339 trx_nr := trx_nr,
340 ts_nr := ts_nr,
341 block_nr := block_nr,
342 /* measurement parameters below unused on Tx */
343 rssi := 0,
344 ber10k := 0,
345 ta_offs_qbits := 0,
346 lqual_cb := 0
347 }
348 }
349}
350
351template PCUIF_Message tr_PCUIF_DATA_CNF(template uint8_t bts_nr := ?,
352 template uint8_t trx_nr := ?,
353 template uint8_t ts_nr := ?,
354 template PCUIF_Sapi sapi := ?,
355 template octetstring data := ?) := {
356 msg_type := PCU_IF_MSG_DATA_CNF,
357 bts_nr := bts_nr,
358 spare := ?,
359 u := {
360 data_cnf := {
361 sapi := sapi,
362 len := ?,
363 data := data,
364 fn := ?,
365 arfcn := ?,
366 trx_nr := trx_nr,
367 ts_nr := ts_nr,
368 block_nr := ?,
369 rssi := ?,
370 ber10k := ?,
371 ta_offs_qbits := ?,
372 lqual_cb := ?
373 }
374 }
375}
376
377template PCUIF_Message tr_PCUIF_RACH_IND(template uint8_t bts_nr := ?,
378 template uint16_t ra := ?,
379 template uint8_t is_11bit := ?,
380 template uint8_t burst_type := ?,
381 template uint32_t fn := ?) := {
382 msg_type := PCU_IF_MSG_RACH_IND,
383 bts_nr := bts_nr,
384 spare := ?,
385 u := {
386 rach_ind := {
387 sapi := PCU_IF_SAPI_RACH,
388 ra := ra,
389 qta := ?,
390 fn := fn,
391 arfcn := ?,
392 is_11bit := is_11bit,
393 burst_type := burst_type
394 }
395 }
396}
397
398template PCUIF_Message tr_PCUIF_PAG_REQ(template uint8_t bts_nr := ?,
399 template OCT9 id_lv := ?,
400 template uint8_t chan_needed := ?,
401 template PCUIF_Sapi sapi := ?) := {
402 msg_type := PCU_IF_MSG_PAG_REQ,
403 bts_nr := bts_nr,
404 spare := ?,
405 u := {
406 pag_req := {
407 sapi := ?,
408 chan_needed := chan_needed,
409 identity_lv := id_lv
410 }
411 }
412}
413
Harald Welted378a252018-03-13 17:02:14 +0100414template PCUIF_Message tr_PCUIF_INFO_IND(template uint8_t bts_nr := ?,
415 template PCUIF_Flags flags := ?,
416 template uint32_t version := PCU_IF_VERSION) := {
417 msg_type := PCU_IF_MSG_INFO_IND,
418 bts_nr := bts_nr,
419 spare := ?,
420 u := {
421 info_ind := {
422 version := version,
423 flags := flags,
424 trx := ?,
425 bsic := ?,
426 mcc := ?,
427 mnc :=?,
Harald Welte3568dc72018-03-13 17:06:51 +0100428 mnc_3_digits := ?,
Harald Welted378a252018-03-13 17:02:14 +0100429 lac := ?,
430 rac := ?,
431 nsei := ?,
432 nse_timer := ?,
433 cell_timer := ?,
434 cell_id := ?,
435 repeat_time := ?,
436 repeat_count := ?,
437 bvci := ?,
438 t3142 := ?,
439 t3169 := ?,
440 t3191 := ?,
441 t3193_10ms := ?,
442 t3195 := ?,
443 t3101 := ?,
444 t3103 := ?,
445 t3105 := ?,
446 cv_countdown := ?,
447 dl_tbf_ext := ?,
448 ul_tbf_ext := ?,
449 initial_cs := ?,
450 initial_mcs := ?,
451 nsvci := ?,
452 local_pprt := ?,
453 remote_port := ?,
454 remote_ip := ?
455 }
456 }
457}
458
Harald Welte883340c2018-02-28 18:59:29 +0100459
460} with { encode "RAW" variant "BYTEORDER(first)" };