blob: e4a314db0b47499356401c72a8585cb705a691d7 [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";
9const uint32_t PCU_IF_VERSION := 8;
10
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
127} with { variant "" };
128
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,
137 uint16_t lac,
138 uint16_t rac,
139
140 uint16_t nsei,
141 record length(7) of uint8_t nse_timer,
142 record length(11) of uint8_t cell_timer,
143
144 uint16_t cell_id,
145 uint16_t repeat_time,
146 uint8_t repeat_count,
147 uint16_t bvci,
148 uint8_t t3142,
149 uint8_t t3169,
150 uint8_t t3191,
151 uint8_t t3193_10ms,
152 uint8_t t3195,
153 uint8_t t3101,
154 uint8_t t3103,
155 uint8_t t3105,
156 uint8_t cv_countdown,
157 uint16_t dl_tbf_ext,
158 uint16_t ul_tbf_ext,
159 uint8_t initial_cs,
160 uint8_t initial_mcs,
161
162 record length(2) of uint16_t nsvci,
163 record length(2) of uint16_t local_pprt,
164 record length(2) of uint16_t remote_port,
165 record length(2) of uint32_t remote_ip
166} with { variant "" }
167
168type record PCUIF_act_req {
169 uint8_t is_activate,
170 uint8_t trx_nr,
171 uint8_t ts_nr,
172 OCT1 spare
173} with { variant "" };
174
175type record PCUIF_time_ind {
176 uint32_t fn
177} with { variant "" };
178
179type record PCUIF_pag_req {
180 PCUIF_Sapi sapi,
181 uint8_t chan_needed,
182 OCT9 identity_lv
183} with { variant "" };
184
185type record PCUIF_susp_req {
186 OCT4 tlli,
187 OCT6 ra_id,
188 uint8_t cause
189} with { variant "" };
190
191
192type union PCUIF_MsgUnion {
193 PCUIF_data data_req,
194 PCUIF_data data_cnf,
195 PCUIF_data_cnf_dt data_cnf_dt,
196 PCUIF_data data_ind,
197 PCUIF_susp_req susp_req,
198 PCUIF_rts_req rts_req,
199 PCUIF_rach_ind rach_ind,
200 PCUIF_txt_ind txt_ind,
201 PCUIF_info_ind info_ind,
202 PCUIF_act_req act_req,
203 PCUIF_time_ind time_ind,
204 PCUIF_pag_req pag_req
205} with { variant "" };
206
207type record PCUIF_Message {
208 PCUIF_MsgType msg_type,
209 uint8_t bts_nr,
210 OCT2 spare,
211 PCUIF_MsgUnion u
212} with { variant (u) "CROSSTAG(
213 data_req, msg_type = PCU_IF_MSG_DATA_REQ;
214 data_cnf, msg_type = PCU_IF_MSG_DATA_CNF;
215 data_cnf_dt, msg_type = PCU_IF_MSG_DATA_CNF_DT;
216 data_ind, msg_type = PCU_IF_MSG_DATA_IND;
217 susp_req, msg_type = PCU_IF_MSG_SUSP_REQ;
218 rts_req, msg_type = PCU_IF_MSG_RTS_REQ;
219 rach_ind, msg_type = PCU_IF_MSG_RACH_IND;
220 txt_ind, msg_type = PCU_IF_MSG_TXT_IND;
221 info_ind, msg_type = PCU_IF_MSG_INFO_IND;
222 act_req, msg_type = PCU_IF_MSG_ACT_REQ;
223 time_ind, msg_type = PCU_IF_MSG_TIME_IND;
224 pag_req, msg_type = PCU_IF_MSG_PAG_REQ)"
225 variant "PADDING(1688)"
226};
227
228external function enc_PCUIF_Message(in PCUIF_Message pdu) return octetstring
229 with { extension "prototype(convert) encode(RAW)" };
230external function dec_PCUIF_Message(in octetstring stream) return PCUIF_Message
231 with { extension "prototype(convert) decode(RAW)" };
232
233
234template PCUIF_Message tr_PCUIF_RTS_REQ(template uint8_t bts_nr := ?,
235 template uint8_t trx_nr := ?,
236 template uint8_t ts_nr := ?,
237 template PCUIF_Sapi sapi := ?,
238 template uint32_t fn := ?,
239 template uint8_t block_nr := ?
240 ) := {
241 msg_type := PCU_IF_MSG_RTS_REQ,
242 bts_nr := bts_nr,
243 spare := ?,
244 u := {
245 rts_req := {
246 sapi := sapi,
247 spare := ?,
248 fn := fn,
249 arfcn := ?,
250 trx_nr := trx_nr,
251 ts_nr := ts_nr,
252 block_nr := block_nr
253 }
254 }
255}
256
257template (value) PCUIF_Message ts_PCUIF_TXT_IND(uint8_t bts_nr, PCUIF_TextType tt, charstring text) := {
258 msg_type := PCU_IF_MSG_TXT_IND,
259 bts_nr := bts_nr,
260 spare := '0000'O,
261 u := {
262 txt_ind := {
263 txt_type := tt,
264 text := text
265 }
266 }
267}
268
269template (value) PCUIF_Message ts_PCUIF_ACT_REQ(uint8_t bts_nr, uint8_t trx_nr, uint8_t ts_nr) := {
270 msg_type := PCU_IF_MSG_ACT_REQ,
271 bts_nr := bts_nr,
272 spare := '0000'O,
273 u := {
274 act_req := {
275 is_activate := 1,
276 trx_nr := trx_nr,
277 ts_nr := ts_nr,
278 spare := '00'O
279 }
280 }
281}
282
283template (value) PCUIF_Message ts_PCUIF_DEACT_REQ(uint8_t bts_nr, uint8_t trx_nr, uint8_t ts_nr) := {
284 msg_type := PCU_IF_MSG_ACT_REQ,
285 bts_nr := bts_nr,
286 spare := '0000'O,
287 u := {
288 act_req := {
289 is_activate := 0,
290 trx_nr := trx_nr,
291 ts_nr := ts_nr,
292 spare := '00'O
293 }
294 }
295}
296
297template PCUIF_Message tr_PCUIF_DATA_IND(template uint8_t bts_nr := ?,
298 template uint8_t trx_nr := ?,
299 template uint8_t ts_nr := ?,
300 template uint8_t block_nr := ?,
301 template PCUIF_Sapi sapi := ?,
302 template OCT162 data := ?) := {
303 msg_type := PCU_IF_MSG_DATA_IND,
304 bts_nr := bts_nr,
305 spare := ?,
306 u := {
307 data_ind := {
308 sapi := sapi,
309 len := ?,
310 data := data,
311 fn := ?,
312 arfcn := ?,
313 trx_nr := trx_nr,
314 ts_nr := ts_nr,
315 block_nr := block_nr,
316 rssi := ?,
317 ber10k := ?,
318 ta_offs_qbits := ?,
319 lqual_cb := ?
320 }
321 }
322}
323
324template (value) PCUIF_Message ts_PCUIF_DATA_REQ(uint8_t bts_nr, uint8_t trx_nr,
325 uint8_t ts_nr, uint8_t block_nr,
326 uint32_t fn, PCUIF_Sapi sapi,
327 octetstring data) := {
328 msg_type := PCU_IF_MSG_DATA_REQ,
329 bts_nr := bts_nr,
330 spare := '0000'O,
331 u := {
332 data_req := {
333 sapi := sapi,
334 len := lengthof(data),
335 data := data,
336 fn := fn,
337 arfcn := 0, /* unused in BTS */
338 trx_nr := trx_nr,
339 ts_nr := ts_nr,
340 block_nr := block_nr,
341 /* measurement parameters below unused on Tx */
342 rssi := 0,
343 ber10k := 0,
344 ta_offs_qbits := 0,
345 lqual_cb := 0
346 }
347 }
348}
349
350template PCUIF_Message tr_PCUIF_DATA_CNF(template uint8_t bts_nr := ?,
351 template uint8_t trx_nr := ?,
352 template uint8_t ts_nr := ?,
353 template PCUIF_Sapi sapi := ?,
354 template octetstring data := ?) := {
355 msg_type := PCU_IF_MSG_DATA_CNF,
356 bts_nr := bts_nr,
357 spare := ?,
358 u := {
359 data_cnf := {
360 sapi := sapi,
361 len := ?,
362 data := data,
363 fn := ?,
364 arfcn := ?,
365 trx_nr := trx_nr,
366 ts_nr := ts_nr,
367 block_nr := ?,
368 rssi := ?,
369 ber10k := ?,
370 ta_offs_qbits := ?,
371 lqual_cb := ?
372 }
373 }
374}
375
376template PCUIF_Message tr_PCUIF_RACH_IND(template uint8_t bts_nr := ?,
377 template uint16_t ra := ?,
378 template uint8_t is_11bit := ?,
379 template uint8_t burst_type := ?,
380 template uint32_t fn := ?) := {
381 msg_type := PCU_IF_MSG_RACH_IND,
382 bts_nr := bts_nr,
383 spare := ?,
384 u := {
385 rach_ind := {
386 sapi := PCU_IF_SAPI_RACH,
387 ra := ra,
388 qta := ?,
389 fn := fn,
390 arfcn := ?,
391 is_11bit := is_11bit,
392 burst_type := burst_type
393 }
394 }
395}
396
397template PCUIF_Message tr_PCUIF_PAG_REQ(template uint8_t bts_nr := ?,
398 template OCT9 id_lv := ?,
399 template uint8_t chan_needed := ?,
400 template PCUIF_Sapi sapi := ?) := {
401 msg_type := PCU_IF_MSG_PAG_REQ,
402 bts_nr := bts_nr,
403 spare := ?,
404 u := {
405 pag_req := {
406 sapi := ?,
407 chan_needed := chan_needed,
408 identity_lv := id_lv
409 }
410 }
411}
412
413
414} with { encode "RAW" variant "BYTEORDER(first)" };