blob: 9a7c867737378c0431eb771c68257c6a1d43840a [file] [log] [blame]
Harald Welte484160b2017-07-28 13:30:24 +02001/* GPRS RLC/MAC Control Messages as per 3GPP TS 44.060 manually transcribed from the CSN.1 syntax, as no CSN.1
2 * tool for Eclipse TITAN could be found. Implements only the minimum necessary messages for Osmocom teseting
3 * purposes.
4 * (C) 2017 by Harald Welte <laforge@gnumonks.org> */
5module RLCMAC_CSN1_Types {
6 import from General_Types all;
7 import from Osmocom_Types all;
8 import from GSM_Types all;
9
10 /* TS 44.060 11.2.0.1 */
11 type enumerated RlcmacDlCtrlMsgType {
12 PACKET_ACCESS_REJECT ('100001'B),
13 PACKET_CELL_CHANGE_ORDER ('000001'B),
14 PACKET_DL_ASSIGNMENT ('000010'B),
15 PACKET_MEASUREMENT_ORDER ('000011'B),
16 PACKET_PAGING_REQUEST ('100010'B),
17 PACKET_PDCH_RELEASE ('100011'B),
18 PACKET_POLLING_REQUEST ('000100'B),
19 /* TODO */
20 PACKET_TBF_RELEASE ('001000'B),
21 PACKET_UL_ACK_NACK ('001001'B),
22 PACKET_UL_ASSIGNMENT ('001010'B),
23 PACKET_DL_DUMMY_CTRL ('100101'B)
24 } with { variant "FIELDLENGTH(6)" };
25
26 /* TS 44.060 11.2.0.2 */
27 type enumerated RlcmacUlCtrlMsgType {
28 PACKET_CELL_CHANGE_FEATURE ('000000'B),
29 PACKET_CONTROL_ACK ('000001'B),
30 PACKET_DL_ACK_NACK ('000010'B),
31 PACKET_UL_DUMMY_CTRL ('000011'B),
32 PACKET_MEASUREMENT_REPORT ('000100'B),
33 PACKET_ENH_MEASUREMENT_REPORT ('001010'B),
34 PACKET_RESOURCE_REQUEST ('000101'B),
35 PACKET_MOBILE_TBF_STATUS ('000110'B),
36 PACKET_PSI_STATUS ('000111'B),
37 PACKET_EGPRS_DL_ACK_NACK ('001000'B),
38 PACKET_PAUSE ('001001'B),
39 ADDITIONAL_MS_RA_CAPABILITIES ('001011'B),
40 PACKET_CELL_CANGE_NOTIFICATION ('001100'B),
41 PACKET_SI_STATUS ('001101'B),
42 PACKET_CS_REQUEST ('001110'B),
43 MBMS_SERVICE_REQUEST ('001111'B),
44 MBMS_DL_ACK_NACK ('010000'B)
45 } with { variant "FIELDLENGTH(6)" };
46
47 type record NullGlobalTfi {
48 BIT1 presence ('0'B),
49 GlobalTfi global_tfi
50 } with { variant "" };
51
52 type record TenTlli {
53 BIT2 presence ('10'B),
54 GprsTlli tlli
Harald Welteacc93ab2018-03-02 21:39:09 +010055 } with { variant ""
56 variant (tlli) "BYTEORDER(first)"
57 };
Harald Welte484160b2017-07-28 13:30:24 +020058
59 type union GlobalTfiOrTlli {
60 NullGlobalTfi global_tfi,
61 TenTlli tlli
62 };
63
64 /* 11.2.7 Packet Downlink Assignment */
65 type record PacketDlAssignment {
66 PageMode page_mode,
67 BIT1 pres1,
68 PersistenceLevels persistence_levels optional,
69 GlobalTfiOrTlli tfi_or_tlli
70 /* TODO */
71 } with {
72 variant (persistence_levels) "PRESENCE(pres1 = '1'B)"
73 };
74
75 /* 11.2.29 Packet Uplink Assignment */
76 type record O_Gtfi {
77 BIT1 presence ('0'B),
78 GlobalTfi global_tfi
79 } with { variant "" };
80 type record IO_Tlli {
81 BIT2 presence ('10'B),
82 GprsTlli tlli
Harald Welteacc93ab2018-03-02 21:39:09 +010083 } with { variant ""
84 variant (tlli) "BYTEORDER(first)"
85 };
Harald Welte484160b2017-07-28 13:30:24 +020086 type record IIO_Tqi {
87 BIT3 presence ('110'B),
88 PacketRequestReference pkt_req_ref
89 } with { variant "" };
90 type union PktUlAssUnion {
91 O_Gtfi global_tfi,
92 IO_Tlli tlli,
93 IIO_Tqi tqi
94 } with {
95 variant "TAG(global_tfi, presence = '0'B;
96 tlli, presence = '10'B;
97 tqi, presence = '110'B)"
98 };
99 type record DynamicAllocation {
100 BIT1 extd_dyn_alloc,
101 BIT1 p0_present,
102 uint4_t p0 optional,
103 BIT1 pr_mode optional,
104 BIT1 usf_granularity,
105 BIT1 ul_tfi_ass_present,
106 uint5_t ul_tfi_assignment optional,
107 BIT1 reserved ('0'B),
108 BIT1 tbf_starting_time_present,
109 StartingFnDesc tbf_starting_time optional,
110 TsAllocationUnion ts_allocation
111 } with {
112 variant (p0) "PRESENCE(p0_present = '1'B)"
113 variant (pr_mode) "PRESENCE(p0_present = '1'B)"
114 variant (ul_tfi_assignment) "PRESENCE(ul_tfi_ass_present = '1'B)"
115 variant (tbf_starting_time) "PRESENCE(tbf_starting_time_present = '1'B)"
116 };
117 type record TsAllocationTs {
118 BIT1 presence,
119 uint3_t usf_tn optional
120 } with {
121 variant (usf_tn) "PRESENCE(presence = '1'B)"
122 };
123 type record length(8) of TsAllocationTs TsAllocationTsArr;
124 type record TnGamma {
125 BIT1 presence,
126 uint3_t usf_tn optional,
127 uint5_t gamma_tn optional
128 } with {
129 variant (usf_tn) "PRESENCE(presence = '1'B)"
130 variant (gamma_tn) "PRESENCE(presence = '1'B)"
131 };
132 type record length(8) of TnGamma TnGamma8;
133 type record TsAllocationPwr {
134 uint4_t alpha,
135 TnGamma tn_gamma
136 } with { variant "" };
137 type record TsAllocationUnion {
138 BIT1 presence,
139 TsAllocationTsArr ts optional,
140 TsAllocationPwr ts_with_pwr optional
141 } with {
142 variant (ts) "PRESENCE(presence = '0'B)"
143 variant (ts_with_pwr) "PRESENCE(presence = '1'B)"
144 };
145 type record SingleBlockAllocation {
146 uint3_t timeslot_nr,
147 BIT1 alpha_present,
148 uint4_t alpha optional,
149 uint5_t gamma_tn,
150 BIT1 p0_present,
151 uint4_t p0 optional,
152 BIT1 reserved ('0'B) optional,
153 BIT1 pr_mode optional,
154 StartingFnDesc tbf_starting_time
155 } with {
156 variant (alpha) "PRESENCE(alpha_present = '1'B)"
157 variant (p0) "PRESENCE(p0_present = '1'B)"
158 variant (reserved) "PRESENCE(p0_present = '1'B)"
159 variant (pr_mode) "PRESENCE(p0_present = '1'B)"
160 };
161 type record PktUlAssGprs {
162 ChCodingCommand ch_coding_cmd,
163 BIT1 tlli_block_chan_coding,
164 PacketTimingAdvance pkt_ta,
165 BIT1 freq_par_present,
166 FrequencyParameters freq_par optional,
167 BIT2 alloc_present,
168 DynamicAllocation dyn_block_alloc optional,
169 SingleBlockAllocation sgl_block_alloc optional
170 } with {
171 variant (freq_par) "PRESENCE(freq_par_present = '1'B)"
172 variant (dyn_block_alloc) "PRESENCE(alloc_present = '01'B)"
173 variant (sgl_block_alloc) "PRESENCE(alloc_present = '10'B)"
174 };
175 type record PacketUlAssignment {
176 PageMode page_mode,
177 BIT1 persistence_levels_present,
178 PersistenceLevels persistence_levels optional,
179 PktUlAssUnion identity,
180 BIT1 is_egprs, /* msg escape */
181 PktUlAssGprs gprs optional
182 } with {
183 variant (persistence_levels) "PRESENCE(persistence_levels_present = '1'B)"
184 variant (gprs) "PRESENCE(is_egprs = '0'B)"
185 };
186
187 /* 11.2.10 Packet Paging Request */
Stefan Sperling59c15d62018-10-10 11:09:25 +0200188 type record MobileIdentityLV_Paging {
189 /* Note that the size of 'len' differs from that of the Mobile Identify IE
190 * as defined in 3GPP TS 24.008 10.5.1.4 "Mobile Identity"; Paging Requests
191 * use only 4 bit to encode the length of a mobile identity, whereas the IE
192 * uses a byte. */
Harald Welte484160b2017-07-28 13:30:24 +0200193 uint4_t len,
194 octetstring mobile_id
195 } with { variant (len) "LENGTHTO(mobile_id)" };
196 type record PageInfoPs {
197 BIT1 presence ('0'B),
198 BIT1 ptmsi_or_mobile_id,
199 GsmTmsi ptmsi optional,
Stefan Sperling59c15d62018-10-10 11:09:25 +0200200 MobileIdentityLV_Paging mobile_identity optional
Harald Welte484160b2017-07-28 13:30:24 +0200201 } with {
202 variant (ptmsi) "PRESENCE(ptmsi_or_mobile_id = '0'B)"
203 variant (mobile_identity) "PRESENCE(ptmsi_or_mobile_id = '1'B)"
204 };
205 type record PageInfoCs {
206 BIT1 presence ('1'B),
207 BIT1 tmsi_or_mobile_id,
208 GsmTmsi tmsi optional,
Stefan Sperling59c15d62018-10-10 11:09:25 +0200209 MobileIdentityLV_Paging mobile_identity optional,
Harald Welte484160b2017-07-28 13:30:24 +0200210 ChannelNeeded chan_needed,
211 BIT1 emlpp_prio_present,
212 uint3_t emlpp_prio optional
213 } with {
214 variant (tmsi) "PRESENCE(tmsi_or_mobile_id = '0'B)"
215 variant (mobile_identity) "PRESENCE(tmsi_or_mobile_id = '1'B)"
216 variant (emlpp_prio) "PRESENCE(emlpp_prio_present = '1'B)"
217 };
218 type union PageInfo {
219 PageInfoPs ps,
220 PageInfoCs cs
221 };
222 type record PacketPagingReq {
223 PageMode page_mode,
224 BIT1 persistence_levels_present,
225 PersistenceLevels persistence_levels optional,
226 BIT1 nln_present,
227 uint2_t nln optional
228 /* TODO: Repeated PageInfo */
229 } with {
230 variant (persistence_levels) "PRESENCE(persistence_levels_present = '1'B)"
231 variant (nln) "PRESENCE(nln_present = '1'B)"
232 };
233
234 /* 11.2.28 Uplink Ack/Nack */
235 type enumerated ChCodingCommand {
236 CH_CODING_CS1 ('00'B),
237 CH_CODING_CS2 ('01'B),
238 CH_CODING_CS3 ('10'B),
239 CH_CODING_CS4 ('11'B)
240 } with { variant "FIELDLENGTH(2)" };
241 type record UlAckNackGprs {
242 ChCodingCommand ch_coding_cmd,
243 AckNackDescription ack_nack_desc,
244 BIT1 cont_res_tlli_present,
245 GprsTlli cont_res_tlli optional,
246 BIT1 pkt_ta_present,
247 PacketTimingAdvance pkt_ta optional,
248 BIT1 pwr_ctrl_present,
249 PowerControlParameters pwr_ctrl optional
250 /* TODO: Extension Bits, Rel5 ,... */
251 } with {
252 variant (cont_res_tlli) "PRESENCE(cont_res_tlli_present = '1'B)"
253 variant (pkt_ta) "PRESENCE(pkt_ta_present = '1'B)"
254 variant (pwr_ctrl) "PRESENCE(pwr_ctrl_present = '1'B)"
Harald Welteacc93ab2018-03-02 21:39:09 +0100255 variant (cont_res_tlli) "BYTEORDER(first)"
Harald Welte484160b2017-07-28 13:30:24 +0200256 };
257 type record PacketUlAckNack {
258 PageMode page_mode,
259 BIT2 msg_excape ('00'B),
260 uint5_t uplink_tfi,
261 BIT1 is_egprs ('0'B), /* msg escape */
262 UlAckNackGprs gprs optional
263 /* TODO: EGPRS */
264 } with { variant (gprs) "PRESENCE(is_egprs = '0'B)" };
265
266 /* 11.2.8 Packet Downlink Dummy Control Block */
267 type record PacketDlDummy {
268 PageMode page_mode,
269 BIT1 persistence_levels_present,
270 PersistenceLevels persistence_levels optional
271 } with {
272 variant (persistence_levels) "PRESENCE(persistence_levels_present = '1'B)"
273 };
274
275 /* 11.2.0.1 */
276 type union RlcmacDlCtrlUnion {
277 PacketDlAssignment dl_assignment,
278 PacketUlAssignment ul_assignment,
279 PacketPagingReq paging,
280 PacketUlAckNack ul_ack_nack,
Harald Welte422f0722017-08-01 00:27:06 +0200281 PacketDlDummy dl_dummy,
282 octetstring other
Harald Welte484160b2017-07-28 13:30:24 +0200283 } with { variant "" };
284
285 type record RlcmacDlCtrlMsg {
286 RlcmacDlCtrlMsgType msg_type,
287 RlcmacDlCtrlUnion u
288 } with {
289 variant (u) "CROSSTAG(dl_assignment, msg_type = PACKET_DL_ASSIGNMENT;
290 ul_assignment, msg_type = PACKET_UL_ASSIGNMENT;
291 paging, msg_type = PACKET_PAGING_REQUEST;
292 ul_ack_nack, msg_type = PACKET_UL_ACK_NACK;
Harald Welte422f0722017-08-01 00:27:06 +0200293 dl_dummy, msg_type = PACKET_DL_DUMMY_CTRL;
294 other, OTHERWISE
Harald Welte484160b2017-07-28 13:30:24 +0200295 )"
296 };
297
298 external function enc_RlcmacDlCtrlMsg(in RlcmacDlCtrlMsg si) return octetstring
299 with { extension "prototype(convert) encode(RAW)" };
300 external function dec_RlcmacDlCtrlMsg(in octetstring stream) return RlcmacDlCtrlMsg
301 with { extension "prototype(convert) decode(RAW)" };
302
303
304 /* 11.2.6 Packet Downlikn Ack/Nack */
305 type record ILevel {
306 BIT1 presence,
307 uint4_t i_level optional
308 } with { variant (i_level) "PRESENCE(presence = '1'B)" };
309 type record length(8) of ILevel ILevels;
310 type record ChannelQualityReport {
311 uint6_t c_value,
312 uint3_t rxqual,
313 uint6_t sign_var,
314 ILevels i_levels
315 } with { variant "" };
316 type record PacketDlAckNack {
317 uint5_t dl_tfi,
318 AckNackDescription ack_nack_desc,
319 BIT1 chreq_desc_presence,
320 ChannelReqDescription chreq_desc optional,
321 ChannelQualityReport ch_qual_rep
322 } with { variant "" };
323
324 /* 11.2.2 Packet Control Acknowledgement */
325 type enumerated CtrlAck {
326 MS_RCVD_TWO_RLC_SAME_RTI_DIFF_RBSN_NEW_TFI ('00'B),
327 MS_RCVD_RBSN1_NO_RBSN0 ('01'B),
328 MS_RCVD_RBSN0_NO_RBSN1 ('10'B),
329 MS_RCVD_TWO_RLC_SAME_RTI_DIFF_RBSN ('11'B)
330 } with { variant "FIELDLENGTH(2)" };
331 type record PacketCtrlAck {
332 GprsTlli tlli,
333 CtrlAck ctrl_ack
334 /* TODO: Rel5 additions */
Harald Welteacc93ab2018-03-02 21:39:09 +0100335 } with { variant ""
336 variant (tlli) "BYTEORDER(first)"
337 };
Harald Welte484160b2017-07-28 13:30:24 +0200338
339 /* 1.2.8b Packet Uplink Dummy Control Block */
340 type record PacketUlDummy {
341 GprsTlli tlli
Harald Welteacc93ab2018-03-02 21:39:09 +0100342 } with { variant ""
343 variant (tlli) "BYTEORDER(first)"
344 };
Harald Welte484160b2017-07-28 13:30:24 +0200345
346 /* 11.2.0.2 */
347 type union RlcmacUlCtrlUnion {
348 PacketCtrlAck ctrl_ack,
349 PacketDlAckNack dl_ack_nack,
Harald Welte422f0722017-08-01 00:27:06 +0200350 PacketUlDummy ul_dummy,
351 octetstring other
Harald Welte484160b2017-07-28 13:30:24 +0200352 } with { variant "" };
353
354 type record RlcmacUlCtrlMsg {
355 RlcmacUlCtrlMsgType msg_type,
356 RlcmacUlCtrlUnion u
357 } with {
358 variant (u) "CROSSTAG(ctrl_ack, msg_type = PACKET_CONTROL_ACK;
359 dl_ack_nack, msg_type = PACKET_DL_ACK_NACK;
Harald Welte422f0722017-08-01 00:27:06 +0200360 ul_dummy, msg_type = PACKET_UL_DUMMY_CTRL;
361 other, OTHERWISE
Harald Welte484160b2017-07-28 13:30:24 +0200362 )"
363 };
364
365 external function enc_RlcmacUlCtrlMsg(in RlcmacUlCtrlMsg si) return octetstring
366 with { extension "prototype(convert) encode(RAW)" };
367 external function dec_RlcmacUlCtrlMsg(in octetstring stream) return RlcmacUlCtrlMsg
368 with { extension "prototype(convert) decode(RAW)" };
369
370 type bitstring ReceivedBlockBitmap length(64) with { variant "BYTEORDER(last)" };
371
372 /* 12.3 Ack/Nack Description */
373 type record AckNackDescription {
374 BIT1 final_ack,
375 uint7_t starting_seq_nr,
376 ReceivedBlockBitmap receive_block_bitmap
377 } with { variant "" };
378
379 /* 12.7 Channel Request Description */
380 type enumerated RlcMode {
381 RLC_MODE_ACKNOWLEDGED (0),
382 RLC_MODE_UNACKNOWLEDGED (1)
383 } with { variant "FIELDLENGTH(1)" };
384 type enumerated LlcPduType {
385 LLC_PDU_IS_SACK_OR_ACK (0),
386 LLC_PDU_IS_NOT_SACK_OR_ACK (1)
387 } with { variant "FIELDLENGTH(1)" };
388 type record ChannelReqDescription {
389 uint4_t peak_tput_class,
390 uint2_t priority,
391 RlcMode rlc_mode,
392 LlcPduType llc_pdu_type,
393 uint16_t RlcOctetCount
394 } with { variant "" };
395
396 /* 12.8 Frequency Parameters */
397 type record FreqIndirect {
398 uint6_t maio,
399 uint4_t ma_number,
400 BIT1 change_mark1_present,
401 uint2_t change_mark1 optional,
402 BIT1 change_mark2_present,
403 uint2_t change_mark2 optional
404 } with {
405 variant (change_mark1) "PRESENCE(change_mark1_present = '1'B)"
406 variant (change_mark2) "PRESENCE(change_mark2_present = '1'B)"
407 };
408 type record FreqDirect1 {
409 uint6_t maio,
410 GprsMobileAllication mobile_allocation
411 }
412 type record FreqDirect2 {
413 uint6_t maio,
414 uint6_t hsn,
415 uint4_t ma_freq_len,
416 octetstring m1_freq_list
417 } with {
418 /* FIXME: this can not be expressed in TTCN-3 ?!? */
419 //variant (ma_freq_len) "LENGTHTO(m1_freq_list)+3"
420 variant (ma_freq_len) "LENGTHTO(m1_freq_list)"
421 };
422 type record FrequencyParameters {
423 uint3_t tsc,
424 BIT2 presence,
425 uint10_t arfcn optional,
426 FreqIndirect indirect optional,
427 FreqDirect1 direct1 optional,
428 FreqDirect2 direct2 optional
429 } with {
430 variant (arfcn) "PRESENCE(presence = '00'B)"
431 variant (indirect) "PRESENCE(presence = '01'B)"
432 variant (direct1) "PRESENCE(presence = '10'B)"
433 variant (direct2) "PRESENCE(presence = '11'B)"
434 };
435
436 /* 12.10 Global TFI */
437 type record GlobalTfi {
438 boolean is_dl_tfi,
439 uint5_t tfi
440 } with { variant (is_dl_tfi) "FIELDLENGTH(1)" };
441
442 /* 12.10a GPRS Mobile Allocation */
443 type record RflNumberList {
444 uint4_t rfl_number,
445 BIT1 presence,
446 RflNumberList rfl_number_list optional
447 } with {
448 variant (rfl_number_list) "PRESENCE(presence = '1'B)"
449 };
450 type record GprsMobileAllication {
451 uint6_t hsn,
452 BIT1 rfl_number_list_present,
453 RflNumberList rfl_number_list optional,
454 BIT1 ma_present,
455 uint6_t ma_length optional,
456 bitstring ma_bitmap optional
457 /* TODO: ARFCN index list */
458 } with {
459 variant (rfl_number_list) "PRESENCE(rfl_number_list_present = '1'B)"
460 variant (ma_length) "PRESENCE(ma_present = '0'B)"
461 variant (ma_bitmap) "PRESENCE(ma_present = '0'B)"
462 /* FIXME: this can not be expressed in TTCN-3 ?!? */
463 //variant (ma_length) "LENGTHTO(ma_bitmap)+1"
464 variant (ma_length) "LENGTHTO(ma_bitmap)"
465 }
466
467 /* 12.11 Packet Request Reference */
468 type record PacketRequestReference {
469 uint11_t ra_info,
470 uint16_t frame_nr
471 } with { variant "" };
472
473 /* 12.12 Packet Timing Advance */
474 type record PacketTimingAdvance {
475 BIT1 val_present,
476 uint6_t val optional,
477 BIT1 idx_present,
478 uint4_t idx optional,
479 uint3_t timeslot_nr optional
480 } with {
481 variant (val) "PRESENCE(val_present = '1'B)"
482 variant (idx) "PRESENCE(idx_present = '1'B)"
483 variant (timeslot_nr) "PRESENCE(idx_present = '1'B)"
484 };
485
486 /* 12.13 Power Control Parameters */
487 type record ZeroOneGamma {
488 BIT1 gamma_present,
489 uint5_t gamma
490 } with {
491 variant (gamma) "PRESENCE (gamma_present = '1'B)"
492 };
493 type record length(8) of ZeroOneGamma ZeroOneGammas;
494 type record PowerControlParameters {
495 uint4_t alpha,
496 ZeroOneGammas gamma
497 } with { variant "" };
498
499 /* 12.14 Persistence Level */
500 type record length(4) of uint4_t PersistenceLevels;
501
502 /* 12.20 Page Mode */
503 type enumerated PageMode {
504 PAGE_MODE_NORMAL ('00'B),
505 PAGE_MODE_EXTENDED ('01'B),
506 PAGE_MODE_REORG ('10'B),
507 PAGE_MODE_SAME ('11'B)
508 } with { variant "FIELDLENGTH(2)" };
509
510 /* 12.21 Starting Frame Number */
511 type record StartingFnDesc {
512 BIT1 presence,
513 uint16_t absolute_starting_time optional,
514 uint13_t relative_k optional
515 } with {
516 variant (absolute_starting_time) "PRESENCE(presence = '0'B)"
517 variant (relative_k) "PRESENCE(presence = '1'B)"
518 };
519
Harald Welte7024baa2018-03-02 23:37:51 +0100520 template (value) RlcmacUlCtrlMsg ts_RlcMacUlCtrl_PKT_CTRL_ACK(GprsTlli tlli,
521 CtrlAck ack := MS_RCVD_TWO_RLC_SAME_RTI_DIFF_RBSN) := {
522 msg_type := PACKET_CONTROL_ACK,
523 u := {
524 ctrl_ack := {
525 tlli := tlli,
526 ctrl_ack := ack
527 }
528 }
529 }
530
Harald Welteb669ee02018-03-09 12:50:02 +0100531 private const ILevel iNone := {
532 presence := '0'B,
533 i_level := omit
534 }
535 private const ChannelQualityReport c_ChQualRep_default := {
536 c_value := 0,
537 rxqual := 0,
538 sign_var := 0,
539 i_levels := { iNone, iNone, iNone, iNone, iNone, iNone, iNone, iNone }
540 }
541 template (value) RlcmacUlCtrlMsg ts_RlcMacUlCtrl_PKT_DL_ACK(uint5_t dl_tfi,
542 AckNackDescription andesc,
543 ChannelQualityReport qual_rep := c_ChQualRep_default) := {
544 msg_type := PACKET_DL_ACK_NACK,
545 u := {
546 dl_ack_nack := {
547 dl_tfi := dl_tfi,
548 ack_nack_desc := andesc,
549 chreq_desc_presence := '0'B,
550 chreq_desc := omit,
551 ch_qual_rep := qual_rep
552 }
553 }
554 }
555
556
Harald Welte7024baa2018-03-02 23:37:51 +0100557
Harald Welte484160b2017-07-28 13:30:24 +0200558} with { encode "RAW"; variant "FIELDORDER(msb)" variant "BYTEORDER(last)" };