blob: db0e54a008072dba9cb06f60e5619ebc55b8d6d9 [file] [log] [blame]
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001/* gsm_rlcmac.c
2 * Routines for GSM RLC MAC control plane message dissection in wireshark.
3 * TS 44.060 and 24.008
4 *
5 * Copyright (C) 2011 Ivan Klyuchnikov
6 *
7 * By Vincent Helfre, based on original code by Jari Sassi
8 * with the gracious authorization of STE
9 * Copyright (c) 2011 ST-Ericsson
10 *
11 * $Id: packet-gsm_rlcmac.c 39164 2011-09-27 12:05:32Z etxrab $
12 *
13 * Wireshark - Network traffic analyzer
14 * By Gerald Combs <gerald@wireshark.org>
15 * Copyright 1998 Gerald Combs
16 *
17 * This program is free software; you can redistribute it and/or
18 * modify it under the terms of the GNU General Public License
19 * as published by the Free Software Foundation; either version 2
20 * of the License, or (at your option) any later version.
21 *
22 * This program is distributed in the hope that it will be useful,
23 * but WITHOUT ANY WARRANTY; without even the implied warranty of
24 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
25 * GNU General Public License for more details.
26 *
27 * You should have received a copy of the GNU General Public License
28 * along with this program; if not, write to the Free Software
29 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
30 */
31
32#include "gsm_rlcmac.h"
33/* Initialize the protocol and registered fields
34*/
35#include <iostream>
36#include <cstdlib>
Ivan Kluchnikov1b517342013-12-30 14:26:06 +040037#include <assert.h>
Ivan Kluchnikova9f1ff22012-05-24 22:25:06 +040038#include <gprs_debug.h>
Ivan Kluchnikov487a1412011-12-21 13:17:53 +030039using namespace std;
40
41/* Payload type as defined in TS 44.060 / 10.4.7 */
42#define PAYLOAD_TYPE_DATA 0
43#define PAYLOAD_TYPE_CTRL_NO_OPT_OCTET 1
44#define PAYLOAD_TYPE_CTRL_OPT_OCTET 2
45#define PAYLOAD_TYPE_RESERVED 3
46
47/* CSN1 structures */
48/*(not all parts of CSN_DESCR structure are always initialized.)*/
49static const
50CSN_DESCR_BEGIN(PLMN_t)
51 M_UINT (PLMN_t, MCC2, 4),
52 M_UINT (PLMN_t, MCC1, 4),
53 M_UINT (PLMN_t, MNC3, 4),
54 M_UINT (PLMN_t, MCC3, 4),
55 M_UINT (PLMN_t, MNC2, 4),
56 M_UINT (PLMN_t, MNC1, 4),
57CSN_DESCR_END (PLMN_t)
58
59static const
60CSN_DESCR_BEGIN(StartingTime_t)
61 M_UINT (StartingTime_t, N32, 5),
62 M_UINT (StartingTime_t, N51, 6),
63 M_UINT (StartingTime_t, N26, 5),
64CSN_DESCR_END (StartingTime_t)
65
66/*< Global TFI IE >*/
67static const
68CSN_DESCR_BEGIN(Global_TFI_t)
69 M_UNION (Global_TFI_t, 2),
70 M_UINT (Global_TFI_t, u.UPLINK_TFI, 5),
71 M_UINT (Global_TFI_t, u.DOWNLINK_TFI, 5),
72CSN_DESCR_END (Global_TFI_t)
73
74/*< Starting Frame Number Description IE >*/
75static const
76CSN_DESCR_BEGIN(Starting_Frame_Number_t)
77 M_UNION (Starting_Frame_Number_t, 2),
78 M_TYPE (Starting_Frame_Number_t, u.StartingTime, StartingTime_t),
79 M_UINT (Starting_Frame_Number_t, u.k, 13),
80CSN_DESCR_END(Starting_Frame_Number_t)
81
82/*< Ack/Nack Description IE >*/
83static const
84CSN_DESCR_BEGIN(Ack_Nack_Description_t)
85 M_UINT (Ack_Nack_Description_t, FINAL_ACK_INDICATION, 1),
86 M_UINT (Ack_Nack_Description_t, STARTING_SEQUENCE_NUMBER, 7),
87 M_BITMAP (Ack_Nack_Description_t, RECEIVED_BLOCK_BITMAP, 64),
88CSN_DESCR_END (Ack_Nack_Description_t)
89
90/*< Packet Timing Advance IE >*/
91static const
92CSN_DESCR_BEGIN(Packet_Timing_Advance_t)
93 M_NEXT_EXIST (Packet_Timing_Advance_t, Exist_TIMING_ADVANCE_VALUE, 1),
94 M_UINT (Packet_Timing_Advance_t, TIMING_ADVANCE_VALUE, 6),
95
96 M_NEXT_EXIST (Packet_Timing_Advance_t, Exist_IndexAndtimeSlot, 2),
97 M_UINT (Packet_Timing_Advance_t, TIMING_ADVANCE_INDEX, 4),
98 M_UINT (Packet_Timing_Advance_t, TIMING_ADVANCE_TIMESLOT_NUMBER, 3),
99CSN_DESCR_END (Packet_Timing_Advance_t)
100
101/*< Power Control Parameters IE >*/
102static const
103CSN_DESCR_BEGIN(GPRS_Power_Control_Parameters_t)
104 M_UINT (GPRS_Power_Control_Parameters_t, ALPHA, 4),
105 M_UINT (GPRS_Power_Control_Parameters_t, T_AVG_W, 5),
106 M_UINT (GPRS_Power_Control_Parameters_t, T_AVG_T, 5),
Anders Broman8ea3cbe2020-01-28 17:36:33 +0100107 M_UINT (GPRS_Power_Control_Parameters_t, PC_MEAS_CHAN, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300108 M_UINT (GPRS_Power_Control_Parameters_t, N_AVG_I, 4),
109CSN_DESCR_END (GPRS_Power_Control_Parameters_t)
110
111/*< Global Power Control Parameters IE >*/
112static const
113CSN_DESCR_BEGIN(Global_Power_Control_Parameters_t)
114 M_UINT (Global_Power_Control_Parameters_t, ALPHA, 4),
115 M_UINT (Global_Power_Control_Parameters_t, T_AVG_W, 5),
116 M_UINT (Global_Power_Control_Parameters_t, T_AVG_T, 5),
117 M_UINT (Global_Power_Control_Parameters_t, Pb, 4),
118 M_UINT (Global_Power_Control_Parameters_t, PC_MEAS_CHAN, 1),
119 M_UINT (Global_Power_Control_Parameters_t, INT_MEAS_CHANNEL_LIST_AVAIL, 1),
120 M_UINT (Global_Power_Control_Parameters_t, N_AVG_I, 4),
121CSN_DESCR_END (Global_Power_Control_Parameters_t)
122
123/*< Global Packet Timing Advance IE >*/
124static const
125CSN_DESCR_BEGIN(Global_Packet_Timing_Advance_t)
126 M_NEXT_EXIST (Global_Packet_Timing_Advance_t, Exist_TIMING_ADVANCE_VALUE, 1),
127 M_UINT (Global_Packet_Timing_Advance_t, TIMING_ADVANCE_VALUE, 6),
128
129 M_NEXT_EXIST (Global_Packet_Timing_Advance_t, Exist_UPLINK_TIMING_ADVANCE, 2),
130 M_UINT (Global_Packet_Timing_Advance_t, UPLINK_TIMING_ADVANCE_INDEX, 4),
131 M_UINT (Global_Packet_Timing_Advance_t, UPLINK_TIMING_ADVANCE_TIMESLOT_NUMBER, 3),
132
133 M_NEXT_EXIST (Global_Packet_Timing_Advance_t, Exist_DOWNLINK_TIMING_ADVANCE, 2),
134 M_UINT (Global_Packet_Timing_Advance_t, DOWNLINK_TIMING_ADVANCE_INDEX, 4),
135 M_UINT (Global_Packet_Timing_Advance_t, DOWNLINK_TIMING_ADVANCE_TIMESLOT_NUMBER, 3),
136CSN_DESCR_END (Global_Packet_Timing_Advance_t)
137
138/*< Channel Quality Report struct >*/
139static const
140CSN_DESCR_BEGIN(Channel_Quality_Report_t)
141 M_UINT (Channel_Quality_Report_t, C_VALUE, 6),
142 M_UINT (Channel_Quality_Report_t, RXQUAL, 3),
143 M_UINT (Channel_Quality_Report_t, SIGN_VAR, 6),
144
145 M_NEXT_EXIST (Channel_Quality_Report_t, Slot[0].Exist, 1),
146 M_UINT (Channel_Quality_Report_t, Slot[0].I_LEVEL_TN, 4),
147
148 M_NEXT_EXIST (Channel_Quality_Report_t, Slot[1].Exist, 1),
149 M_UINT (Channel_Quality_Report_t, Slot[1].I_LEVEL_TN, 4),
150
151 M_NEXT_EXIST (Channel_Quality_Report_t, Slot[2].Exist, 1),
152 M_UINT (Channel_Quality_Report_t, Slot[2].I_LEVEL_TN, 4),
153
154 M_NEXT_EXIST (Channel_Quality_Report_t, Slot[3].Exist, 1),
155 M_UINT (Channel_Quality_Report_t, Slot[3].I_LEVEL_TN, 4),
156
157 M_NEXT_EXIST (Channel_Quality_Report_t, Slot[4].Exist, 1),
158 M_UINT (Channel_Quality_Report_t, Slot[4].I_LEVEL_TN, 4),
159
160 M_NEXT_EXIST (Channel_Quality_Report_t, Slot[5].Exist, 1),
161 M_UINT (Channel_Quality_Report_t, Slot[5].I_LEVEL_TN, 4),
162
163 M_NEXT_EXIST (Channel_Quality_Report_t, Slot[6].Exist, 1),
164 M_UINT (Channel_Quality_Report_t, Slot[6].I_LEVEL_TN, 4),
165
166 M_NEXT_EXIST (Channel_Quality_Report_t, Slot[7].Exist, 1),
167 M_UINT (Channel_Quality_Report_t, Slot[7].I_LEVEL_TN, 4),
168CSN_DESCR_END (Channel_Quality_Report_t)
169
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400170/*< EGPRS Ack/Nack Description struct >*/
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300171static const
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400172CSN_DESCR_BEGIN (EGPRS_AckNack_Desc_t)
173 M_UINT (EGPRS_AckNack_Desc_t, FINAL_ACK_INDICATION, 1),
174 M_UINT (EGPRS_AckNack_Desc_t, BEGINNING_OF_WINDOW, 1),
175 M_UINT (EGPRS_AckNack_Desc_t, END_OF_WINDOW, 1),
176 M_UINT (EGPRS_AckNack_Desc_t, STARTING_SEQUENCE_NUMBER, 11),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300177
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400178 M_NEXT_EXIST (EGPRS_AckNack_Desc_t, Exist_CRBB, 3),
179 M_UINT (EGPRS_AckNack_Desc_t, CRBB_LENGTH, 7),
180 M_UINT (EGPRS_AckNack_Desc_t, CRBB_STARTING_COLOR_CODE, 1),
181 M_LEFT_VAR_BMP (EGPRS_AckNack_Desc_t, CRBB, CRBB_LENGTH, 0),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300182
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400183 M_LEFT_VAR_BMP_1(EGPRS_AckNack_Desc_t, URBB, URBB_LENGTH, 0),
184CSN_DESCR_END (EGPRS_AckNack_Desc_t)
185
186/*< EGPRS Ack/Nack Description IE >*/
Vadim Yanitskiy39a65052020-01-25 01:24:59 +0700187gint16 Egprs_Ack_Nack_Desc_w_len_Dissector(csnStream_t* ar, bitvec *vector, unsigned *readIndex, void* data)
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400188{
189 if (ar->direction == 0)
190 {
191 return csnStreamEncoder(ar, CSNDESCR(EGPRS_AckNack_Desc_t), vector, readIndex, data);
192 }
193 else
194 {
195 return csnStreamDecoder(ar, CSNDESCR(EGPRS_AckNack_Desc_t), vector, readIndex, data);
196 }
197}
198
199/* this intermediate structure is only required because M_SERIALIZE cannot be used as a member of M_UNION */
200static const
201CSN_DESCR_BEGIN(EGPRS_AckNack_w_len_t)
202 M_SERIALIZE (EGPRS_AckNack_w_len_t, Desc, 8, Egprs_Ack_Nack_Desc_w_len_Dissector),
203CSN_DESCR_END (EGPRS_AckNack_w_len_t)
204
205static const
206CSN_DESCR_BEGIN(EGPRS_AckNack_t)
207 M_UNION (EGPRS_AckNack_t, 2),
208 M_TYPE (EGPRS_AckNack_t, Desc, EGPRS_AckNack_Desc_t),
209 M_TYPE (EGPRS_AckNack_t, Desc, EGPRS_AckNack_w_len_t),
210CSN_DESCR_END (EGPRS_AckNack_t)
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300211
212/*<P1 Rest Octets>*/
213/*<P2 Rest Octets>*/
214static const
215CSN_DESCR_BEGIN(MobileAllocationIE_t)
216 M_UINT (MobileAllocationIE_t, Length, 8),
217 M_VAR_ARRAY (MobileAllocationIE_t, MA, Length, 0),
218CSN_DESCR_END (MobileAllocationIE_t)
219
220static const
221CSN_DESCR_BEGIN(SingleRFChannel_t)
222 M_UINT (SingleRFChannel_t, spare, 2),
223 M_UINT (SingleRFChannel_t, ARFCN, 10),
224CSN_DESCR_END (SingleRFChannel_t)
225
226static const
227CSN_DESCR_BEGIN(RFHoppingChannel_t)
228 M_UINT (RFHoppingChannel_t, MAIO, 6),
229 M_UINT (RFHoppingChannel_t, HSN, 6),
230CSN_DESCR_END (RFHoppingChannel_t)
231
232static const
233CSN_DESCR_BEGIN(MobileAllocation_or_Frequency_Short_List_t)
234 M_UNION (MobileAllocation_or_Frequency_Short_List_t, 2),
235 M_BITMAP (MobileAllocation_or_Frequency_Short_List_t, u.Frequency_Short_List, 64),
236 M_TYPE (MobileAllocation_or_Frequency_Short_List_t, u.MA, MobileAllocationIE_t),
237CSN_DESCR_END (MobileAllocation_or_Frequency_Short_List_t)
238
239static const
240CSN_DESCR_BEGIN(Channel_Description_t)
241 M_UINT (Channel_Description_t, Channel_type_and_TDMA_offset, 5),
242 M_UINT (Channel_Description_t, TN, 3),
243 M_UINT (Channel_Description_t, TSC, 3),
244
245 M_UNION (Channel_Description_t, 2),
246 M_TYPE (Channel_Description_t, u.SingleRFChannel, SingleRFChannel_t),
247 M_TYPE (Channel_Description_t, u.RFHoppingChannel, RFHoppingChannel_t),
248CSN_DESCR_END(Channel_Description_t)
249
250static const
251CSN_DESCR_BEGIN(Group_Channel_Description_t)
252 M_TYPE (Group_Channel_Description_t, Channel_Description, Channel_Description_t),
253
254 M_NEXT_EXIST (Group_Channel_Description_t, Exist_Hopping, 1),
255 M_TYPE (Group_Channel_Description_t, MA_or_Frequency_Short_List, MobileAllocation_or_Frequency_Short_List_t),
256CSN_DESCR_END (Group_Channel_Description_t)
257
258static const
259CSN_DESCR_BEGIN(Group_Call_Reference_t)
260 M_UINT (Group_Call_Reference_t, value, 27),
Anders Broman8ea3cbe2020-01-28 17:36:33 +0100261 M_UINT (Group_Call_Reference_t, SF, 1),
262 M_UINT (Group_Call_Reference_t, AF, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300263 M_UINT (Group_Call_Reference_t, call_priority, 3),
264 M_UINT (Group_Call_Reference_t, Ciphering_information, 4),
265CSN_DESCR_END (Group_Call_Reference_t)
266
267static const
268CSN_DESCR_BEGIN(Group_Call_information_t)
269 M_TYPE (Group_Call_information_t, Group_Call_Reference, Group_Call_Reference_t),
270
271 M_NEXT_EXIST (Group_Call_information_t, Exist_Group_Channel_Description, 1),
272 M_TYPE (Group_Call_information_t, Group_Channel_Description, Group_Channel_Description_t),
273CSN_DESCR_END (Group_Call_information_t)
274
275static const
276CSN_DESCR_BEGIN (P1_Rest_Octets_t)
277 M_NEXT_EXIST_LH(P1_Rest_Octets_t, Exist_NLN_PCH_and_NLN_status, 2),
278 M_UINT (P1_Rest_Octets_t, NLN_PCH, 2),
279 M_UINT (P1_Rest_Octets_t, NLN_status, 1),
280
281 M_NEXT_EXIST_LH(P1_Rest_Octets_t, Exist_Priority1, 1),
282 M_UINT (P1_Rest_Octets_t, Priority1, 3),
283
284 M_NEXT_EXIST_LH(P1_Rest_Octets_t, Exist_Priority2, 1),
285 M_UINT (P1_Rest_Octets_t, Priority2, 3),
286
287 M_NEXT_EXIST_LH(P1_Rest_Octets_t, Exist_Group_Call_information, 1),
288 M_TYPE (P1_Rest_Octets_t, Group_Call_information, Group_Call_information_t),
289
290 M_UINT_LH (P1_Rest_Octets_t, Packet_Page_Indication_1, 1),
291 M_UINT_LH (P1_Rest_Octets_t, Packet_Page_Indication_2, 1),
292CSN_DESCR_END (P1_Rest_Octets_t)
293
294static const
295CSN_DESCR_BEGIN (P2_Rest_Octets_t)
296 M_NEXT_EXIST_LH(P2_Rest_Octets_t, Exist_CN3, 1),
297 M_UINT (P2_Rest_Octets_t, CN3, 2),
298
299 M_NEXT_EXIST_LH(P2_Rest_Octets_t, Exist_NLN_and_status, 2),
300 M_UINT (P2_Rest_Octets_t, NLN, 2),
301 M_UINT (P2_Rest_Octets_t, NLN_status, 1),
302
303 M_NEXT_EXIST_LH(P2_Rest_Octets_t, Exist_Priority1, 1),
304 M_UINT (P2_Rest_Octets_t, Priority1, 3),
305
306 M_NEXT_EXIST_LH(P2_Rest_Octets_t, Exist_Priority2, 1),
307 M_UINT (P2_Rest_Octets_t, Priority2, 3),
308
309 M_NEXT_EXIST_LH(P2_Rest_Octets_t, Exist_Priority3, 1),
310 M_UINT (P2_Rest_Octets_t, Priority3, 3),
311
312 M_UINT_LH (P2_Rest_Octets_t, Packet_Page_Indication_3, 1),
313CSN_DESCR_END (P2_Rest_Octets_t)
314
315
316/* <IA Rest Octets>
317 * Note!!
318 * - first two bits skipped and frequencyparameters skipped
319 * - additions for R99 and EGPRS added
320 */
321static const
322CSN_DESCR_BEGIN(DynamicAllocation_t)
323 M_UINT (DynamicAllocation_t, USF, 3),
324 M_UINT (DynamicAllocation_t, USF_GRANULARITY, 1),
325
326 M_NEXT_EXIST (DynamicAllocation_t, Exist_P0_PR_MODE, 2),
327 M_UINT (DynamicAllocation_t, P0, 4),
328 M_UINT (DynamicAllocation_t, PR_MODE, 1),
329CSN_DESCR_END (DynamicAllocation_t)
330
331static const
332CSN_DESCR_BEGIN(EGPRS_TwoPhaseAccess_t)
333 M_NEXT_EXIST (EGPRS_TwoPhaseAccess_t, Exist_ALPHA, 1),
334 M_UINT (EGPRS_TwoPhaseAccess_t, ALPHA, 4),
335
336 M_UINT (EGPRS_TwoPhaseAccess_t, GAMMA, 5),
337 M_TYPE (EGPRS_TwoPhaseAccess_t, TBF_STARTING_TIME, StartingTime_t),
338 M_UINT (EGPRS_TwoPhaseAccess_t, NR_OF_RADIO_BLOCKS_ALLOCATED, 2),
339
340 M_NEXT_EXIST (EGPRS_TwoPhaseAccess_t, Exist_P0_BTS_PWR_CTRL_PR_MODE, 3),
341 M_UINT (EGPRS_TwoPhaseAccess_t, P0, 4),
342 M_UINT (EGPRS_TwoPhaseAccess_t, BTS_PWR_CTRL_MODE, 1),
343 M_UINT (EGPRS_TwoPhaseAccess_t, PR_MODE, 1),
344CSN_DESCR_END (EGPRS_TwoPhaseAccess_t)
345
346static const
347CSN_DESCR_BEGIN(EGPRS_OnePhaseAccess_t)
348 M_UINT (EGPRS_OnePhaseAccess_t, TFI_ASSIGNMENT, 5),
349 M_UINT (EGPRS_OnePhaseAccess_t, POLLING, 1),
350
351 M_UNION (EGPRS_OnePhaseAccess_t, 2),
352 M_TYPE (EGPRS_OnePhaseAccess_t, Allocation.DynamicAllocation, DynamicAllocation_t),
353 CSN_ERROR (EGPRS_OnePhaseAccess_t, "1 <Fixed Allocation>", CSN_ERROR_STREAM_NOT_SUPPORTED),
354
355 M_UINT (EGPRS_OnePhaseAccess_t, EGPRS_CHANNEL_CODING_COMMAND, 4),
356 M_UINT (EGPRS_OnePhaseAccess_t, TLLI_BLOCK_CHANNEL_CODING, 1),
357
358 M_NEXT_EXIST (EGPRS_OnePhaseAccess_t, Exist_BEP_PERIOD2, 1),
359 M_UINT (EGPRS_OnePhaseAccess_t, BEP_PERIOD2, 4),
360
361 M_UINT (EGPRS_OnePhaseAccess_t, RESEGMENT, 1),
362 M_UINT (EGPRS_OnePhaseAccess_t, EGPRS_WindowSize, 5),
363
364 M_NEXT_EXIST (EGPRS_OnePhaseAccess_t, Exist_ALPHA, 1),
365 M_UINT (EGPRS_OnePhaseAccess_t, ALPHA, 4),
366
367 M_UINT (EGPRS_OnePhaseAccess_t, GAMMA, 5),
368
369 M_NEXT_EXIST (EGPRS_OnePhaseAccess_t, Exist_TIMING_ADVANCE_INDEX, 1),
370 M_UINT (EGPRS_OnePhaseAccess_t, TIMING_ADVANCE_INDEX, 4),
371
372 M_NEXT_EXIST (EGPRS_OnePhaseAccess_t, Exist_TBF_STARTING_TIME, 1),
373 M_TYPE (EGPRS_OnePhaseAccess_t, TBF_STARTING_TIME, StartingTime_t),
374CSN_DESCR_END (EGPRS_OnePhaseAccess_t)
375
376static const
377CSN_DESCR_BEGIN(IA_EGPRS_00_t)
378 M_UINT (IA_EGPRS_00_t, ExtendedRA, 5),
379
380 M_REC_ARRAY (IA_EGPRS_00_t, AccessTechnologyType, NrOfAccessTechnologies, 4),
381
382 M_UNION (IA_EGPRS_00_t, 2),
383 M_TYPE (IA_EGPRS_00_t, Access.TwoPhaseAccess, EGPRS_TwoPhaseAccess_t),
384 M_TYPE (IA_EGPRS_00_t, Access.OnePhaseAccess, EGPRS_OnePhaseAccess_t),
385CSN_DESCR_END (IA_EGPRS_00_t)
386
387static const
388CSN_ChoiceElement_t IA_EGPRS_Choice[] =
389{
Pau Espin Pedrol7cce8252020-01-24 16:41:14 +0100390 {2, 0x00, 0, M_TYPE (IA_EGPRS_t, u.IA_EGPRS_PUA, IA_EGPRS_00_t)},
391 {2, 0x01, 0, CSN_ERROR(IA_EGPRS_t, "01 <IA_EGPRS>", CSN_ERROR_STREAM_NOT_SUPPORTED)},
392 {1, 0x01, 0, CSN_ERROR(IA_EGPRS_t, "1 <IA_EGPRS>", CSN_ERROR_STREAM_NOT_SUPPORTED)}
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300393};
394
395/* Please observe the double usage of UnionType element.
396 * First, it is used to store the second bit of LL/LH identification of EGPRS contents.
397 * Thereafter, UnionType will be used to store the index to detected choice.
398 */
399static const
400CSN_DESCR_BEGIN(IA_EGPRS_t)
401 M_UINT (IA_EGPRS_t, UnionType , 1 ),
402 M_CHOICE (IA_EGPRS_t, UnionType, IA_EGPRS_Choice, ElementsOf(IA_EGPRS_Choice)),
403CSN_DESCR_END (IA_EGPRS_t)
404
405static const
406CSN_DESCR_BEGIN(IA_FreqParamsBeforeTime_t)
407 M_UINT (IA_FreqParamsBeforeTime_t, Length, 6),
408 M_UINT (IA_FreqParamsBeforeTime_t, MAIO, 6),
409 M_VAR_ARRAY (IA_FreqParamsBeforeTime_t, MobileAllocation, Length, 8),
410CSN_DESCR_END (IA_FreqParamsBeforeTime_t)
411
412static const
413CSN_DESCR_BEGIN (GPRS_SingleBlockAllocation_t)
414 M_NEXT_EXIST (GPRS_SingleBlockAllocation_t, Exist_ALPHA, 1),
415 M_UINT (GPRS_SingleBlockAllocation_t, ALPHA, 4),
416
417 M_UINT (GPRS_SingleBlockAllocation_t, GAMMA, 5),
418 M_FIXED (GPRS_SingleBlockAllocation_t, 2, 0x01),
419 M_TYPE (GPRS_SingleBlockAllocation_t, TBF_STARTING_TIME, StartingTime_t), /*bit(16)*/
420
421 M_NEXT_EXIST_LH(GPRS_SingleBlockAllocation_t, Exist_P0_BTS_PWR_CTRL_PR_MODE, 3),
422 M_UINT (GPRS_SingleBlockAllocation_t, P0, 4),
423 M_UINT (GPRS_SingleBlockAllocation_t, BTS_PWR_CTRL_MODE, 1),
424 M_UINT (GPRS_SingleBlockAllocation_t, PR_MODE, 1),
425CSN_DESCR_END (GPRS_SingleBlockAllocation_t)
426
427static const
428CSN_DESCR_BEGIN (GPRS_DynamicOrFixedAllocation_t)
429 M_UINT (GPRS_DynamicOrFixedAllocation_t, TFI_ASSIGNMENT, 5),
430 M_UINT (GPRS_DynamicOrFixedAllocation_t, POLLING, 1),
431
432 M_UNION (GPRS_DynamicOrFixedAllocation_t, 2),
433 M_TYPE (GPRS_DynamicOrFixedAllocation_t, Allocation.DynamicAllocation, DynamicAllocation_t),
434 CSN_ERROR (GPRS_DynamicOrFixedAllocation_t, "1 <Fixed Allocation>", CSN_ERROR_STREAM_NOT_SUPPORTED),
435
436 M_UINT (GPRS_DynamicOrFixedAllocation_t, CHANNEL_CODING_COMMAND, 2),
437 M_UINT (GPRS_DynamicOrFixedAllocation_t, TLLI_BLOCK_CHANNEL_CODING, 1),
438
439 M_NEXT_EXIST (GPRS_DynamicOrFixedAllocation_t, Exist_ALPHA, 1),
440 M_UINT (GPRS_DynamicOrFixedAllocation_t, ALPHA, 4),
441
442 M_UINT (GPRS_DynamicOrFixedAllocation_t, GAMMA, 5),
443
444 M_NEXT_EXIST (GPRS_DynamicOrFixedAllocation_t, Exist_TIMING_ADVANCE_INDEX, 1),
445 M_UINT (GPRS_DynamicOrFixedAllocation_t, TIMING_ADVANCE_INDEX, 4),
446
447 M_NEXT_EXIST (GPRS_DynamicOrFixedAllocation_t, Exist_TBF_STARTING_TIME, 1),
448 M_TYPE (GPRS_DynamicOrFixedAllocation_t, TBF_STARTING_TIME, StartingTime_t),
449CSN_DESCR_END (GPRS_DynamicOrFixedAllocation_t)
450
451static const
452CSN_DESCR_BEGIN(PU_IA_AdditionsR99_t)
453 M_NEXT_EXIST (PU_IA_AdditionsR99_t, Exist_ExtendedRA, 1),
454 M_UINT (PU_IA_AdditionsR99_t, ExtendedRA, 5),
455CSN_DESCR_END (PU_IA_AdditionsR99_t)
456
457static const
458CSN_DESCR_BEGIN (Packet_Uplink_ImmAssignment_t)
459 M_UNION (Packet_Uplink_ImmAssignment_t, 2),
460 M_TYPE (Packet_Uplink_ImmAssignment_t, Access.SingleBlockAllocation, GPRS_SingleBlockAllocation_t),
461 M_TYPE (Packet_Uplink_ImmAssignment_t, Access.DynamicOrFixedAllocation, GPRS_DynamicOrFixedAllocation_t),
462
463 M_NEXT_EXIST_OR_NULL_LH(Packet_Uplink_ImmAssignment_t, Exist_AdditionsR99, 1),
464 M_TYPE (Packet_Uplink_ImmAssignment_t, AdditionsR99, PU_IA_AdditionsR99_t),
465CSN_DESCR_END (Packet_Uplink_ImmAssignment_t)
466
467static const
468CSN_DESCR_BEGIN(PD_IA_AdditionsR99_t)
469 M_UINT (PD_IA_AdditionsR99_t, EGPRS_WindowSize, 5),
470 M_UINT (PD_IA_AdditionsR99_t, LINK_QUALITY_MEASUREMENT_MODE, 2),
471
472 M_NEXT_EXIST (PD_IA_AdditionsR99_t, Exist_BEP_PERIOD2, 1),
473 M_UINT (PD_IA_AdditionsR99_t, BEP_PERIOD2, 4),
474CSN_DESCR_END (PD_IA_AdditionsR99_t)
475
476static const
477CSN_DESCR_BEGIN(Packet_Downlink_ImmAssignment_t)
478 M_UINT (Packet_Downlink_ImmAssignment_t, TLLI, 32),
479
480 M_NEXT_EXIST (Packet_Downlink_ImmAssignment_t, Exist_TFI_to_TA_VALID, 6 + 1),
481 M_UINT (Packet_Downlink_ImmAssignment_t, TFI_ASSIGNMENT, 5),
482 M_UINT (Packet_Downlink_ImmAssignment_t, RLC_MODE, 1),
483 M_NEXT_EXIST (Packet_Downlink_ImmAssignment_t, Exist_ALPHA, 1),
484 M_UINT (Packet_Downlink_ImmAssignment_t, ALPHA, 4),
485 M_UINT (Packet_Downlink_ImmAssignment_t, GAMMA, 5),
486 M_UINT (Packet_Downlink_ImmAssignment_t, POLLING, 1),
487 M_UINT (Packet_Downlink_ImmAssignment_t, TA_VALID, 1),
488
489 M_NEXT_EXIST (Packet_Downlink_ImmAssignment_t, Exist_TIMING_ADVANCE_INDEX, 1),
490 M_UINT (Packet_Downlink_ImmAssignment_t, TIMING_ADVANCE_INDEX, 4),
491
492 M_NEXT_EXIST (Packet_Downlink_ImmAssignment_t, Exist_TBF_STARTING_TIME, 1),
493 M_TYPE (Packet_Downlink_ImmAssignment_t, TBF_STARTING_TIME, StartingTime_t),
494
495 M_NEXT_EXIST (Packet_Downlink_ImmAssignment_t, Exist_P0_PR_MODE, 3),
496 M_UINT (Packet_Downlink_ImmAssignment_t, P0, 4),
497 M_UINT (Packet_Downlink_ImmAssignment_t, BTS_PWR_CTRL_MODE, 1),
498 M_UINT (Packet_Downlink_ImmAssignment_t, PR_MODE, 1),
499
500 M_NEXT_EXIST_OR_NULL_LH(Packet_Downlink_ImmAssignment_t, Exist_AdditionsR99, 1),
501 M_TYPE (Packet_Downlink_ImmAssignment_t, AdditionsR99, PD_IA_AdditionsR99_t),
502CSN_DESCR_END (Packet_Downlink_ImmAssignment_t)
503
504static const
505CSN_DESCR_BEGIN (Second_Part_Packet_Assignment_t)
506 M_NEXT_EXIST_OR_NULL_LH(Second_Part_Packet_Assignment_t, Exist_SecondPart, 2),
507 M_NEXT_EXIST (Second_Part_Packet_Assignment_t, Exist_ExtendedRA, 1),
508 M_UINT (Second_Part_Packet_Assignment_t, ExtendedRA, 5),
509CSN_DESCR_END (Second_Part_Packet_Assignment_t)
510
511static const
512CSN_DESCR_BEGIN(IA_PacketAssignment_UL_DL_t)
513 M_UNION (IA_PacketAssignment_UL_DL_t, 2),
514 M_TYPE (IA_PacketAssignment_UL_DL_t, ul_dl.Packet_Uplink_ImmAssignment, Packet_Uplink_ImmAssignment_t),
515 M_TYPE (IA_PacketAssignment_UL_DL_t, ul_dl.Packet_Downlink_ImmAssignment, Packet_Downlink_ImmAssignment_t),
516CSN_DESCR_END (IA_PacketAssignment_UL_DL_t)
517
518static const
519CSN_DESCR_BEGIN(IA_PacketAssignment_t)
520 M_UNION (IA_PacketAssignment_t, 2),
521 M_TYPE (IA_PacketAssignment_t, u.UplinkDownlinkAssignment, IA_PacketAssignment_UL_DL_t),
522 M_TYPE (IA_PacketAssignment_t, u.UplinkDownlinkAssignment, Second_Part_Packet_Assignment_t),
523CSN_DESCR_END (IA_PacketAssignment_t)
524
525/* <Packet Polling Request> */
526static const
527CSN_ChoiceElement_t PacketPollingID[] =
528{
Pau Espin Pedrol7cce8252020-01-24 16:41:14 +0100529 {1, 0, 0, M_TYPE(PacketPollingID_t, u.Global_TFI, Global_TFI_t)},
530 {2, 0x02, 0, M_UINT(PacketPollingID_t, u.TLLI, 32)},
531 {3, 0x06, 0, M_UINT(PacketPollingID_t, u.TQI, 16)},
532/*{3, 0x07 , 0, M_TYPE(PacketUplinkID_t, u.Packet_Request_Reference, Packet_Request_Reference_t)},*/
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300533};
534
535static const
536CSN_DESCR_BEGIN(PacketPollingID_t)
537 M_CHOICE (PacketPollingID_t, UnionType, PacketPollingID, ElementsOf(PacketPollingID)),
538CSN_DESCR_END (PacketPollingID_t)
539
540static const
541CSN_DESCR_BEGIN(Packet_Polling_Request_t)
542 M_UINT (Packet_Polling_Request_t, MESSAGE_TYPE, 6),
543 M_UINT (Packet_Polling_Request_t, PAGE_MODE, 2),
544 M_TYPE (Packet_Polling_Request_t, ID, PacketPollingID_t),
Anders Broman8ea3cbe2020-01-28 17:36:33 +0100545 M_UINT (Packet_Polling_Request_t, TYPE_OF_ACK, 1),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400546 M_PADDING_BITS(Packet_Polling_Request_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300547CSN_DESCR_END (Packet_Polling_Request_t)
548
549static const
550CSN_DESCR_BEGIN(MobileAllocation_t)
551 M_UINT_OFFSET(MobileAllocation_t, MA_BitLength, 6, 1),
552 M_VAR_BITMAP (MobileAllocation_t, MA_BITMAP, MA_BitLength, 0),
553CSN_DESCR_END (MobileAllocation_t)
554
555static const
556CSN_DESCR_BEGIN(ARFCN_index_list_t)
557 M_REC_ARRAY (ARFCN_index_list_t, ARFCN_INDEX, ElementsOf_ARFCN_INDEX, 6),
558CSN_DESCR_END (ARFCN_index_list_t)
559
560static const
561CSN_DESCR_BEGIN(GPRS_Mobile_Allocation_t)
562 M_UINT (GPRS_Mobile_Allocation_t, HSN, 6),
563 M_REC_ARRAY (GPRS_Mobile_Allocation_t, RFL_NUMBER, ElementsOf_RFL_NUMBER, 4),
564 M_UNION (GPRS_Mobile_Allocation_t, 2),
565 M_TYPE (GPRS_Mobile_Allocation_t, u.MA, MobileAllocation_t),
566 M_TYPE (GPRS_Mobile_Allocation_t, u.ARFCN_index_list, ARFCN_index_list_t),
567CSN_DESCR_END (GPRS_Mobile_Allocation_t)
568
569/*< SI 13 Rest Octets >*/
570static const
571CSN_DESCR_BEGIN (Extension_Bits_t)
572 M_UINT_OFFSET (Extension_Bits_t, extension_length, 6, 1),
573 M_LEFT_VAR_BMP(Extension_Bits_t, Extension_Info, extension_length, 0),
574CSN_DESCR_END (Extension_Bits_t)
575
576static const
577CSN_DESCR_BEGIN(GPRS_Cell_Options_t)
578 M_UINT (GPRS_Cell_Options_t, NMO, 2),
Pascal Quantin29248d62020-01-28 17:13:17 +0100579 M_UINT (GPRS_Cell_Options_t, T3168, 3),
580 M_UINT (GPRS_Cell_Options_t, T3192, 3),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300581 M_UINT (GPRS_Cell_Options_t, DRX_TIMER_MAX, 3),
Anders Broman8ea3cbe2020-01-28 17:36:33 +0100582 M_UINT (GPRS_Cell_Options_t, ACCESS_BURST_TYPE, 1),
583 M_UINT (GPRS_Cell_Options_t, CONTROL_ACK_TYPE, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300584 M_UINT (GPRS_Cell_Options_t, BS_CV_MAX, 4),
585
586 M_NEXT_EXIST (GPRS_Cell_Options_t, Exist_PAN, 3),
587 M_UINT (GPRS_Cell_Options_t, PAN_DEC, 3),
588 M_UINT (GPRS_Cell_Options_t, PAN_INC, 3),
589 M_UINT (GPRS_Cell_Options_t, PAN_MAX, 3),
590
591 M_NEXT_EXIST (GPRS_Cell_Options_t, Exist_Extension_Bits, 1),
592 M_TYPE (GPRS_Cell_Options_t, Extension_Bits, Extension_Bits_t),
593CSN_DESCR_END (GPRS_Cell_Options_t)
594
595static const
596CSN_DESCR_BEGIN(PBCCH_Not_present_t)
597 M_UINT (PBCCH_Not_present_t, RAC, 8),
Anders Broman8ea3cbe2020-01-28 17:36:33 +0100598 M_UINT (PBCCH_Not_present_t, SPGC_CCCH_SUP, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300599 M_UINT (PBCCH_Not_present_t, PRIORITY_ACCESS_THR, 3),
600 M_UINT (PBCCH_Not_present_t, NETWORK_CONTROL_ORDER, 2),
601 M_TYPE (PBCCH_Not_present_t, GPRS_Cell_Options, GPRS_Cell_Options_t),
602 M_TYPE (PBCCH_Not_present_t, GPRS_Power_Control_Parameters, GPRS_Power_Control_Parameters_t),
603CSN_DESCR_END (PBCCH_Not_present_t)
604
605static const
606CSN_ChoiceElement_t SI13_PBCCH_Description_Channel[] =
607{/* this one is used in SI13*/
Pau Espin Pedrol7cce8252020-01-24 16:41:14 +0100608 {2, 0x00, 0, M_NULL(PBCCH_Description_t, u.dummy, 0)},/*Default to BCCH carrier*/
609 {2, 0x01, 0, M_UINT(PBCCH_Description_t, u.ARFCN, 10)},
610 {1, 0x01, 0, M_UINT(PBCCH_Description_t, u.MAIO, 6)},
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300611};
612
613static const
614CSN_DESCR_BEGIN(PBCCH_Description_t)/*SI13*/
615 M_UINT (PBCCH_Description_t, Pb, 4),
616 M_UINT (PBCCH_Description_t, TSC, 3),
617 M_UINT (PBCCH_Description_t, TN, 3),
618
619 M_CHOICE (PBCCH_Description_t, UnionType, SI13_PBCCH_Description_Channel, ElementsOf(SI13_PBCCH_Description_Channel)),
620CSN_DESCR_END (PBCCH_Description_t)
621
622static const
623CSN_DESCR_BEGIN(PBCCH_present_t)
624 M_UINT (PBCCH_present_t, PSI1_REPEAT_PERIOD, 4),
625 M_TYPE (PBCCH_present_t, PBCCH_Description, PBCCH_Description_t),
626CSN_DESCR_END (PBCCH_present_t)
627
628static const
629CSN_DESCR_BEGIN(SI13_AdditionsR6)
630 M_NEXT_EXIST (SI13_AdditionsR6, Exist_LB_MS_TXPWR_MAX_CCH, 1),
631 M_UINT (SI13_AdditionsR6, LB_MS_TXPWR_MAX_CCH, 5),
632 M_UINT (SI13_AdditionsR6, SI2n_SUPPORT, 2),
633CSN_DESCR_END (SI13_AdditionsR6)
634
635static const
636CSN_DESCR_BEGIN(SI13_AdditionsR4)
637 M_UINT (SI13_AdditionsR4, SI_STATUS_IND, 1),
638 M_NEXT_EXIST_OR_NULL_LH (SI13_AdditionsR4, Exist_AdditionsR6, 1),
639 M_TYPE (SI13_AdditionsR4, AdditionsR6, SI13_AdditionsR6),
640CSN_DESCR_END (SI13_AdditionsR4)
641
642static const
643CSN_DESCR_BEGIN(SI13_AdditionR99)
644 M_UINT (SI13_AdditionR99, SGSNR, 1),
645 M_NEXT_EXIST_OR_NULL_LH (SI13_AdditionR99, Exist_AdditionsR4, 1),
646 M_TYPE (SI13_AdditionR99, AdditionsR4, SI13_AdditionsR4),
647CSN_DESCR_END (SI13_AdditionR99)
648
649static const
650CSN_DESCR_BEGIN (SI_13_t)
651 M_THIS_EXIST_LH (SI_13_t),
652
653 M_UINT (SI_13_t, BCCH_CHANGE_MARK, 3),
654 M_UINT (SI_13_t, SI_CHANGE_FIELD, 4),
655
656 M_NEXT_EXIST (SI_13_t, Exist_MA, 2),
657 M_UINT (SI_13_t, SI13_CHANGE_MARK, 2),
658 M_TYPE (SI_13_t, GPRS_Mobile_Allocation, GPRS_Mobile_Allocation_t),
659
660 M_UNION (SI_13_t, 2),
661 M_TYPE (SI_13_t, u.PBCCH_Not_present, PBCCH_Not_present_t),
662 M_TYPE (SI_13_t, u.PBCCH_present, PBCCH_present_t),
663
664 M_NEXT_EXIST_OR_NULL_LH(SI_13_t, Exist_AdditionsR99, 1),
665 M_TYPE (SI_13_t, AdditionsR99, SI13_AdditionR99),
666CSN_DESCR_END (SI_13_t)
667
668/************************************************************/
669/* TS 44.060 messages */
670/************************************************************/
671
672/*< Packet TBF Release message content >*/
673static const
674CSN_DESCR_BEGIN(Packet_TBF_Release_t)
675 M_UINT (Packet_TBF_Release_t, MESSAGE_TYPE, 6),
676 M_UINT (Packet_TBF_Release_t, PAGE_MODE, 2),
677 M_FIXED (Packet_TBF_Release_t, 1, 0x00),
678 M_TYPE (Packet_TBF_Release_t, Global_TFI, Global_TFI_t),
Anders Broman8ea3cbe2020-01-28 17:36:33 +0100679 M_UINT (Packet_TBF_Release_t, UPLINK_RELEASE, 1),
680 M_UINT (Packet_TBF_Release_t, DOWNLINK_RELEASE, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300681 M_UINT (Packet_TBF_Release_t, TBF_RELEASE_CAUSE, 4),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400682 M_PADDING_BITS(Packet_TBF_Release_t ),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300683CSN_DESCR_END (Packet_TBF_Release_t)
684
685/*< Packet Control Acknowledgement message content >*/
686
687static const
688CSN_DESCR_BEGIN (Packet_Control_Acknowledgement_AdditionsR6_t)
689 M_NEXT_EXIST (Packet_Control_Acknowledgement_AdditionsR6_t, Exist_CTRL_ACK_Extension, 1),
690 M_UINT (Packet_Control_Acknowledgement_AdditionsR6_t, CTRL_ACK_Extension, 9),
691CSN_DESCR_END (Packet_Control_Acknowledgement_AdditionsR6_t)
692
693static const
694CSN_DESCR_BEGIN (Packet_Control_Acknowledgement_AdditionsR5_t)
695 M_NEXT_EXIST (Packet_Control_Acknowledgement_AdditionsR5_t, Exist_TN_RRBP, 1),
696 M_UINT (Packet_Control_Acknowledgement_AdditionsR5_t, TN_RRBP, 3),
697 M_NEXT_EXIST (Packet_Control_Acknowledgement_AdditionsR5_t, Exist_G_RNTI_Extension, 1),
698 M_UINT (Packet_Control_Acknowledgement_AdditionsR5_t, G_RNTI_Extension, 4),
699
700 M_NEXT_EXIST_OR_NULL (Packet_Control_Acknowledgement_AdditionsR5_t, Exist_AdditionsR6, 1),
701 M_TYPE (Packet_Control_Acknowledgement_AdditionsR5_t, AdditionsR6, Packet_Control_Acknowledgement_AdditionsR6_t),
702CSN_DESCR_END (Packet_Control_Acknowledgement_AdditionsR5_t)
703
704static const
705CSN_DESCR_BEGIN (Packet_Control_Acknowledgement_t)
706 M_UINT (Packet_Control_Acknowledgement_t, PayloadType, 2),
707 M_UINT (Packet_Control_Acknowledgement_t, spare, 5),
708 M_BIT (Packet_Control_Acknowledgement_t, R),
709
710 M_UINT (Packet_Control_Acknowledgement_t, MESSAGE_TYPE, 6),
711 M_UINT (Packet_Control_Acknowledgement_t, TLLI, 32),
712 M_UINT (Packet_Control_Acknowledgement_t, CTRL_ACK, 2),
713 M_NEXT_EXIST_OR_NULL (Packet_Control_Acknowledgement_t, Exist_AdditionsR5, 1),
714 M_TYPE (Packet_Control_Acknowledgement_t, AdditionsR5, Packet_Control_Acknowledgement_AdditionsR5_t),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400715 M_PADDING_BITS (Packet_Control_Acknowledgement_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300716CSN_DESCR_END (Packet_Control_Acknowledgement_t)
717
718/*< Packet Downlink Dummy Control Block message content >*/
719static const
720CSN_DESCR_BEGIN(Packet_Downlink_Dummy_Control_Block_t)
721 M_UINT (Packet_Downlink_Dummy_Control_Block_t, MESSAGE_TYPE, 6),
722 M_UINT (Packet_Downlink_Dummy_Control_Block_t, PAGE_MODE, 2),
723
724 M_NEXT_EXIST (Packet_Downlink_Dummy_Control_Block_t, Exist_PERSISTENCE_LEVEL, 1),
725 M_UINT_ARRAY (Packet_Downlink_Dummy_Control_Block_t, PERSISTENCE_LEVEL, 4, 4),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400726 M_PADDING_BITS(Packet_Downlink_Dummy_Control_Block_t ),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300727CSN_DESCR_END (Packet_Downlink_Dummy_Control_Block_t)
728
729/*< Packet Uplink Dummy Control Block message content >*/
730static const
731CSN_DESCR_BEGIN(Packet_Uplink_Dummy_Control_Block_t)
732 M_UINT (Packet_Uplink_Dummy_Control_Block_t, PayloadType, 2),
733 M_UINT (Packet_Uplink_Dummy_Control_Block_t, spare, 5),
734 M_BIT (Packet_Uplink_Dummy_Control_Block_t, R),
735
736 M_UINT (Packet_Uplink_Dummy_Control_Block_t, MESSAGE_TYPE, 6),
737 M_UINT (Packet_Uplink_Dummy_Control_Block_t, TLLI, 32),
738/*M_FIXED (Packet_Uplink_Dummy_Control_Block_t, 1, 0),*/
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400739 M_PADDING_BITS(Packet_Uplink_Dummy_Control_Block_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300740CSN_DESCR_END (Packet_Uplink_Dummy_Control_Block_t)
741
742static const
743CSN_DESCR_BEGIN(Receive_N_PDU_Number_t)
744 M_UINT (Receive_N_PDU_Number_t, nsapi, 4),
745 M_UINT (Receive_N_PDU_Number_t, value, 8),
746CSN_DESCR_END (Receive_N_PDU_Number_t)
747
Vadim Yanitskiy39a65052020-01-25 01:24:59 +0700748gint16 Receive_N_PDU_Number_list_Dissector(csnStream_t* ar, bitvec *vector, unsigned *readIndex, void* data)
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300749{
750 if (ar->direction == 0)
751 {
752 return csnStreamEncoder(ar, CSNDESCR(Receive_N_PDU_Number_t), vector, readIndex, data);
753 }
754 else
755 {
756 return csnStreamDecoder(ar, CSNDESCR(Receive_N_PDU_Number_t), vector, readIndex, data);
757 }
758}
759
760static const
761CSN_DESCR_BEGIN(Receive_N_PDU_Number_list_t)
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400762 M_SERIALIZE (Receive_N_PDU_Number_list_t, IEI, 7, Receive_N_PDU_Number_list_Dissector),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300763 M_VAR_TARRAY (Receive_N_PDU_Number_list_t, Receive_N_PDU_Number, Receive_N_PDU_Number_t, Count_Receive_N_PDU_Number),
764CSN_DESCR_END (Receive_N_PDU_Number_list_t)
765
766/*< MS Radio Access capability IE >*/
767static const
768CSN_DESCR_BEGIN (DTM_EGPRS_t)
769 M_NEXT_EXIST (DTM_EGPRS_t, Exist_DTM_EGPRS_multislot_class, 1),
770 M_UINT (DTM_EGPRS_t, DTM_EGPRS_multislot_class, 2),
771CSN_DESCR_END (DTM_EGPRS_t)
772
773static const
774CSN_DESCR_BEGIN (DTM_EGPRS_HighMultislotClass_t)
775 M_NEXT_EXIST (DTM_EGPRS_HighMultislotClass_t, Exist_DTM_EGPRS_HighMultislotClass, 1),
776 M_UINT (DTM_EGPRS_HighMultislotClass_t, DTM_EGPRS_HighMultislotClass, 3),
777CSN_DESCR_END (DTM_EGPRS_HighMultislotClass_t)
778
779static const
Vincent Helfre1145fd22020-01-28 18:27:49 +0100780CSN_DESCR_BEGIN (DownlinkDualCarrierCapability_r7_t)
781 M_NEXT_EXIST (DownlinkDualCarrierCapability_r7_t, MultislotCapabilityReductionForDL_DualCarrier, 1),
782 M_UINT (DownlinkDualCarrierCapability_r7_t, DL_DualCarrierForDTM, 3),
783CSN_DESCR_END (DownlinkDualCarrierCapability_r7_t)
784
785static const
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300786CSN_DESCR_BEGIN (Multislot_capability_t)
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400787 M_NEXT_EXIST_OR_NULL(Multislot_capability_t, Exist_HSCSD_multislot_class, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300788 M_UINT (Multislot_capability_t, HSCSD_multislot_class, 5),
789
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400790 M_NEXT_EXIST_OR_NULL(Multislot_capability_t, Exist_GPRS_multislot_class, 2),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300791 M_UINT (Multislot_capability_t, GPRS_multislot_class, 5),
792 M_UINT (Multislot_capability_t, GPRS_Extended_Dynamic_Allocation_Capability, 1),
793
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400794 M_NEXT_EXIST_OR_NULL(Multislot_capability_t, Exist_SM, 2),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300795 M_UINT (Multislot_capability_t, SMS_VALUE, 4),
796 M_UINT (Multislot_capability_t, SM_VALUE, 4),
797
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400798 M_NEXT_EXIST_OR_NULL(Multislot_capability_t, Exist_ECSD_multislot_class, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300799 M_UINT (Multislot_capability_t, ECSD_multislot_class, 5),
800
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400801 M_NEXT_EXIST_OR_NULL(Multislot_capability_t, Exist_EGPRS_multislot_class, 2),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300802 M_UINT (Multislot_capability_t, EGPRS_multislot_class, 5),
803 M_UINT (Multislot_capability_t, EGPRS_Extended_Dynamic_Allocation_Capability, 1),
804
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400805 M_NEXT_EXIST_OR_NULL(Multislot_capability_t, Exist_DTM_GPRS_multislot_class, 3),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300806 M_UINT (Multislot_capability_t, DTM_GPRS_multislot_class, 2),
807 M_UINT (Multislot_capability_t, Single_Slot_DTM, 1),
808 M_TYPE (Multislot_capability_t, DTM_EGPRS_Params, DTM_EGPRS_t),
809CSN_DESCR_END (Multislot_capability_t)
810
811static const
812CSN_DESCR_BEGIN (Content_t)
813 M_UINT (Content_t, RF_Power_Capability, 3),
814
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400815 M_NEXT_EXIST_OR_NULL(Content_t, Exist_A5_bits, 1),
816 M_UINT_OR_NULL (Content_t, A5_bits, 7),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300817
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400818 M_UINT_OR_NULL (Content_t, ES_IND, 1),
819 M_UINT_OR_NULL (Content_t, PS, 1),
820 M_UINT_OR_NULL (Content_t, VGCS, 1),
821 M_UINT_OR_NULL (Content_t, VBS, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300822
823 M_NEXT_EXIST_OR_NULL(Content_t, Exist_Multislot_capability, 1),
824 M_TYPE (Content_t, Multislot_capability, Multislot_capability_t),
825
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400826 M_NEXT_EXIST_OR_NULL(Content_t, Exist_Eight_PSK_Power_Capability, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300827 M_UINT (Content_t, Eight_PSK_Power_Capability, 2),
828
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400829 M_UINT_OR_NULL (Content_t, COMPACT_Interference_Measurement_Capability, 1),
830 M_UINT_OR_NULL (Content_t, Revision_Level_Indicator, 1),
831 M_UINT_OR_NULL (Content_t, UMTS_FDD_Radio_Access_Technology_Capability, 1),
832 M_UINT_OR_NULL (Content_t, UMTS_384_TDD_Radio_Access_Technology_Capability, 1),
833 M_UINT_OR_NULL (Content_t, CDMA2000_Radio_Access_Technology_Capability, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300834
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400835 M_UINT_OR_NULL (Content_t, UMTS_128_TDD_Radio_Access_Technology_Capability, 1),
836 M_UINT_OR_NULL (Content_t, GERAN_Feature_Package_1, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300837
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400838 M_NEXT_EXIST_OR_NULL(Content_t, Exist_Extended_DTM_multislot_class, 2),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300839 M_UINT (Content_t, Extended_DTM_GPRS_multislot_class, 2),
840 M_UINT (Content_t, Extended_DTM_EGPRS_multislot_class, 2),
841
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400842 M_UINT_OR_NULL (Content_t, Modulation_based_multislot_class_support, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300843
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400844 M_NEXT_EXIST_OR_NULL(Content_t, Exist_HighMultislotCapability, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300845 M_UINT (Content_t, HighMultislotCapability, 2),
846
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400847 M_NEXT_EXIST_OR_NULL(Content_t, Exist_GERAN_lu_ModeCapability, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300848 M_UINT (Content_t, GERAN_lu_ModeCapability, 4),
849
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400850 M_UINT_OR_NULL (Content_t, GMSK_MultislotPowerProfile, 2),
851 M_UINT_OR_NULL (Content_t, EightPSK_MultislotProfile, 2),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300852
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400853 M_UINT_OR_NULL (Content_t, MultipleTBF_Capability, 1),
854 M_UINT_OR_NULL (Content_t, DownlinkAdvancedReceiverPerformance, 2),
855 M_UINT_OR_NULL (Content_t, ExtendedRLC_MAC_ControlMessageSegmentionsCapability, 1),
856 M_UINT_OR_NULL (Content_t, DTM_EnhancementsCapability, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300857
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400858 M_NEXT_EXIST_OR_NULL(Content_t, Exist_DTM_GPRS_HighMultislotClass, 2),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300859 M_UINT (Content_t, DTM_GPRS_HighMultislotClass, 3),
860 M_TYPE (Content_t, DTM_EGPRS_HighMultislotClass, DTM_EGPRS_HighMultislotClass_t),
861
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400862 M_UINT_OR_NULL (Content_t, PS_HandoverCapability, 1),
Vincent Helfre1145fd22020-01-28 18:27:49 +0100863
864 /* additions in release 7 */
865 M_UINT_OR_NULL (Content_t, DTM_Handover_Capability, 1),
866 M_NEXT_EXIST_OR_NULL(Content_t, Exist_DownlinkDualCarrierCapability_r7, 1),
867 M_TYPE (Content_t, DownlinkDualCarrierCapability_r7, DownlinkDualCarrierCapability_r7_t),
868
869 M_UINT_OR_NULL (Content_t, FlexibleTimeslotAssignment, 1),
870 M_UINT_OR_NULL (Content_t, GAN_PS_HandoverCapability, 1),
871 M_UINT_OR_NULL (Content_t, RLC_Non_persistentMode, 1),
872 M_UINT_OR_NULL (Content_t, ReducedLatencyCapability, 1),
873 M_UINT_OR_NULL (Content_t, UplinkEGPRS2, 2),
874 M_UINT_OR_NULL (Content_t, DownlinkEGPRS2, 2),
875
876 /* additions in release 8 */
877 M_UINT_OR_NULL (Content_t, EUTRA_FDD_Support, 1),
878 M_UINT_OR_NULL (Content_t, EUTRA_TDD_Support, 1),
879 M_UINT_OR_NULL (Content_t, GERAN_To_EUTRAN_supportInGERAN_PTM, 2),
880 M_UINT_OR_NULL (Content_t, PriorityBasedReselectionSupport, 1),
881
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300882CSN_DESCR_END (Content_t)
883
Vadim Yanitskiy39a65052020-01-25 01:24:59 +0700884gint16 Content_Dissector(csnStream_t* ar, bitvec *vector, unsigned *readIndex, void* data)
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300885{
886 if (ar->direction == 0)
887 {
888 return csnStreamEncoder(ar, CSNDESCR(Content_t), vector, readIndex, data);
889 }
890 else
891 {
892 return csnStreamDecoder(ar, CSNDESCR(Content_t), vector, readIndex, data);
893 }
894}
895
896static const
897CSN_DESCR_BEGIN (Additional_access_technologies_struct_t)
898 M_UINT (Additional_access_technologies_struct_t, Access_Technology_Type, 4),
899 M_UINT (Additional_access_technologies_struct_t, GMSK_Power_class, 3),
900 M_UINT (Additional_access_technologies_struct_t, Eight_PSK_Power_class, 2),
901CSN_DESCR_END (Additional_access_technologies_struct_t)
902
903static const
904CSN_DESCR_BEGIN (Additional_access_technologies_t)
Pau Espin Pedrol81b40cb2020-03-23 15:23:51 +0100905 M_REC_TARRAY (Additional_access_technologies_t, Additional_access_technologies, Additional_access_technologies_struct_t, Count_additional_access_technologies),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300906CSN_DESCR_END (Additional_access_technologies_t)
907
Vadim Yanitskiy39a65052020-01-25 01:24:59 +0700908gint16 Additional_access_technologies_Dissector(csnStream_t* ar, bitvec* vector, unsigned *readIndex, void* data)
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300909{
910 if (ar->direction == 0)
911 {
912 return csnStreamEncoder(ar, CSNDESCR(Additional_access_technologies_t), vector, readIndex, data);
913 }
914 else
915 {
916 return csnStreamDecoder(ar, CSNDESCR(Additional_access_technologies_t), vector, readIndex, data);
917 }
918}
919
920static const
921CSN_ChoiceElement_t MS_RA_capability_value_Choice[] =
922{
Pau Espin Pedrol7cce8252020-01-24 16:41:14 +0100923 {4, AccTech_GSMP, 0, M_SERIALIZE (MS_RA_capability_value_t, u.Content, 7, Content_Dissector)}, /* Long Form */
924 {4, AccTech_GSME, 0, M_SERIALIZE (MS_RA_capability_value_t, u.Content, 7, Content_Dissector)}, /* Long Form */
Vincent Helfre1145fd22020-01-28 18:27:49 +0100925 {4, AccTech_GSMR, 0, M_SERIALIZE (MS_RA_capability_value_t, u.Content, 7, Content_Dissector)}, /* Long Form */
Pau Espin Pedrol7cce8252020-01-24 16:41:14 +0100926 {4, AccTech_GSM1800, 0, M_SERIALIZE (MS_RA_capability_value_t, u.Content, 7, Content_Dissector)}, /* Long Form */
927 {4, AccTech_GSM1900, 0, M_SERIALIZE (MS_RA_capability_value_t, u.Content, 7, Content_Dissector)}, /* Long Form */
Vincent Helfre1145fd22020-01-28 18:27:49 +0100928 {4, AccTech_GSM450, 0, M_SERIALIZE (MS_RA_capability_value_t, u.Content, 7, Content_Dissector)}, /* Long Form */
929 {4, AccTech_GSM480, 0, M_SERIALIZE (MS_RA_capability_value_t, u.Content, 7, Content_Dissector)}, /* Long Form */
Pau Espin Pedrol7cce8252020-01-24 16:41:14 +0100930 {4, AccTech_GSM850, 0, M_SERIALIZE (MS_RA_capability_value_t, u.Content, 7, Content_Dissector)}, /* Long Form */
Vincent Helfre1145fd22020-01-28 18:27:49 +0100931 {4, AccTech_GSM750, 0, M_SERIALIZE (MS_RA_capability_value_t, u.Content, 7, Content_Dissector)}, /* Long Form */
932 {4, AccTech_GSMT830, 0, M_SERIALIZE (MS_RA_capability_value_t, u.Content, 7, Content_Dissector)}, /* Long Form */
933 {4, AccTech_GSMT410, 0, M_SERIALIZE (MS_RA_capability_value_t, u.Content, 7, Content_Dissector)}, /* Long Form */
934 {4, AccTech_GSMT900, 0, M_SERIALIZE (MS_RA_capability_value_t, u.Content, 7, Content_Dissector)}, /* Long Form */
935 {4, AccTech_GSM710, 0, M_SERIALIZE (MS_RA_capability_value_t, u.Content, 7, Content_Dissector)}, /* Long Form */
936 {4, AccTech_GSMT810, 0, M_SERIALIZE (MS_RA_capability_value_t, u.Content, 7, Content_Dissector)}, /* Long Form */
Pau Espin Pedrol7cce8252020-01-24 16:41:14 +0100937 {4, AccTech_GSMOther, 0, M_SERIALIZE (MS_RA_capability_value_t, u.Additional_access_technologies, 7, Additional_access_technologies_Dissector)}, /* Short Form */
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300938};
939
940static const
941CSN_DESCR_BEGIN(MS_RA_capability_value_t)
942 M_CHOICE (MS_RA_capability_value_t, IndexOfAccTech, MS_RA_capability_value_Choice, ElementsOf(MS_RA_capability_value_Choice)),
943CSN_DESCR_END (MS_RA_capability_value_t)
944
945static const
946CSN_DESCR_BEGIN (MS_Radio_Access_capability_t)
947/*Will be done in the main routines:*/
948/*M_UINT (MS_Radio_Access_capability_t, IEI, 8),*/
949/*M_UINT (MS_Radio_Access_capability_t, Length, 8),*/
950
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400951 M_REC_TARRAY_1(MS_Radio_Access_capability_t, MS_RA_capability_value, MS_RA_capability_value_t, Count_MS_RA_capability_value),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300952CSN_DESCR_END (MS_Radio_Access_capability_t)
953
954/*< MS Classmark 3 IE >*/
955static const
956CSN_DESCR_BEGIN(ARC_t)
957 M_UINT (ARC_t, A5_Bits, 4),
958 M_UINT (ARC_t, Arc2_Spare, 4),
959 M_UINT (ARC_t, Arc1, 4),
960CSN_DESCR_END (ARC_t)
961
962static const
963CSN_ChoiceElement_t MultibandChoice[] =
964{
Pau Espin Pedrol7cce8252020-01-24 16:41:14 +0100965 {3, 0x00, 0, M_UINT(Multiband_t, u.A5_Bits, 4)},
966 {3, 0x05, 0, M_TYPE(Multiband_t, u.ARC, ARC_t)},
967 {3, 0x06, 0, M_TYPE(Multiband_t, u.ARC, ARC_t)},
968 {3, 0x01, 0, M_TYPE(Multiband_t, u.ARC, ARC_t)},
969 {3, 0x02, 0, M_TYPE(Multiband_t, u.ARC, ARC_t)},
970 {3, 0x04, 0, M_TYPE(Multiband_t, u.ARC, ARC_t)},
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300971};
972
973static const
974CSN_DESCR_BEGIN(Multiband_t)
975 M_CHOICE (Multiband_t, Multiband, MultibandChoice, ElementsOf(MultibandChoice)),
976CSN_DESCR_END (Multiband_t)
977
978static const
979CSN_DESCR_BEGIN(EDGE_RF_Pwr_t)
980 M_NEXT_EXIST (EDGE_RF_Pwr_t, ExistEDGE_RF_PwrCap1, 1),
981 M_UINT (EDGE_RF_Pwr_t, EDGE_RF_PwrCap1, 2),
982
983 M_NEXT_EXIST (EDGE_RF_Pwr_t, ExistEDGE_RF_PwrCap2, 1),
984 M_UINT (EDGE_RF_Pwr_t, EDGE_RF_PwrCap2, 2),
985CSN_DESCR_END (EDGE_RF_Pwr_t)
986
987static const
988CSN_DESCR_BEGIN(MS_Class3_Unpacked_t)
989 M_UINT (MS_Class3_Unpacked_t, Spare1, 1),
990 M_TYPE (MS_Class3_Unpacked_t, Multiband, Multiband_t),
991
992 M_NEXT_EXIST (MS_Class3_Unpacked_t, Exist_R_Support, 1),
993 M_UINT (MS_Class3_Unpacked_t, R_GSM_Arc, 3),
994
995 M_NEXT_EXIST (MS_Class3_Unpacked_t, Exist_MultiSlotCapability, 1),
996 M_UINT (MS_Class3_Unpacked_t, MultiSlotClass, 5),
997
998 M_UINT (MS_Class3_Unpacked_t, UCS2, 1),
999 M_UINT (MS_Class3_Unpacked_t, ExtendedMeasurementCapability, 1),
1000
1001 M_NEXT_EXIST (MS_Class3_Unpacked_t, Exist_MS_MeasurementCapability, 2),
1002 M_UINT (MS_Class3_Unpacked_t, SMS_VALUE, 4),
1003 M_UINT (MS_Class3_Unpacked_t, SM_VALUE, 4),
1004
1005 M_NEXT_EXIST (MS_Class3_Unpacked_t, Exist_MS_PositioningMethodCapability, 1),
1006 M_UINT (MS_Class3_Unpacked_t, MS_PositioningMethod, 5),
1007
1008 M_NEXT_EXIST (MS_Class3_Unpacked_t, Exist_EDGE_MultiSlotCapability, 1),
1009 M_UINT (MS_Class3_Unpacked_t, EDGE_MultiSlotClass, 5),
1010
1011 M_NEXT_EXIST (MS_Class3_Unpacked_t, Exist_EDGE_Struct, 2),
1012 M_UINT (MS_Class3_Unpacked_t, ModulationCapability, 1),
1013 M_TYPE (MS_Class3_Unpacked_t, EDGE_RF_PwrCaps, EDGE_RF_Pwr_t),
1014
1015 M_NEXT_EXIST (MS_Class3_Unpacked_t, Exist_GSM400_Info, 2),
1016 M_UINT (MS_Class3_Unpacked_t, GSM400_Bands, 2),
1017 M_UINT (MS_Class3_Unpacked_t, GSM400_Arc, 4),
1018
1019 M_NEXT_EXIST (MS_Class3_Unpacked_t, Exist_GSM850_Arc, 1),
1020 M_UINT (MS_Class3_Unpacked_t, GSM850_Arc, 4),
1021
1022 M_NEXT_EXIST (MS_Class3_Unpacked_t, Exist_PCS1900_Arc, 1),
1023 M_UINT (MS_Class3_Unpacked_t, PCS1900_Arc, 4),
1024
1025 M_UINT (MS_Class3_Unpacked_t, UMTS_FDD_Radio_Access_Technology_Capability, 1),
1026 M_UINT (MS_Class3_Unpacked_t, UMTS_384_TDD_Radio_Access_Technology_Capability, 1),
1027 M_UINT (MS_Class3_Unpacked_t, CDMA2000_Radio_Access_Technology_Capability, 1),
1028
1029 M_NEXT_EXIST (MS_Class3_Unpacked_t, Exist_DTM_GPRS_multislot_class, 3),
1030 M_UINT (MS_Class3_Unpacked_t, DTM_GPRS_multislot_class, 2),
1031 M_UINT (MS_Class3_Unpacked_t, Single_Slot_DTM, 1),
1032 M_TYPE (MS_Class3_Unpacked_t, DTM_EGPRS_Params, DTM_EGPRS_t),
1033
1034 M_NEXT_EXIST (MS_Class3_Unpacked_t, Exist_SingleBandSupport, 1),
1035 M_UINT (MS_Class3_Unpacked_t, GSM_Band, 4),
1036
1037 M_NEXT_EXIST (MS_Class3_Unpacked_t, Exist_GSM_700_Associated_Radio_Capability, 1),
1038 M_UINT (MS_Class3_Unpacked_t, GSM_700_Associated_Radio_Capability, 4),
1039
1040 M_UINT (MS_Class3_Unpacked_t, UMTS_128_TDD_Radio_Access_Technology_Capability, 1),
1041 M_UINT (MS_Class3_Unpacked_t, GERAN_Feature_Package_1, 1),
1042
1043 M_NEXT_EXIST (MS_Class3_Unpacked_t, Exist_Extended_DTM_multislot_class, 2),
1044 M_UINT (MS_Class3_Unpacked_t, Extended_DTM_GPRS_multislot_class, 2),
1045 M_UINT (MS_Class3_Unpacked_t, Extended_DTM_EGPRS_multislot_class, 2),
1046
1047 M_NEXT_EXIST (MS_Class3_Unpacked_t, Exist_HighMultislotCapability, 1),
1048 M_UINT (MS_Class3_Unpacked_t, HighMultislotCapability, 2),
1049
1050 M_NEXT_EXIST (MS_Class3_Unpacked_t, Exist_GERAN_lu_ModeCapability, 1),
1051 M_UINT (MS_Class3_Unpacked_t, GERAN_lu_ModeCapability, 4),
1052
1053 M_UINT (MS_Class3_Unpacked_t, GERAN_FeaturePackage_2, 1),
1054
1055 M_UINT (MS_Class3_Unpacked_t, GMSK_MultislotPowerProfile, 2),
1056 M_UINT (MS_Class3_Unpacked_t, EightPSK_MultislotProfile, 2),
1057
1058 M_NEXT_EXIST (MS_Class3_Unpacked_t, Exist_TGSM_400_Bands, 2),
1059 M_UINT (MS_Class3_Unpacked_t, TGSM_400_BandsSupported, 2),
1060 M_UINT (MS_Class3_Unpacked_t, TGSM_400_AssociatedRadioCapability, 4),
1061
1062 M_NEXT_EXIST (MS_Class3_Unpacked_t, Exist_TGSM_900_AssociatedRadioCapability, 1),
1063 M_UINT (MS_Class3_Unpacked_t, TGSM_900_AssociatedRadioCapability, 4),
1064
1065 M_UINT (MS_Class3_Unpacked_t, DownlinkAdvancedReceiverPerformance, 2),
1066 M_UINT (MS_Class3_Unpacked_t, DTM_EnhancementsCapability, 1),
1067
1068 M_NEXT_EXIST (MS_Class3_Unpacked_t, Exist_DTM_GPRS_HighMultislotClass, 3),
1069 M_UINT (MS_Class3_Unpacked_t, DTM_GPRS_HighMultislotClass, 3),
1070 M_UINT (MS_Class3_Unpacked_t, OffsetRequired, 1),
1071 M_TYPE (MS_Class3_Unpacked_t, DTM_EGPRS_HighMultislotClass, DTM_EGPRS_HighMultislotClass_t),
1072
1073 M_UINT (MS_Class3_Unpacked_t, RepeatedSACCH_Capability, 1),
1074 M_UINT (MS_Class3_Unpacked_t, Spare2, 1),
1075CSN_DESCR_END (MS_Class3_Unpacked_t)
1076
1077static const
1078CSN_DESCR_BEGIN(Channel_Request_Description_t)
1079 M_UINT (Channel_Request_Description_t, PEAK_THROUGHPUT_CLASS, 4),
1080 M_UINT (Channel_Request_Description_t, RADIO_PRIORITY, 2),
Anders Broman8ea3cbe2020-01-28 17:36:33 +01001081 M_UINT (Channel_Request_Description_t, RLC_MODE, 1),
1082 M_UINT (Channel_Request_Description_t, LLC_PDU_TYPE, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001083 M_UINT (Channel_Request_Description_t, RLC_OCTET_COUNT, 16),
1084CSN_DESCR_END (Channel_Request_Description_t)
1085
1086/* < Packet Resource Request message content > */
1087static const
1088CSN_ChoiceElement_t PacketResourceRequestID[] =
1089{
Pau Espin Pedrol7cce8252020-01-24 16:41:14 +01001090 {1, 0, 0, M_TYPE(PacketResourceRequestID_t, u.Global_TFI, Global_TFI_t)},
1091 {1, 0x01, 0, M_UINT(PacketResourceRequestID_t, u.TLLI, 32)},
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001092};
1093
1094static const
1095CSN_DESCR_BEGIN(PacketResourceRequestID_t)
1096 M_CHOICE (PacketResourceRequestID_t, UnionType, PacketResourceRequestID, ElementsOf(PacketResourceRequestID)),
1097CSN_DESCR_END (PacketResourceRequestID_t)
1098
1099static const
1100CSN_DESCR_BEGIN(BEP_MeasurementReport_t)
1101 M_NEXT_EXIST (BEP_MeasurementReport_t, Exist, 3),
1102 M_UNION (BEP_MeasurementReport_t, 2),
1103 M_UINT (BEP_MeasurementReport_t, u.MEAN_BEP_GMSK, 4),
1104 M_UINT (BEP_MeasurementReport_t, u.MEAN_BEP_8PSK, 4),
1105CSN_DESCR_END (BEP_MeasurementReport_t)
1106
1107static const
1108CSN_DESCR_BEGIN(InterferenceMeasurementReport_t)
1109 M_NEXT_EXIST (InterferenceMeasurementReport_t, Exist, 1),
1110 M_UINT (InterferenceMeasurementReport_t, I_LEVEL, 4),
1111CSN_DESCR_END (InterferenceMeasurementReport_t)
1112
1113static const
1114CSN_DESCR_BEGIN(EGPRS_TimeslotLinkQualityMeasurements_t)
1115 M_NEXT_EXIST (EGPRS_TimeslotLinkQualityMeasurements_t, Exist_BEP_MEASUREMENTS, 1),
1116 M_TYPE_ARRAY (EGPRS_TimeslotLinkQualityMeasurements_t, BEP_MEASUREMENTS, BEP_MeasurementReport_t, 8),
1117
1118 M_NEXT_EXIST (EGPRS_TimeslotLinkQualityMeasurements_t, Exist_INTERFERENCE_MEASUREMENTS, 1),
1119 M_TYPE_ARRAY (EGPRS_TimeslotLinkQualityMeasurements_t, INTERFERENCE_MEASUREMENTS, InterferenceMeasurementReport_t, 8),
1120CSN_DESCR_END (EGPRS_TimeslotLinkQualityMeasurements_t)
1121
1122static const
1123CSN_DESCR_BEGIN(EGPRS_BEP_LinkQualityMeasurements_t)
1124 M_NEXT_EXIST (EGPRS_BEP_LinkQualityMeasurements_t, Exist_MEAN_CV_BEP_GMSK, 2),
1125 M_UINT (EGPRS_BEP_LinkQualityMeasurements_t, MEAN_BEP_GMSK, 5),
1126 M_UINT (EGPRS_BEP_LinkQualityMeasurements_t, CV_BEP_GMSK, 3),
1127
1128 M_NEXT_EXIST (EGPRS_BEP_LinkQualityMeasurements_t, Exist_MEAN_CV_BEP_8PSK, 2),
1129 M_UINT (EGPRS_BEP_LinkQualityMeasurements_t, MEAN_BEP_8PSK, 5),
1130 M_UINT (EGPRS_BEP_LinkQualityMeasurements_t, CV_BEP_8PSK, 3),
1131CSN_DESCR_END (EGPRS_BEP_LinkQualityMeasurements_t)
1132
1133static const
AndersBroman2d075be2020-01-28 19:01:50 +01001134CSN_DESCR_BEGIN(IU_Mode_Channel_Request_Desk_t)
1135
1136 M_UINT (IU_Mode_Channel_Request_Desk_t, RB_ID, 5),
1137 M_UINT (IU_Mode_Channel_Request_Desk_t, RADIO_PRIORITY, 2),
1138
1139 M_NEXT_EXIST (IU_Mode_Channel_Request_Desk_t, Exist_RLC_BLOCK_COUNT, 1),
1140 M_UINT (IU_Mode_Channel_Request_Desk_t, RLC_BLOCK_COUNT, 8),
1141
Pascal Quantinfa5f91c2020-01-28 19:11:37 +01001142 /* Don't use M_REC_TARRAY as we don't support multiple TBFs
1143 M_NEXT_EXIST (IU_Mode_Channel_Request_Desk_t, Exist_Iu_Mode_ChRequestDesk, 1),
1144 M_TYPE (IU_Mode_Channel_Request_Desk1, IU_Mode_Channel_Request_Desk_t),*/
1145 M_UINT (IU_Mode_Channel_Request_Desk_t, Exist_Iu_Mode_ChRequestDesk, 1),
AndersBroman2d075be2020-01-28 19:01:50 +01001146
1147CSN_DESCR_END (IU_Mode_Channel_Request_Desk_t)
1148
1149static const
1150CSN_DESCR_BEGIN(IU_Mode_Channel_Request_Desk_RNTI_t)
1151
1152 M_NEXT_EXIST (IU_Mode_Channel_Request_Desk_RNTI_t, Exist_G_RNTI_Extension, 1),
1153 M_UINT (IU_Mode_Channel_Request_Desk_RNTI_t, G_RNTI_Extension, 4),
1154
1155 M_TYPE (IU_Mode_Channel_Request_Desk_RNTI_t, IU_Mode_Channel_Request_Desk, IU_Mode_Channel_Request_Desk_t),
1156
1157CSN_DESCR_END (IU_Mode_Channel_Request_Desk_RNTI_t)
1158
1159
1160static const
1161CSN_DESCR_BEGIN(Ext_Channel_Request_desc_t)
1162
1163 M_UINT (Ext_Channel_Request_desc_t, PFI, 7),
1164 M_UINT (Ext_Channel_Request_desc_t, RADIO_PRIORITY, 2),
1165 M_UINT (Ext_Channel_Request_desc_t, RLC_Mode, 1),
1166
1167 M_NEXT_EXIST (Ext_Channel_Request_desc_t, Exist_LCC_PDU, 1),
1168 M_UINT (Ext_Channel_Request_desc_t, LCC_PDU, 1),
1169
Pascal Quantinfb656822020-01-28 19:13:20 +01001170 /* Don't use M_REC_TARRAY as we don't support multiple TBFs
1171 M_NEXT_EXIST (Ext_Channel_Request_desc_t, Exist_Ext_Channel_Request_desc, 1),
1172 M_TYPE (Ext_Channel_Request_desc_t, Ext_Channel_Request_desc, Ext_Channel_Request_desc_t),*/
1173 M_UINT (Ext_Channel_Request_desc_t, Exist_Ext_Channel_Request_desc, 1),
AndersBroman2d075be2020-01-28 19:01:50 +01001174
1175CSN_DESCR_END (Ext_Channel_Request_desc_t)
1176
1177static const
1178CSN_DESCR_BEGIN(EGPRS_BEP_LinkQualityMeasurements_type2_t)
1179
1180 M_NEXT_EXIST (EGPRS_BEP_LinkQualityMeasurements_type2_t, Exist_GMSK_MEAN_BEP, 1),
1181 M_UINT (EGPRS_BEP_LinkQualityMeasurements_type2_t, GMSK_MEAN_BEP, 5),
1182 M_UINT (EGPRS_BEP_LinkQualityMeasurements_type2_t, GMSK_CV_BEP, 3),
1183
1184 M_NEXT_EXIST (EGPRS_BEP_LinkQualityMeasurements_type2_t, Exist_8PSK_MEAN_BEP, 1),
1185 M_UINT (EGPRS_BEP_LinkQualityMeasurements_type2_t, p8PSK_MEAN_BEP, 5),
1186 M_UINT (EGPRS_BEP_LinkQualityMeasurements_type2_t, p8PSK_CV_BEP, 3),
1187
1188 M_NEXT_EXIST (EGPRS_BEP_LinkQualityMeasurements_type2_t, Exist_QPSK_MEAN_BEP, 1),
1189 M_UINT (EGPRS_BEP_LinkQualityMeasurements_type2_t, QPSK_MEAN_BEP, 5),
1190 M_UINT (EGPRS_BEP_LinkQualityMeasurements_type2_t, QPSK_CV_BEP, 3),
1191
1192 M_NEXT_EXIST (EGPRS_BEP_LinkQualityMeasurements_type2_t, Exist_16QAM_NSR_MEAN_BEP, 1),
1193 M_UINT (EGPRS_BEP_LinkQualityMeasurements_type2_t, p16QAM_NSR_MEAN_BEP, 5),
1194 M_UINT (EGPRS_BEP_LinkQualityMeasurements_type2_t, p16QAM_NSR_CV_BEP, 3),
1195
1196 M_NEXT_EXIST (EGPRS_BEP_LinkQualityMeasurements_type2_t, Exist_32QAM_NSR_MEAN_BEP, 1),
1197 M_UINT (EGPRS_BEP_LinkQualityMeasurements_type2_t, p32QAM_NSR_MEAN_BEP, 5),
1198 M_UINT (EGPRS_BEP_LinkQualityMeasurements_type2_t, p32QAM_NSR_CV_BEP, 3),
1199
1200 M_NEXT_EXIST (EGPRS_BEP_LinkQualityMeasurements_type2_t, Exist_16QAM_HSR_MEAN_BEP, 1),
1201 M_UINT (EGPRS_BEP_LinkQualityMeasurements_type2_t, p16QAM_HSR_MEAN_BEP, 5),
1202 M_UINT (EGPRS_BEP_LinkQualityMeasurements_type2_t, p16QAM_HSR_CV_BEP, 3),
1203
1204 M_NEXT_EXIST (EGPRS_BEP_LinkQualityMeasurements_type2_t, Exist_32QAM_HSR_MEAN_BEP, 1),
1205 M_UINT (EGPRS_BEP_LinkQualityMeasurements_type2_t, p32QAM_HSR_MEAN_BEP, 5),
1206 M_UINT (EGPRS_BEP_LinkQualityMeasurements_type2_t, p32QAM_HSR_CV_BEP, 3),
1207
1208CSN_DESCR_END (EGPRS_BEP_LinkQualityMeasurements_type2_t)
1209
1210static const
1211CSN_DESCR_BEGIN(BEP_MeasurementReport_type2_t)
1212 M_NEXT_EXIST (BEP_MeasurementReport_type2_t, Exist, 1),
1213 M_UINT (BEP_MeasurementReport_type2_t, REPORTED_MODULATION, 2),
1214 M_UINT (BEP_MeasurementReport_type2_t, MEAN_BEP_TN, 4),
1215CSN_DESCR_END (BEP_MeasurementReport_type2_t)
1216
1217static const
1218CSN_DESCR_BEGIN(InterferenceMeasurementReport_type2_t)
1219 M_NEXT_EXIST (InterferenceMeasurementReport_type2_t, Exist, 1),
1220 M_UINT (InterferenceMeasurementReport_type2_t, I_LEVEL, 4),
1221CSN_DESCR_END (InterferenceMeasurementReport_type2_t)
1222static const
1223CSN_DESCR_BEGIN(EGPRS_TimeslotLinkQualityMeasurements_type2_t)
1224 M_NEXT_EXIST (EGPRS_TimeslotLinkQualityMeasurements_type2_t, Exist_BEP_MEASUREMENTS, 1),
1225 M_TYPE_ARRAY (EGPRS_TimeslotLinkQualityMeasurements_type2_t, BEP_MEASUREMENTS, BEP_MeasurementReport_type2_t, 8),
1226
1227 M_NEXT_EXIST (EGPRS_TimeslotLinkQualityMeasurements_type2_t, Exist_INTERFERENCE_MEASUREMENTS, 1),
1228 M_TYPE_ARRAY (EGPRS_TimeslotLinkQualityMeasurements_type2_t, INTERFERENCE_MEASUREMENTS, InterferenceMeasurementReport_type2_t, 8),
1229CSN_DESCR_END (EGPRS_TimeslotLinkQualityMeasurements_type2_t)
1230
1231static const
1232CSN_DESCR_BEGIN(PRR_AdditionsR12_t)
1233
1234 M_NEXT_EXIST (PRR_AdditionsR12_t, Exist_Downlink_eTFI, 1),
1235 M_UINT (PRR_AdditionsR12_t, DOWNLINK_ETFI, 3),
1236
1237CSN_DESCR_END (PRR_AdditionsR12_t)
1238
1239static const
1240CSN_DESCR_BEGIN(PRR_AdditionsR10_t)
1241 M_UINT (PRR_AdditionsR10_t, LOW_ACCESS_PRIORITY_SIGNALLING, 1),
1242
1243 M_NEXT_EXIST_OR_NULL(PRR_AdditionsR10_t, Exist_AdditionsR12, 1),
1244 M_TYPE (PRR_AdditionsR10_t, AdditionsR12, PRR_AdditionsR12_t),
1245
1246CSN_DESCR_END (PRR_AdditionsR10_t)
1247
1248static const
1249CSN_DESCR_BEGIN(PRR_AdditionsR7_t)
1250 M_UINT (PRR_AdditionsR7_t, EARLY_TBF_ESTABLISHMENT, 1),
1251
1252 M_NEXT_EXIST (PRR_AdditionsR7_t, Exist_EGPRS_BEP_LinkQualityMeasurements_type2, 1),
1253 M_TYPE (PRR_AdditionsR7_t, EGPRS_BEP_LinkQualityMeasurements_type2, EGPRS_BEP_LinkQualityMeasurements_type2_t),
1254
1255 M_NEXT_EXIST (PRR_AdditionsR7_t, Exist_EGPRS_TimeslotLinkQualityMeasurements_type2, 1),
1256 M_TYPE (PRR_AdditionsR7_t, EGPRS_TimeslotLinkQualityMeasurements_type2, EGPRS_TimeslotLinkQualityMeasurements_type2_t),
1257
1258 M_NEXT_EXIST_OR_NULL(PRR_AdditionsR7_t, Exist_AdditionsR10, 1),
1259 M_TYPE (PRR_AdditionsR7_t, AdditionsR10, PRR_AdditionsR10_t),
1260
1261CSN_DESCR_END (PRR_AdditionsR7_t)
1262
1263static const
1264CSN_DESCR_BEGIN(PRR_AdditionsR6_t)
1265 M_NEXT_EXIST (PRR_AdditionsR6_t, Exist_Ext_Channel_Request_desc, 1),
1266 M_TYPE (PRR_AdditionsR6_t, Ext_Channel_Request_desc, Ext_Channel_Request_desc_t),
1267
1268 M_NEXT_EXIST_OR_NULL(PRR_AdditionsR6_t, Exist_AdditionsR7, 1),
1269 M_TYPE (PRR_AdditionsR6_t, AdditionsR7, PRR_AdditionsR7_t),
1270
1271CSN_DESCR_END (PRR_AdditionsR6_t)
1272
1273static const
1274CSN_DESCR_BEGIN(PRR_AdditionsR5_t)
1275 M_NEXT_EXIST (PRR_AdditionsR5_t, Exist_Iu_Mode_ChRequestDesk, 1),
1276 M_TYPE (PRR_AdditionsR5_t, IU_Mode_Channel_Request_Desk_RNTI, IU_Mode_Channel_Request_Desk_RNTI_t),
1277
1278 M_NEXT_EXIST (PRR_AdditionsR5_t, Exist_HFN_LSB, 1),
1279 M_UINT (PRR_AdditionsR5_t, HFN_LSb, 7),
1280
1281 M_NEXT_EXIST_OR_NULL(PRR_AdditionsR5_t, Exist_AdditionsR6, 1),
1282 M_TYPE (PRR_AdditionsR5_t, AdditionsR6, PRR_AdditionsR6_t),
1283CSN_DESCR_END (PRR_AdditionsR5_t)
1284
1285static const
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001286CSN_DESCR_BEGIN(PRR_AdditionsR99_t)
1287 M_NEXT_EXIST (PRR_AdditionsR99_t, Exist_EGPRS_BEP_LinkQualityMeasurements, 1),
1288 M_TYPE (PRR_AdditionsR99_t, EGPRS_BEP_LinkQualityMeasurements, EGPRS_BEP_LinkQualityMeasurements_t),
1289
1290 M_NEXT_EXIST (PRR_AdditionsR99_t, Exist_EGPRS_TimeslotLinkQualityMeasurements, 1),
1291 M_TYPE (PRR_AdditionsR99_t, EGPRS_TimeslotLinkQualityMeasurements, EGPRS_TimeslotLinkQualityMeasurements_t),
1292
1293 M_NEXT_EXIST (PRR_AdditionsR99_t, Exist_PFI, 1),
1294 M_UINT (PRR_AdditionsR99_t, PFI, 7),
1295
1296 M_UINT (PRR_AdditionsR99_t, MS_RAC_AdditionalInformationAvailable, 1),
1297 M_UINT (PRR_AdditionsR99_t, RetransmissionOfPRR, 1),
AndersBroman2d075be2020-01-28 19:01:50 +01001298
1299 M_NEXT_EXIST_OR_NULL(PRR_AdditionsR99_t, Exist_AdditionsR5, 1),
1300 M_TYPE (PRR_AdditionsR99_t, AdditionsR5, PRR_AdditionsR5_t),
1301
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001302CSN_DESCR_END (PRR_AdditionsR99_t)
1303
1304static const
1305CSN_DESCR_BEGIN (Packet_Resource_Request_t)
1306 /* Mac header */
1307 M_UINT (Packet_Resource_Request_t, PayloadType, 2),
1308 M_UINT (Packet_Resource_Request_t, spare, 5),
1309 M_UINT (Packet_Resource_Request_t, R, 1),
1310 M_UINT (Packet_Resource_Request_t, MESSAGE_TYPE, 6),
1311 /* Mac header */
1312
1313 M_NEXT_EXIST (Packet_Resource_Request_t, Exist_ACCESS_TYPE, 1),
1314 M_UINT (Packet_Resource_Request_t, ACCESS_TYPE, 2),
1315
1316 M_TYPE (Packet_Resource_Request_t, ID, PacketResourceRequestID_t),
1317
1318 M_NEXT_EXIST (Packet_Resource_Request_t, Exist_MS_Radio_Access_capability, 1),
1319 M_TYPE (Packet_Resource_Request_t, MS_Radio_Access_capability, MS_Radio_Access_capability_t),
1320
1321 M_TYPE (Packet_Resource_Request_t, Channel_Request_Description, Channel_Request_Description_t),
1322
1323 M_NEXT_EXIST (Packet_Resource_Request_t, Exist_CHANGE_MARK, 1),
1324 M_UINT (Packet_Resource_Request_t, CHANGE_MARK, 2),
1325
1326 M_UINT (Packet_Resource_Request_t, C_VALUE, 6),
1327
1328 M_NEXT_EXIST (Packet_Resource_Request_t, Exist_SIGN_VAR, 1),
1329 M_UINT (Packet_Resource_Request_t, SIGN_VAR, 6),
1330
Pau Espin Pedrol0daf9132020-02-23 16:11:28 +07001331 M_TYPE_ARRAY (Packet_Resource_Request_t, I_LEVEL_TN, InterferenceMeasurementReport_t, 8),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001332
1333 M_NEXT_EXIST_OR_NULL(Packet_Resource_Request_t, Exist_AdditionsR99, 1),
1334 M_TYPE (Packet_Resource_Request_t, AdditionsR99, PRR_AdditionsR99_t),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04001335 M_PADDING_BITS (Packet_Resource_Request_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001336CSN_DESCR_END (Packet_Resource_Request_t)
1337
1338/*< Packet Mobile TBF Status message content > */
1339static const
1340CSN_DESCR_BEGIN(Packet_Mobile_TBF_Status_t)
1341 /* Mac header */
1342 M_UINT (Packet_Mobile_TBF_Status_t, PayloadType, 2),
1343 M_UINT (Packet_Mobile_TBF_Status_t, spare, 5),
1344 M_UINT (Packet_Mobile_TBF_Status_t, R, 1),
1345 M_UINT (Packet_Mobile_TBF_Status_t, MESSAGE_TYPE, 6),
1346 /* Mac header */
1347
1348 M_TYPE (Packet_Mobile_TBF_Status_t, Global_TFI, Global_TFI_t),
1349 M_UINT (Packet_Mobile_TBF_Status_t, TBF_CAUSE, 3),
1350
1351 M_NEXT_EXIST (Packet_Mobile_TBF_Status_t, Exist_STATUS_MESSAGE_TYPE, 1),
1352 M_UINT (Packet_Mobile_TBF_Status_t, STATUS_MESSAGE_TYPE, 6),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04001353 M_PADDING_BITS(Packet_Mobile_TBF_Status_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001354CSN_DESCR_END (Packet_Mobile_TBF_Status_t)
1355
1356/*< Packet PSI Status message content > */
1357static const
1358CSN_DESCR_BEGIN(PSI_Message_t)
1359 M_UINT (PSI_Message_t, PSI_MESSAGE_TYPE, 6),
1360 M_UINT (PSI_Message_t, PSIX_CHANGE_MARK, 2),
1361 M_NEXT_EXIST (PSI_Message_t, Exist_PSIX_COUNT_and_Instance_Bitmap, 2),
1362 M_FIXED (PSI_Message_t, 4, 0), /* Placeholder for PSIX_COUNT (4 bits) */
1363 M_FIXED (PSI_Message_t, 1, 0), /* Placeholder for Instance bitmap (1 bit) */
1364CSN_DESCR_END (PSI_Message_t)
1365
1366static const
1367CSN_DESCR_BEGIN(PSI_Message_List_t)
Pau Espin Pedrol81b40cb2020-03-23 15:23:51 +01001368 M_REC_TARRAY (PSI_Message_List_t, PSI_Message, PSI_Message_t, Count_PSI_Message),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001369 M_FIXED (PSI_Message_List_t, 1, 0x00),
1370 M_UINT (PSI_Message_List_t, ADDITIONAL_MSG_TYPE, 1),
1371CSN_DESCR_END (PSI_Message_List_t)
1372
1373static const
1374CSN_DESCR_BEGIN(Unknown_PSI_Message_List_t)
1375 M_FIXED (Unknown_PSI_Message_List_t, 1, 0x00),
1376 M_UINT (Unknown_PSI_Message_List_t, ADDITIONAL_MSG_TYPE, 1),
1377CSN_DESCR_END (Unknown_PSI_Message_List_t)
1378
1379static const
1380CSN_DESCR_BEGIN(Packet_PSI_Status_t)
1381 /* Mac header */
1382 M_UINT (Packet_PSI_Status_t, PayloadType, 2),
1383 M_UINT (Packet_PSI_Status_t, spare, 5),
1384 M_UINT (Packet_PSI_Status_t, R, 1),
1385 M_UINT (Packet_PSI_Status_t, MESSAGE_TYPE, 6),
1386 /* Mac header */
1387
1388 M_TYPE (Packet_PSI_Status_t, Global_TFI, Global_TFI_t),
1389 M_UINT (Packet_PSI_Status_t, PBCCH_CHANGE_MARK, 3),
1390 M_TYPE (Packet_PSI_Status_t, PSI_Message_List, PSI_Message_List_t),
1391 M_TYPE (Packet_PSI_Status_t, Unknown_PSI_Message_List, Unknown_PSI_Message_List_t),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04001392 M_PADDING_BITS(Packet_PSI_Status_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001393CSN_DESCR_END (Packet_PSI_Status_t)
1394
1395/* < Packet SI Status message content > */
1396
1397static const
1398CSN_DESCR_BEGIN(SI_Message_t)
1399 M_UINT (SI_Message_t, SI_MESSAGE_TYPE, 8),
1400 M_UINT (SI_Message_t, MESS_REC, 2),
1401CSN_DESCR_END (SI_Message_t)
1402
1403static const
1404CSN_DESCR_BEGIN(SI_Message_List_t)
Pau Espin Pedrol81b40cb2020-03-23 15:23:51 +01001405 M_REC_TARRAY (SI_Message_List_t, SI_Message, SI_Message_t, Count_SI_Message),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001406 M_FIXED (SI_Message_List_t, 1, 0x00),
1407 M_UINT (SI_Message_List_t, ADDITIONAL_MSG_TYPE, 1),
1408CSN_DESCR_END (SI_Message_List_t)
1409
1410static const
1411CSN_DESCR_BEGIN(Unknown_SI_Message_List_t)
1412 M_FIXED (Unknown_SI_Message_List_t, 1, 0x00),
1413 M_UINT (Unknown_SI_Message_List_t, ADDITIONAL_MSG_TYPE, 1),
1414CSN_DESCR_END (Unknown_SI_Message_List_t)
1415
1416static const
1417CSN_DESCR_BEGIN(Packet_SI_Status_t)
1418 /* Mac header */
1419 M_UINT (Packet_SI_Status_t, PayloadType, 2),
1420 M_UINT (Packet_SI_Status_t, spare, 5),
1421 M_UINT (Packet_SI_Status_t, R, 1),
1422 M_UINT (Packet_SI_Status_t, MESSAGE_TYPE, 6),
1423 /* Mac header */
1424
1425 M_TYPE (Packet_SI_Status_t, Global_TFI, Global_TFI_t),
1426 M_UINT (Packet_SI_Status_t, BCCH_CHANGE_MARK, 3),
1427 M_TYPE (Packet_SI_Status_t, SI_Message_List, SI_Message_List_t),
1428 M_TYPE (Packet_SI_Status_t, Unknown_SI_Message_List, Unknown_SI_Message_List_t),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04001429 M_PADDING_BITS(Packet_SI_Status_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001430CSN_DESCR_END (Packet_SI_Status_t)
1431
1432/* < Packet Downlink Ack/Nack message content > */
1433static const
1434CSN_DESCR_BEGIN(PD_AckNack_AdditionsR99_t)
1435 M_NEXT_EXIST (PD_AckNack_AdditionsR99_t, Exist_PFI, 1),
1436 M_UINT (PD_AckNack_AdditionsR99_t, PFI, 7),
1437CSN_DESCR_END (PD_AckNack_AdditionsR99_t)
1438
1439static const
1440CSN_DESCR_BEGIN (Packet_Downlink_Ack_Nack_t)
1441 M_UINT (Packet_Downlink_Ack_Nack_t, PayloadType, 2),
1442 M_UINT (Packet_Downlink_Ack_Nack_t, spare, 5),
1443 M_BIT (Packet_Downlink_Ack_Nack_t, R),
1444 M_UINT (Packet_Downlink_Ack_Nack_t, MESSAGE_TYPE, 6),
1445 M_UINT (Packet_Downlink_Ack_Nack_t, DOWNLINK_TFI, 5),
1446 M_TYPE (Packet_Downlink_Ack_Nack_t, Ack_Nack_Description, Ack_Nack_Description_t),
1447
1448 M_NEXT_EXIST (Packet_Downlink_Ack_Nack_t, Exist_Channel_Request_Description, 1),
1449 M_TYPE (Packet_Downlink_Ack_Nack_t, Channel_Request_Description, Channel_Request_Description_t),
1450
1451 M_TYPE (Packet_Downlink_Ack_Nack_t, Channel_Quality_Report, Channel_Quality_Report_t),
1452
1453 M_NEXT_EXIST_OR_NULL(Packet_Downlink_Ack_Nack_t, Exist_AdditionsR99, 1),
1454 M_TYPE (Packet_Downlink_Ack_Nack_t, AdditionsR99, PD_AckNack_AdditionsR99_t),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04001455 M_PADDING_BITS (Packet_Downlink_Ack_Nack_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001456CSN_DESCR_END (Packet_Downlink_Ack_Nack_t)
1457
1458
1459/*< EGPRS Packet Downlink Ack/Nack message content > */
1460static const
1461CSN_DESCR_BEGIN(EGPRS_ChannelQualityReport_t)
1462 M_TYPE (EGPRS_ChannelQualityReport_t, EGPRS_BEP_LinkQualityMeasurements, EGPRS_BEP_LinkQualityMeasurements_t),
1463 M_UINT (EGPRS_ChannelQualityReport_t, C_VALUE, 6),
1464 M_TYPE (EGPRS_ChannelQualityReport_t, EGPRS_TimeslotLinkQualityMeasurements, EGPRS_TimeslotLinkQualityMeasurements_t),
1465CSN_DESCR_END (EGPRS_ChannelQualityReport_t)
1466
1467static const
1468CSN_DESCR_BEGIN(EGPRS_PD_AckNack_t)
1469/* M_CALLBACK (EGPRS_PD_AckNack_t, (void*)21, IsSupported, IsSupported), */
1470 M_UINT (EGPRS_PD_AckNack_t, PayloadType, 2),
1471 M_UINT (EGPRS_PD_AckNack_t, spare, 5),
1472 M_BIT (EGPRS_PD_AckNack_t, R),
1473
1474 M_UINT (EGPRS_PD_AckNack_t, MESSAGE_TYPE, 6),
1475 M_UINT (EGPRS_PD_AckNack_t, DOWNLINK_TFI, 5),
1476 M_UINT (EGPRS_PD_AckNack_t, MS_OUT_OF_MEMORY, 1),
1477
1478 M_NEXT_EXIST (EGPRS_PD_AckNack_t, Exist_EGPRS_ChannelQualityReport, 1),
1479 M_TYPE (EGPRS_PD_AckNack_t, EGPRS_ChannelQualityReport, EGPRS_ChannelQualityReport_t),
1480
1481 M_NEXT_EXIST (EGPRS_PD_AckNack_t, Exist_ChannelRequestDescription, 1),
1482 M_TYPE (EGPRS_PD_AckNack_t, ChannelRequestDescription, Channel_Request_Description_t),
1483
1484 M_NEXT_EXIST (EGPRS_PD_AckNack_t, Exist_PFI, 1),
1485 M_UINT (EGPRS_PD_AckNack_t, PFI, 7),
1486
1487 M_NEXT_EXIST (EGPRS_PD_AckNack_t, Exist_ExtensionBits, 1),
1488 M_TYPE (EGPRS_PD_AckNack_t, ExtensionBits, Extension_Bits_t),
1489
1490 M_TYPE (EGPRS_PD_AckNack_t, EGPRS_AckNack, EGPRS_AckNack_t),
1491/* M_CALLBACK (EGPRS_PD_AckNack_t, (void*)24, EGPRS_AckNack, EGPRS_AckNack), */
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04001492 M_PADDING_BITS(EGPRS_PD_AckNack_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001493
1494CSN_DESCR_END (EGPRS_PD_AckNack_t)
1495
1496static const
1497CSN_DESCR_BEGIN(FDD_Target_Cell_t)
1498 M_UINT (FDD_Target_Cell_t, FDD_ARFCN, 14),
1499 M_UINT (FDD_Target_Cell_t, DIVERSITY, 1),
1500 M_NEXT_EXIST (FDD_Target_Cell_t, Exist_Bandwith_FDD, 1),
1501 M_UINT (FDD_Target_Cell_t, BANDWITH_FDD, 3),
1502 M_UINT (FDD_Target_Cell_t, SCRAMBLING_CODE, 9),
1503CSN_DESCR_END (FDD_Target_Cell_t)
1504
1505static const
1506CSN_DESCR_BEGIN(TDD_Target_Cell_t)
1507 M_UINT (TDD_Target_Cell_t, TDD_ARFCN, 14),
1508 M_UINT (TDD_Target_Cell_t, DIVERSITY_TDD, 1),
1509 M_NEXT_EXIST (TDD_Target_Cell_t, Exist_Bandwith_TDD, 1),
1510 M_UINT (TDD_Target_Cell_t, BANDWITH_TDD, 3),
1511 M_UINT (TDD_Target_Cell_t, CELL_PARAMETER, 7),
1512 M_UINT (TDD_Target_Cell_t, Sync_Case_TSTD, 1),
1513CSN_DESCR_END (TDD_Target_Cell_t)
1514
1515static const
1516CSN_DESCR_BEGIN(EUTRAN_Target_Cell_t)
1517 M_UINT (EUTRAN_Target_Cell_t, EARFCN, 16),
1518 M_NEXT_EXIST (EUTRAN_Target_Cell_t, Exist_Measurement_Bandwidth, 1),
1519 M_UINT (EUTRAN_Target_Cell_t, Measurement_Bandwidth, 3),
1520 M_UINT (EUTRAN_Target_Cell_t, Physical_Layer_Cell_Identity, 9),
1521CSN_DESCR_END (EUTRAN_Target_Cell_t)
1522
1523static const
1524CSN_DESCR_BEGIN(UTRAN_CSG_Target_Cell_t)
1525 M_UINT (UTRAN_CSG_Target_Cell_t, UTRAN_CI, 28),
1526 M_NEXT_EXIST (UTRAN_CSG_Target_Cell_t, Exist_PLMN_ID, 1),
1527 M_TYPE (UTRAN_CSG_Target_Cell_t, PLMN_ID, PLMN_t),
1528CSN_DESCR_END (UTRAN_CSG_Target_Cell_t)
1529
1530static const
1531CSN_DESCR_BEGIN(EUTRAN_CSG_Target_Cell_t)
1532 M_UINT (EUTRAN_CSG_Target_Cell_t, EUTRAN_CI, 28),
1533 M_UINT (EUTRAN_CSG_Target_Cell_t, Tracking_Area_Code, 16),
1534 M_NEXT_EXIST (EUTRAN_CSG_Target_Cell_t, Exist_PLMN_ID, 1),
1535 M_TYPE (EUTRAN_CSG_Target_Cell_t, PLMN_ID, PLMN_t),
1536CSN_DESCR_END (EUTRAN_CSG_Target_Cell_t)
1537
1538static const
1539CSN_DESCR_BEGIN(PCCF_AdditionsR9_t)
1540 M_NEXT_EXIST (PCCF_AdditionsR9_t, Exist_UTRAN_CSG_Target_Cell, 1),
1541 M_TYPE (PCCF_AdditionsR9_t, UTRAN_CSG_Target_Cell, UTRAN_CSG_Target_Cell_t),
1542 M_NEXT_EXIST (PCCF_AdditionsR9_t, Exist_EUTRAN_CSG_Target_Cell, 1),
1543 M_TYPE (PCCF_AdditionsR9_t, EUTRAN_CSG_Target_Cell, EUTRAN_CSG_Target_Cell_t),
1544CSN_DESCR_END (PCCF_AdditionsR9_t)
1545
1546static const
1547CSN_DESCR_BEGIN(PCCF_AdditionsR8_t)
1548 M_NEXT_EXIST (PCCF_AdditionsR8_t, Exist_EUTRAN_Target_Cell, 1),
1549 M_TYPE (PCCF_AdditionsR8_t, EUTRAN_Target_Cell, EUTRAN_Target_Cell_t),
1550 M_NEXT_EXIST_OR_NULL(PCCF_AdditionsR8_t, Exist_AdditionsR9, 1),
1551 M_TYPE (PCCF_AdditionsR8_t, AdditionsR9, PCCF_AdditionsR9_t),
1552CSN_DESCR_END (PCCF_AdditionsR8_t)
1553
1554static const
1555CSN_DESCR_BEGIN(PCCF_AdditionsR5_t)
Thorsten Alteholz8bb79042018-10-06 10:42:58 +02001556 M_NEXT_EXIST (PCCF_AdditionsR5_t, Exist_G_RNTI_extension, 1),
1557 M_UINT (PCCF_AdditionsR5_t, G_RNTI_extension, 4),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001558 M_NEXT_EXIST_OR_NULL(PCCF_AdditionsR5_t, Exist_AdditionsR8, 1),
1559 M_TYPE (PCCF_AdditionsR5_t, AdditionsR8, PCCF_AdditionsR8_t),
1560CSN_DESCR_END (PCCF_AdditionsR5_t)
1561
1562static const
1563CSN_DESCR_BEGIN(PCCF_AdditionsR99_t)
1564 M_NEXT_EXIST (PCCF_AdditionsR99_t, Exist_FDD_Description, 1),
1565 M_TYPE (PCCF_AdditionsR99_t, FDD_Target_Cell, FDD_Target_Cell_t),
1566 M_NEXT_EXIST (PCCF_AdditionsR99_t, Exist_TDD_Description, 1),
1567 M_TYPE (PCCF_AdditionsR99_t, TDD_Target_Cell, TDD_Target_Cell_t),
1568 M_NEXT_EXIST_OR_NULL(PCCF_AdditionsR99_t, Exist_AdditionsR5, 1),
1569 M_TYPE (PCCF_AdditionsR99_t, AdditionsR5, PCCF_AdditionsR5_t),
1570CSN_DESCR_END (PCCF_AdditionsR99_t)
1571
1572/*< Packet Cell Change Failure message content > */
1573static const
1574CSN_DESCR_BEGIN(Packet_Cell_Change_Failure_t)
1575 /* Mac header */
1576 M_UINT (Packet_Cell_Change_Failure_t, PayloadType, 2),
1577 M_UINT (Packet_Cell_Change_Failure_t, spare, 5),
1578 M_UINT (Packet_Cell_Change_Failure_t, R, 1),
1579 M_UINT (Packet_Cell_Change_Failure_t, MESSAGE_TYPE, 6),
1580 /* Mac header */
1581
1582 M_UINT (Packet_Cell_Change_Failure_t, TLLI, 32),
1583 M_UINT (Packet_Cell_Change_Failure_t, ARFCN, 10),
1584 M_UINT (Packet_Cell_Change_Failure_t, BSIC, 6),
1585 M_UINT (Packet_Cell_Change_Failure_t, CAUSE, 4),
1586
1587 M_NEXT_EXIST_OR_NULL (Packet_Cell_Change_Failure_t, Exist_AdditionsR99, 1),
1588 M_TYPE (Packet_Cell_Change_Failure_t, AdditionsR99, PCCF_AdditionsR99_t),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04001589
1590 M_PADDING_BITS (Packet_Cell_Change_Failure_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001591CSN_DESCR_END (Packet_Cell_Change_Failure_t)
1592
1593/*< Packet Uplink Ack/Nack message content > */
1594static const
1595CSN_DESCR_BEGIN(Power_Control_Parameters_t)
1596 M_UINT (Power_Control_Parameters_t, ALPHA, 4),
1597
1598 M_NEXT_EXIST (Power_Control_Parameters_t, Slot[0].Exist, 1),
1599 M_UINT (Power_Control_Parameters_t, Slot[0].GAMMA_TN, 5),
1600
1601 M_NEXT_EXIST (Power_Control_Parameters_t, Slot[1].Exist, 1),
1602 M_UINT (Power_Control_Parameters_t, Slot[1].GAMMA_TN, 5),
1603
1604 M_NEXT_EXIST (Power_Control_Parameters_t, Slot[2].Exist, 1),
1605 M_UINT (Power_Control_Parameters_t, Slot[2].GAMMA_TN, 5),
1606
1607 M_NEXT_EXIST (Power_Control_Parameters_t, Slot[3].Exist, 1),
1608 M_UINT (Power_Control_Parameters_t, Slot[3].GAMMA_TN, 5),
1609
1610 M_NEXT_EXIST (Power_Control_Parameters_t, Slot[4].Exist, 1),
1611 M_UINT (Power_Control_Parameters_t, Slot[4].GAMMA_TN, 5),
1612
1613 M_NEXT_EXIST (Power_Control_Parameters_t, Slot[5].Exist, 1),
1614 M_UINT (Power_Control_Parameters_t, Slot[5].GAMMA_TN, 5),
1615
1616 M_NEXT_EXIST (Power_Control_Parameters_t, Slot[6].Exist, 1),
1617 M_UINT (Power_Control_Parameters_t, Slot[6].GAMMA_TN, 5),
1618
1619 M_NEXT_EXIST (Power_Control_Parameters_t, Slot[7].Exist, 1),
1620 M_UINT (Power_Control_Parameters_t, Slot[7].GAMMA_TN, 5),
1621CSN_DESCR_END (Power_Control_Parameters_t)
1622
1623static const
1624CSN_DESCR_BEGIN(PU_AckNack_GPRS_AdditionsR99_t)
1625 M_NEXT_EXIST (PU_AckNack_GPRS_AdditionsR99_t, Exist_PacketExtendedTimingAdvance, 1),
1626 M_UINT (PU_AckNack_GPRS_AdditionsR99_t, PacketExtendedTimingAdvance, 2),
1627
1628 M_UINT (PU_AckNack_GPRS_AdditionsR99_t, TBF_EST, 1),
1629CSN_DESCR_END (PU_AckNack_GPRS_AdditionsR99_t)
1630
1631static const
1632CSN_DESCR_BEGIN (PU_AckNack_GPRS_t)
1633 M_UINT (PU_AckNack_GPRS_t, CHANNEL_CODING_COMMAND, 2),
1634 M_TYPE (PU_AckNack_GPRS_t, Ack_Nack_Description, Ack_Nack_Description_t),
1635
1636 M_NEXT_EXIST (PU_AckNack_GPRS_t, Common_Uplink_Ack_Nack_Data.Exist_CONTENTION_RESOLUTION_TLLI, 1),
1637 M_UINT (PU_AckNack_GPRS_t, Common_Uplink_Ack_Nack_Data.CONTENTION_RESOLUTION_TLLI, 32),
1638
1639 M_NEXT_EXIST (PU_AckNack_GPRS_t, Common_Uplink_Ack_Nack_Data.Exist_Packet_Timing_Advance, 1),
1640 M_TYPE (PU_AckNack_GPRS_t, Common_Uplink_Ack_Nack_Data.Packet_Timing_Advance, Packet_Timing_Advance_t),
1641
1642 M_NEXT_EXIST (PU_AckNack_GPRS_t, Common_Uplink_Ack_Nack_Data.Exist_Power_Control_Parameters, 1),
1643 M_TYPE (PU_AckNack_GPRS_t, Common_Uplink_Ack_Nack_Data.Power_Control_Parameters, Power_Control_Parameters_t),
1644
1645 M_NEXT_EXIST (PU_AckNack_GPRS_t, Common_Uplink_Ack_Nack_Data.Exist_Extension_Bits, 1),
1646 M_TYPE (PU_AckNack_GPRS_t, Common_Uplink_Ack_Nack_Data.Extension_Bits, Extension_Bits_t),
1647
1648 M_UNION (PU_AckNack_GPRS_t, 2), /* Fixed Allocation was removed */
1649 M_UINT (PU_AckNack_GPRS_t, u.FixedAllocationDummy, 1),
1650 CSN_ERROR (PU_AckNack_GPRS_t, "01 <Fixed Allocation>", CSN_ERROR_STREAM_NOT_SUPPORTED),
1651
1652 M_NEXT_EXIST_OR_NULL(PU_AckNack_GPRS_t, Exist_AdditionsR99, 1),
1653 M_TYPE (PU_AckNack_GPRS_t, AdditionsR99, PU_AckNack_GPRS_AdditionsR99_t),
1654CSN_DESCR_END (PU_AckNack_GPRS_t)
1655
1656static const
1657CSN_DESCR_BEGIN(PU_AckNack_EGPRS_00_t)
1658 M_UINT (PU_AckNack_EGPRS_00_t, EGPRS_ChannelCodingCommand, 4),
1659 M_UINT (PU_AckNack_EGPRS_00_t, RESEGMENT, 1),
1660 M_UINT (PU_AckNack_EGPRS_00_t, PRE_EMPTIVE_TRANSMISSION, 1),
1661 M_UINT (PU_AckNack_EGPRS_00_t, PRR_RETRANSMISSION_REQUEST, 1),
1662 M_UINT (PU_AckNack_EGPRS_00_t, ARAC_RETRANSMISSION_REQUEST, 1),
1663
1664 M_NEXT_EXIST (PU_AckNack_EGPRS_00_t, Common_Uplink_Ack_Nack_Data.Exist_CONTENTION_RESOLUTION_TLLI, 1),
1665 M_UINT (PU_AckNack_EGPRS_00_t, Common_Uplink_Ack_Nack_Data.CONTENTION_RESOLUTION_TLLI, 32),
1666
1667 M_UINT (PU_AckNack_EGPRS_00_t, TBF_EST, 1),
1668
1669 M_NEXT_EXIST (PU_AckNack_EGPRS_00_t, Common_Uplink_Ack_Nack_Data.Exist_Packet_Timing_Advance, 1),
1670 M_TYPE (PU_AckNack_EGPRS_00_t, Common_Uplink_Ack_Nack_Data.Packet_Timing_Advance, Packet_Timing_Advance_t),
1671
1672 M_NEXT_EXIST (PU_AckNack_EGPRS_00_t, Exist_Packet_Extended_Timing_Advance, 1),
1673 M_UINT (PU_AckNack_EGPRS_00_t, Packet_Extended_Timing_Advance, 2),
1674
1675 M_NEXT_EXIST (PU_AckNack_EGPRS_00_t, Common_Uplink_Ack_Nack_Data.Exist_Power_Control_Parameters, 1),
1676 M_TYPE (PU_AckNack_EGPRS_00_t, Common_Uplink_Ack_Nack_Data.Power_Control_Parameters, Power_Control_Parameters_t),
1677
1678 M_NEXT_EXIST (PU_AckNack_EGPRS_00_t, Common_Uplink_Ack_Nack_Data.Exist_Extension_Bits, 1),
1679 M_TYPE (PU_AckNack_EGPRS_00_t, Common_Uplink_Ack_Nack_Data.Extension_Bits, Extension_Bits_t),
1680
1681 M_TYPE (PU_AckNack_EGPRS_00_t, EGPRS_AckNack, EGPRS_AckNack_t),
1682/* M_CALLBACK (PU_AckNack_EGPRS_00_t, (void*)24, EGPRS_AckNack, EGPRS_AckNack), */
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001683CSN_DESCR_END (PU_AckNack_EGPRS_00_t)
1684
1685static const
1686CSN_DESCR_BEGIN(PU_AckNack_EGPRS_t)
1687/* M_CALLBACK (PU_AckNack_EGPRS_t, (void*)21, IsSupported, IsSupported), */
1688 M_UNION (PU_AckNack_EGPRS_t, 4),
1689 M_TYPE (PU_AckNack_EGPRS_t, u.PU_AckNack_EGPRS_00, PU_AckNack_EGPRS_00_t),
1690 CSN_ERROR (PU_AckNack_EGPRS_t, "01 <PU_AckNack_EGPRS>", CSN_ERROR_STREAM_NOT_SUPPORTED),
1691 CSN_ERROR (PU_AckNack_EGPRS_t, "10 <PU_AckNack_EGPRS>", CSN_ERROR_STREAM_NOT_SUPPORTED),
1692 CSN_ERROR (PU_AckNack_EGPRS_t, "11 <PU_AckNack_EGPRS>", CSN_ERROR_STREAM_NOT_SUPPORTED),
1693CSN_DESCR_END (PU_AckNack_EGPRS_t)
1694
1695static const
1696CSN_DESCR_BEGIN(Packet_Uplink_Ack_Nack_t)
1697 M_UINT (Packet_Uplink_Ack_Nack_t, MESSAGE_TYPE, 6),
1698 M_UINT (Packet_Uplink_Ack_Nack_t, PAGE_MODE, 2),
1699 M_FIXED (Packet_Uplink_Ack_Nack_t, 2, 0x00),
1700 M_UINT (Packet_Uplink_Ack_Nack_t, UPLINK_TFI, 5),
1701
1702 M_UNION (Packet_Uplink_Ack_Nack_t, 2),
1703 M_TYPE (Packet_Uplink_Ack_Nack_t, u.PU_AckNack_GPRS_Struct, PU_AckNack_GPRS_t),
1704 M_TYPE (Packet_Uplink_Ack_Nack_t, u.PU_AckNack_EGPRS_Struct, PU_AckNack_EGPRS_t),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04001705 M_PADDING_BITS(Packet_Uplink_Ack_Nack_t ),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001706CSN_DESCR_END (Packet_Uplink_Ack_Nack_t)
1707
1708/*< Packet Uplink Assignment message content > */
1709static const
1710CSN_DESCR_BEGIN(CHANGE_MARK_t)
1711 M_UINT (CHANGE_MARK_t, CHANGE_MARK_1, 2),
1712
1713 M_NEXT_EXIST (CHANGE_MARK_t, Exist_CHANGE_MARK_2, 1),
1714 M_UINT (CHANGE_MARK_t, CHANGE_MARK_2, 2),
1715CSN_DESCR_END (CHANGE_MARK_t)
1716
1717static const
1718CSN_DESCR_BEGIN(Indirect_encoding_t)
1719 M_UINT (Indirect_encoding_t, MAIO, 6),
1720 M_UINT (Indirect_encoding_t, MA_NUMBER, 4),
1721
1722 M_NEXT_EXIST (Indirect_encoding_t, Exist_CHANGE_MARK, 1),
1723 M_TYPE (Indirect_encoding_t, CHANGE_MARK, CHANGE_MARK_t),
1724CSN_DESCR_END (Indirect_encoding_t)
1725
1726static const
1727CSN_DESCR_BEGIN(Direct_encoding_1_t)
1728 M_UINT (Direct_encoding_1_t, MAIO, 6),
1729 M_TYPE (Direct_encoding_1_t, GPRS_Mobile_Allocation, GPRS_Mobile_Allocation_t),
1730CSN_DESCR_END (Direct_encoding_1_t)
1731
1732static const
1733CSN_DESCR_BEGIN(Direct_encoding_2_t)
1734 M_UINT (Direct_encoding_2_t, MAIO, 6),
1735 M_UINT (Direct_encoding_2_t, HSN, 6),
1736 M_UINT_OFFSET(Direct_encoding_2_t, Length_of_MA_Frequency_List, 4, 3),
1737 M_VAR_ARRAY (Direct_encoding_2_t, MA_Frequency_List, Length_of_MA_Frequency_List, 0),
1738CSN_DESCR_END (Direct_encoding_2_t)
1739
1740static const
1741CSN_DESCR_BEGIN(Frequency_Parameters_t)
1742 M_UINT (Frequency_Parameters_t, TSC, 3),
1743
1744 M_UNION (Frequency_Parameters_t, 4),
1745 M_UINT (Frequency_Parameters_t, u.ARFCN, 10),
1746 M_TYPE (Frequency_Parameters_t, u.Indirect_encoding, Indirect_encoding_t),
1747 M_TYPE (Frequency_Parameters_t, u.Direct_encoding_1, Direct_encoding_1_t),
1748 M_TYPE (Frequency_Parameters_t, u.Direct_encoding_2, Direct_encoding_2_t),
1749CSN_DESCR_END (Frequency_Parameters_t)
1750
1751static const
1752CSN_DESCR_BEGIN(Packet_Request_Reference_t)
1753 M_UINT (Packet_Request_Reference_t, RANDOM_ACCESS_INFORMATION, 11),
1754 M_UINT_ARRAY (Packet_Request_Reference_t, FRAME_NUMBER, 8, 2),
1755CSN_DESCR_END (Packet_Request_Reference_t)
1756
1757static const
1758CSN_DESCR_BEGIN(Timeslot_Allocation_t)
1759 M_NEXT_EXIST (Timeslot_Allocation_t, Exist, 1),
1760 M_UINT (Timeslot_Allocation_t, USF_TN, 3),
1761CSN_DESCR_END (Timeslot_Allocation_t)
1762
1763static const
1764CSN_DESCR_BEGIN(Timeslot_Allocation_Power_Ctrl_Param_t)
1765 M_UINT (Timeslot_Allocation_Power_Ctrl_Param_t, ALPHA, 4),
1766
1767 M_NEXT_EXIST (Timeslot_Allocation_Power_Ctrl_Param_t, Slot[0].Exist, 2),
1768 M_UINT (Timeslot_Allocation_Power_Ctrl_Param_t, Slot[0].USF_TN, 3),
1769 M_UINT (Timeslot_Allocation_Power_Ctrl_Param_t, Slot[0].GAMMA_TN, 5),
1770
1771 M_NEXT_EXIST (Timeslot_Allocation_Power_Ctrl_Param_t, Slot[1].Exist, 2),
1772 M_UINT (Timeslot_Allocation_Power_Ctrl_Param_t, Slot[1].USF_TN, 3),
1773 M_UINT (Timeslot_Allocation_Power_Ctrl_Param_t, Slot[1].GAMMA_TN, 5),
1774
1775 M_NEXT_EXIST (Timeslot_Allocation_Power_Ctrl_Param_t, Slot[2].Exist, 2),
1776 M_UINT (Timeslot_Allocation_Power_Ctrl_Param_t, Slot[2].USF_TN, 3),
1777 M_UINT (Timeslot_Allocation_Power_Ctrl_Param_t, Slot[2].GAMMA_TN, 5),
1778
1779 M_NEXT_EXIST (Timeslot_Allocation_Power_Ctrl_Param_t, Slot[3].Exist, 2),
1780 M_UINT (Timeslot_Allocation_Power_Ctrl_Param_t, Slot[3].USF_TN, 3),
1781 M_UINT (Timeslot_Allocation_Power_Ctrl_Param_t, Slot[3].GAMMA_TN, 5),
1782
1783 M_NEXT_EXIST (Timeslot_Allocation_Power_Ctrl_Param_t, Slot[4].Exist, 2),
1784 M_UINT (Timeslot_Allocation_Power_Ctrl_Param_t, Slot[4].USF_TN, 3),
1785 M_UINT (Timeslot_Allocation_Power_Ctrl_Param_t, Slot[4].GAMMA_TN, 5),
1786
1787 M_NEXT_EXIST (Timeslot_Allocation_Power_Ctrl_Param_t, Slot[5].Exist, 2),
1788 M_UINT (Timeslot_Allocation_Power_Ctrl_Param_t, Slot[5].USF_TN, 3),
1789 M_UINT (Timeslot_Allocation_Power_Ctrl_Param_t, Slot[5].GAMMA_TN, 5),
1790
1791 M_NEXT_EXIST (Timeslot_Allocation_Power_Ctrl_Param_t, Slot[6].Exist, 2),
1792 M_UINT (Timeslot_Allocation_Power_Ctrl_Param_t, Slot[6].USF_TN, 3),
1793 M_UINT (Timeslot_Allocation_Power_Ctrl_Param_t, Slot[6].GAMMA_TN, 5),
1794
1795 M_NEXT_EXIST (Timeslot_Allocation_Power_Ctrl_Param_t, Slot[7].Exist, 2),
1796 M_UINT (Timeslot_Allocation_Power_Ctrl_Param_t, Slot[7].USF_TN, 3),
1797 M_UINT (Timeslot_Allocation_Power_Ctrl_Param_t, Slot[7].GAMMA_TN, 5),
1798CSN_DESCR_END (Timeslot_Allocation_Power_Ctrl_Param_t)
1799
1800/* USED in <Packet Uplink Assignment message content> */
1801static const
1802CSN_DESCR_BEGIN(Dynamic_Allocation_t)
1803 M_UINT (Dynamic_Allocation_t, Extended_Dynamic_Allocation, 1),
1804
1805 M_NEXT_EXIST (Dynamic_Allocation_t, Exist_P0, 2),
1806 M_UINT (Dynamic_Allocation_t, P0, 4),
1807 M_UINT (Dynamic_Allocation_t, PR_MODE, 1),
1808
1809 M_UINT (Dynamic_Allocation_t, USF_GRANULARITY, 1),
1810
1811 M_NEXT_EXIST (Dynamic_Allocation_t, Exist_UPLINK_TFI_ASSIGNMENT, 1),
1812 M_UINT (Dynamic_Allocation_t, UPLINK_TFI_ASSIGNMENT, 5),
1813
1814 M_NEXT_EXIST (Dynamic_Allocation_t, Exist_RLC_DATA_BLOCKS_GRANTED, 1),
1815 M_UINT (Dynamic_Allocation_t, RLC_DATA_BLOCKS_GRANTED, 8),
1816
1817 M_NEXT_EXIST (Dynamic_Allocation_t, Exist_TBF_Starting_Time, 1),
1818 M_TYPE (Dynamic_Allocation_t, TBF_Starting_Time, Starting_Frame_Number_t),
1819
1820 M_UNION (Dynamic_Allocation_t, 2),
1821 M_TYPE_ARRAY (Dynamic_Allocation_t, u.Timeslot_Allocation, Timeslot_Allocation_t, 8),
1822 M_TYPE (Dynamic_Allocation_t, u.Timeslot_Allocation_Power_Ctrl_Param, Timeslot_Allocation_Power_Ctrl_Param_t),
1823CSN_DESCR_END (Dynamic_Allocation_t)
1824
1825static const
1826CSN_DESCR_BEGIN(Single_Block_Allocation_t)
1827 M_UINT (Single_Block_Allocation_t, TIMESLOT_NUMBER, 3),
1828
1829 M_NEXT_EXIST (Single_Block_Allocation_t, Exist_ALPHA_and_GAMMA_TN, 2),
1830 M_UINT (Single_Block_Allocation_t, ALPHA, 4),
1831 M_UINT (Single_Block_Allocation_t, GAMMA_TN, 5),
1832
1833 M_NEXT_EXIST (Single_Block_Allocation_t, Exist_P0, 3),
1834 M_UINT (Single_Block_Allocation_t, P0, 4),
1835 M_UINT (Single_Block_Allocation_t, BTS_PWR_CTRL_MODE, 1),
1836 M_UINT (Single_Block_Allocation_t, PR_MODE, 1),
1837
1838 M_TYPE (Single_Block_Allocation_t, TBF_Starting_Time, Starting_Frame_Number_t),
1839CSN_DESCR_END (Single_Block_Allocation_t)
1840
1841static const
1842CSN_DESCR_BEGIN(DTM_Dynamic_Allocation_t)
1843 M_UINT (DTM_Dynamic_Allocation_t, Extended_Dynamic_Allocation, 1),
1844
1845 M_NEXT_EXIST (DTM_Dynamic_Allocation_t, Exist_P0, 2),
1846 M_UINT (DTM_Dynamic_Allocation_t, P0, 4),
1847 M_UINT (DTM_Dynamic_Allocation_t, PR_MODE, 1),
1848
1849 M_UINT (DTM_Dynamic_Allocation_t, USF_GRANULARITY, 1),
1850
1851 M_NEXT_EXIST (DTM_Dynamic_Allocation_t, Exist_UPLINK_TFI_ASSIGNMENT, 1),
1852 M_UINT (DTM_Dynamic_Allocation_t, UPLINK_TFI_ASSIGNMENT, 5),
1853
1854 M_NEXT_EXIST (DTM_Dynamic_Allocation_t, Exist_RLC_DATA_BLOCKS_GRANTED, 1),
1855 M_UINT (DTM_Dynamic_Allocation_t, RLC_DATA_BLOCKS_GRANTED, 8),
1856
1857 M_UNION (DTM_Dynamic_Allocation_t, 2),
1858 M_TYPE_ARRAY (DTM_Dynamic_Allocation_t, u.Timeslot_Allocation, Timeslot_Allocation_t, 8),
1859 M_TYPE (DTM_Dynamic_Allocation_t, u.Timeslot_Allocation_Power_Ctrl_Param, Timeslot_Allocation_Power_Ctrl_Param_t),
1860CSN_DESCR_END (DTM_Dynamic_Allocation_t)
1861
1862static const
1863CSN_DESCR_BEGIN(DTM_Single_Block_Allocation_t)
1864 M_UINT (DTM_Single_Block_Allocation_t, TIMESLOT_NUMBER, 3),
1865
1866 M_NEXT_EXIST (DTM_Single_Block_Allocation_t, Exist_ALPHA_and_GAMMA_TN, 2),
1867 M_UINT (DTM_Single_Block_Allocation_t, ALPHA, 4),
1868 M_UINT (DTM_Single_Block_Allocation_t, GAMMA_TN, 5),
1869
1870 M_NEXT_EXIST (DTM_Single_Block_Allocation_t, Exist_P0, 3),
1871 M_UINT (DTM_Single_Block_Allocation_t, P0, 4),
1872 M_UINT (DTM_Single_Block_Allocation_t, BTS_PWR_CTRL_MODE, 1),
1873 M_UINT (DTM_Single_Block_Allocation_t, PR_MODE, 1),
1874CSN_DESCR_END (DTM_Single_Block_Allocation_t)
1875
1876
1877/* Help structures */
1878typedef struct
1879{
1880 Global_TFI_t Global_TFI; /* 0 < Global TFI : < Global TFI IE > > */
1881} h0_Global_TFI_t;
1882
1883static const
1884CSN_DESCR_BEGIN(h0_Global_TFI_t)
1885 M_FIXED (h0_Global_TFI_t, 1, 0x00),
1886 M_TYPE (h0_Global_TFI_t, Global_TFI, Global_TFI_t),
1887CSN_DESCR_END (h0_Global_TFI_t)
1888
1889typedef struct
1890{
1891 guint32 TLLI;/* | 10 < TLLI : bit (32) >*/
1892} h10_TLLI_t;
1893
1894static const
1895CSN_DESCR_BEGIN(h10_TLLI_t)
1896 M_FIXED (h10_TLLI_t, 2, 0x02),
1897 M_UINT (h10_TLLI_t, TLLI, 32),
1898CSN_DESCR_END (h10_TLLI_t)
1899
1900typedef struct
1901{
1902 guint16 TQI;/*| 110 < TQI : bit (16) > */
1903} h110_TQI_t;
1904
1905static const
1906CSN_DESCR_BEGIN(h110_TQI_t)
1907 M_FIXED (h110_TQI_t, 3, 0x06),
1908 M_UINT (h110_TQI_t, TQI, 16),
1909CSN_DESCR_END (h110_TQI_t)
1910
1911typedef struct
1912{
1913 Packet_Request_Reference_t Packet_Request_Reference;/*| 111 < Packet Request Reference : < Packet Request Reference IE > > }*/
1914} h111_Packet_Request_Reference_t;
1915
1916static const
1917CSN_DESCR_BEGIN(h111_Packet_Request_Reference_t)
1918 M_FIXED (h111_Packet_Request_Reference_t, 3, 0x07),
1919 M_TYPE (h111_Packet_Request_Reference_t, Packet_Request_Reference, Packet_Request_Reference_t),
1920CSN_DESCR_END (h111_Packet_Request_Reference_t)
1921
1922static const
1923CSN_ChoiceElement_t PacketUplinkID[] =
1924{
Pau Espin Pedrol7cce8252020-01-24 16:41:14 +01001925 {1, 0, 0, M_TYPE(PacketUplinkID_t, u.Global_TFI, Global_TFI_t)},
1926 {2, 0x02, 0, M_UINT(PacketUplinkID_t, u.TLLI, 32)},
1927 {3, 0x06, 0, M_UINT(PacketUplinkID_t, u.TQI, 16)},
1928 {3, 0x07, 0, M_TYPE(PacketUplinkID_t, u.Packet_Request_Reference, Packet_Request_Reference_t)},
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001929};
1930
1931static const
1932CSN_DESCR_BEGIN(PacketUplinkID_t)
1933 M_CHOICE (PacketUplinkID_t, UnionType, PacketUplinkID, ElementsOf(PacketUplinkID)),
1934CSN_DESCR_END (PacketUplinkID_t)
1935
1936static const
1937CSN_DESCR_BEGIN(PUA_GPRS_AdditionsR99_t)
1938 M_NEXT_EXIST (PUA_GPRS_AdditionsR99_t, Exist_Packet_Extended_Timing_Advance, 1),
1939 M_UINT (PUA_GPRS_AdditionsR99_t, Packet_Extended_Timing_Advance, 2),
1940CSN_DESCR_END (PUA_GPRS_AdditionsR99_t)
1941
1942static const
1943CSN_DESCR_BEGIN (PUA_GPRS_t)
1944 M_UINT (PUA_GPRS_t, CHANNEL_CODING_COMMAND, 2),
Anders Broman8ea3cbe2020-01-28 17:36:33 +01001945 M_UINT (PUA_GPRS_t, TLLI_BLOCK_CHANNEL_CODING, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001946 M_TYPE (PUA_GPRS_t, Packet_Timing_Advance, Packet_Timing_Advance_t),
1947
1948 M_NEXT_EXIST (PUA_GPRS_t, Exist_Frequency_Parameters, 1),
1949 M_TYPE (PUA_GPRS_t, Frequency_Parameters, Frequency_Parameters_t),
1950
1951 M_UNION (PUA_GPRS_t, 4),
1952 CSN_ERROR (PUA_GPRS_t, "00 <extension> not implemented", CSN_ERROR_STREAM_NOT_SUPPORTED),
1953 M_TYPE (PUA_GPRS_t, u.Dynamic_Allocation, Dynamic_Allocation_t),
1954 M_TYPE (PUA_GPRS_t, u.Single_Block_Allocation, Single_Block_Allocation_t),
1955 CSN_ERROR (PUA_GPRS_t, "11 <Fixed Allocation> not supported", CSN_ERROR_STREAM_NOT_SUPPORTED),
1956
1957 M_NEXT_EXIST_OR_NULL(PUA_GPRS_t, Exist_AdditionsR99, 1),
1958 M_TYPE (PUA_GPRS_t, AdditionsR99, PUA_GPRS_AdditionsR99_t),
1959CSN_DESCR_END (PUA_GPRS_t)
1960
1961static const
1962CSN_DESCR_BEGIN(COMPACT_ReducedMA_t)
1963 M_UINT (COMPACT_ReducedMA_t, BitmapLength, 7),
1964 M_VAR_BITMAP (COMPACT_ReducedMA_t, ReducedMA_Bitmap, BitmapLength, 0),
1965
1966 M_NEXT_EXIST (COMPACT_ReducedMA_t, Exist_MAIO_2, 1),
1967 M_UINT (COMPACT_ReducedMA_t, MAIO_2, 6),
1968CSN_DESCR_END (COMPACT_TeducedMA_t)
1969
1970static const
1971CSN_DESCR_BEGIN(MultiBlock_Allocation_t)
1972 M_UINT (MultiBlock_Allocation_t, TIMESLOT_NUMBER, 3),
1973
1974 M_NEXT_EXIST (MultiBlock_Allocation_t, Exist_ALPHA_GAMMA_TN, 2),
1975 M_UINT (MultiBlock_Allocation_t, ALPHA, 4),
1976 M_UINT (MultiBlock_Allocation_t, GAMMA_TN, 5),
1977
1978 M_NEXT_EXIST (MultiBlock_Allocation_t, Exist_P0_BTS_PWR_CTRL_PR_MODE, 3),
1979 M_UINT (MultiBlock_Allocation_t, P0, 4),
1980 M_UINT (MultiBlock_Allocation_t, BTS_PWR_CTRL_MODE, 1),
1981 M_UINT (MultiBlock_Allocation_t, PR_MODE, 1),
1982
1983 M_TYPE (MultiBlock_Allocation_t, TBF_Starting_Time, Starting_Frame_Number_t),
1984 M_UINT (MultiBlock_Allocation_t, NUMBER_OF_RADIO_BLOCKS_ALLOCATED, 2),
1985CSN_DESCR_END (MultiBlock_Allocation_t)
1986
1987static const
1988CSN_DESCR_BEGIN (PUA_EGPRS_00_t)
1989 M_NEXT_EXIST (PUA_EGPRS_00_t, Exist_CONTENTION_RESOLUTION_TLLI, 1),
1990 M_UINT (PUA_EGPRS_00_t, CONTENTION_RESOLUTION_TLLI, 32),
1991
1992 M_NEXT_EXIST (PUA_EGPRS_00_t, Exist_COMPACT_ReducedMA, 1),
1993 M_TYPE (PUA_EGPRS_00_t, COMPACT_ReducedMA, COMPACT_ReducedMA_t),
1994
1995 M_UINT (PUA_EGPRS_00_t, EGPRS_CHANNEL_CODING_COMMAND, 4),
1996 M_UINT (PUA_EGPRS_00_t, RESEGMENT, 1),
1997 M_UINT (PUA_EGPRS_00_t, EGPRS_WindowSize, 5),
1998
1999 M_REC_ARRAY (PUA_EGPRS_00_t, AccessTechnologyType, NrOfAccessTechnologies, 4),
2000
2001 M_UINT (PUA_EGPRS_00_t, ARAC_RETRANSMISSION_REQUEST, 1),
2002 M_UINT (PUA_EGPRS_00_t, TLLI_BLOCK_CHANNEL_CODING, 1),
2003
2004 M_NEXT_EXIST (PUA_EGPRS_00_t, Exist_BEP_PERIOD2, 1),
2005 M_UINT (PUA_EGPRS_00_t, BEP_PERIOD2, 4),
2006
2007 M_TYPE (PUA_EGPRS_00_t, PacketTimingAdvance, Packet_Timing_Advance_t),
2008
2009 M_NEXT_EXIST (PUA_EGPRS_00_t, Exist_Packet_Extended_Timing_Advance, 1),
2010 M_UINT (PUA_EGPRS_00_t, Packet_Extended_Timing_Advance, 2),
2011
2012 M_NEXT_EXIST (PUA_EGPRS_00_t, Exist_Frequency_Parameters, 1),
2013 M_TYPE (PUA_EGPRS_00_t, Frequency_Parameters, Frequency_Parameters_t),
2014
2015 M_UNION (PUA_EGPRS_00_t, 4),
2016 CSN_ERROR (PUA_EGPRS_00_t, "00 <extension>", CSN_ERROR_STREAM_NOT_SUPPORTED),
2017 M_TYPE (PUA_EGPRS_00_t, u.Dynamic_Allocation, Dynamic_Allocation_t),
2018 M_TYPE (PUA_EGPRS_00_t, u.MultiBlock_Allocation, MultiBlock_Allocation_t),
2019 CSN_ERROR (PUA_EGPRS_00_t, "11 <Fixed Allocation>", CSN_ERROR_STREAM_NOT_SUPPORTED),
2020CSN_DESCR_END (PUA_EGPRS_00_t)
2021
2022static const
2023CSN_DESCR_BEGIN(PUA_EGPRS_t)
2024 M_UNION (PUA_EGPRS_t, 4),
2025 M_TYPE (PUA_EGPRS_t, u.PUA_EGPRS_00, PUA_EGPRS_00_t),
2026 CSN_ERROR (PUA_EGPRS_t, "01 <PUA EGPRS>", CSN_ERROR_STREAM_NOT_SUPPORTED),
2027 CSN_ERROR (PUA_EGPRS_t, "10 <PUA EGPRS>", CSN_ERROR_STREAM_NOT_SUPPORTED),
2028 CSN_ERROR (PUA_EGPRS_t, "11 <PUA EGPRS>", CSN_ERROR_STREAM_NOT_SUPPORTED),
2029CSN_DESCR_END (PUA_EGPRS_t)
2030
2031static const
2032CSN_DESCR_BEGIN(Packet_Uplink_Assignment_t)
2033 M_UINT (Packet_Uplink_Assignment_t, MESSAGE_TYPE, 6),
2034 M_UINT (Packet_Uplink_Assignment_t, PAGE_MODE, 2),
2035
2036 M_NEXT_EXIST (Packet_Uplink_Assignment_t, Exist_PERSISTENCE_LEVEL, 1),
2037 M_UINT_ARRAY (Packet_Uplink_Assignment_t, PERSISTENCE_LEVEL, 4, 4),
2038
2039 M_TYPE (Packet_Uplink_Assignment_t, ID, PacketUplinkID_t),
2040
2041 M_UNION (Packet_Uplink_Assignment_t, 2),
2042 M_TYPE (Packet_Uplink_Assignment_t, u.PUA_GPRS_Struct, PUA_GPRS_t),
2043 M_TYPE (Packet_Uplink_Assignment_t, u.PUA_EGPRS_Struct, PUA_EGPRS_t),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04002044
2045 M_PADDING_BITS(Packet_Uplink_Assignment_t ),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002046CSN_DESCR_END (Packet_Uplink_Assignment_t)
2047
2048/*< Packet Downlink Assignment message content > */
2049static const
2050CSN_DESCR_BEGIN(Measurement_Mapping_struct_t)
2051 M_TYPE (Measurement_Mapping_struct_t, Measurement_Starting_Time, Starting_Frame_Number_t),
2052 M_UINT (Measurement_Mapping_struct_t, MEASUREMENT_INTERVAL, 5),
2053 M_UINT (Measurement_Mapping_struct_t, MEASUREMENT_BITMAP, 8),
2054CSN_DESCR_END (Measurement_Mapping_struct_t)
2055
2056static const
2057CSN_ChoiceElement_t PacketDownlinkID[] =
2058{
Pau Espin Pedrol7cce8252020-01-24 16:41:14 +01002059 {1, 0, 0, M_TYPE(PacketDownlinkID_t, u.Global_TFI, Global_TFI_t)},
2060 {2, 0x02, 0, M_UINT(PacketDownlinkID_t, u.TLLI, 32)},
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002061};
2062
2063static const
2064CSN_DESCR_BEGIN(PacketDownlinkID_t)
2065 M_CHOICE (PacketDownlinkID_t, UnionType, PacketDownlinkID, ElementsOf(PacketDownlinkID)),
2066CSN_DESCR_END (PacketDownlinkID_t)
2067
2068static const
2069CSN_DESCR_BEGIN(PDA_AdditionsR99_t)
2070 M_NEXT_EXIST (PDA_AdditionsR99_t, Exist_EGPRS_Params, 4), /*if Exist_EGPRS_Params == FALSE then none of the following 4 vars exist */
2071 M_UINT (PDA_AdditionsR99_t, EGPRS_WindowSize, 5),
2072 M_UINT (PDA_AdditionsR99_t, LINK_QUALITY_MEASUREMENT_MODE, 2),
2073 M_NEXT_EXIST (PDA_AdditionsR99_t, Exist_BEP_PERIOD2, 1),
2074 M_UINT (PDA_AdditionsR99_t, BEP_PERIOD2, 4),
2075
2076 M_NEXT_EXIST (PDA_AdditionsR99_t, Exist_Packet_Extended_Timing_Advance, 1),
2077 M_UINT (PDA_AdditionsR99_t, Packet_Extended_Timing_Advance, 2),
2078
2079 M_NEXT_EXIST (PDA_AdditionsR99_t, Exist_COMPACT_ReducedMA, 1),
2080 M_TYPE (PDA_AdditionsR99_t, COMPACT_ReducedMA, COMPACT_ReducedMA_t),
2081CSN_DESCR_END (PDA_AdditionsR99_t)
2082
2083static const
2084CSN_DESCR_BEGIN (Packet_Downlink_Assignment_t)
2085 M_UINT (Packet_Downlink_Assignment_t, MESSAGE_TYPE, 6),
2086 M_UINT (Packet_Downlink_Assignment_t, PAGE_MODE, 2),
2087
2088 M_NEXT_EXIST (Packet_Downlink_Assignment_t, Exist_PERSISTENCE_LEVEL, 1),
2089 M_UINT_ARRAY (Packet_Downlink_Assignment_t, PERSISTENCE_LEVEL, 4, 4),
2090
2091 M_TYPE (Packet_Downlink_Assignment_t, ID, PacketDownlinkID_t),
2092
2093 M_FIXED (Packet_Downlink_Assignment_t, 1, 0x00),/*-- Message escape */
2094
2095 M_UINT (Packet_Downlink_Assignment_t, MAC_MODE, 2),
Anders Broman8ea3cbe2020-01-28 17:36:33 +01002096 M_UINT (Packet_Downlink_Assignment_t, RLC_MODE, 1),
2097 M_UINT (Packet_Downlink_Assignment_t, CONTROL_ACK, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002098 M_UINT (Packet_Downlink_Assignment_t, TIMESLOT_ALLOCATION, 8),
2099 M_TYPE (Packet_Downlink_Assignment_t, Packet_Timing_Advance, Packet_Timing_Advance_t),
2100
2101 M_NEXT_EXIST (Packet_Downlink_Assignment_t, Exist_P0_and_BTS_PWR_CTRL_MODE, 3),
2102 M_UINT (Packet_Downlink_Assignment_t, P0, 4),
Anders Broman8ea3cbe2020-01-28 17:36:33 +01002103 M_UINT (Packet_Downlink_Assignment_t, BTS_PWR_CTRL_MODE, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002104 M_UINT (Packet_Downlink_Assignment_t, PR_MODE, 1),
2105
2106 M_NEXT_EXIST (Packet_Downlink_Assignment_t, Exist_Frequency_Parameters, 1),
2107 M_TYPE (Packet_Downlink_Assignment_t, Frequency_Parameters, Frequency_Parameters_t),
2108
2109 M_NEXT_EXIST (Packet_Downlink_Assignment_t, Exist_DOWNLINK_TFI_ASSIGNMENT, 1),
2110 M_UINT (Packet_Downlink_Assignment_t, DOWNLINK_TFI_ASSIGNMENT, 5),
2111
2112 M_NEXT_EXIST (Packet_Downlink_Assignment_t, Exist_Power_Control_Parameters, 1),
2113 M_TYPE (Packet_Downlink_Assignment_t, Power_Control_Parameters, Power_Control_Parameters_t),
2114
2115 M_NEXT_EXIST (Packet_Downlink_Assignment_t, Exist_TBF_Starting_Time, 1),
2116 M_TYPE (Packet_Downlink_Assignment_t, TBF_Starting_Time, Starting_Frame_Number_t),
2117
2118 M_NEXT_EXIST (Packet_Downlink_Assignment_t, Exist_Measurement_Mapping, 1),
2119 M_TYPE (Packet_Downlink_Assignment_t, Measurement_Mapping, Measurement_Mapping_struct_t),
2120
2121 M_NEXT_EXIST_OR_NULL(Packet_Downlink_Assignment_t, Exist_AdditionsR99, 1),
2122 M_TYPE (Packet_Downlink_Assignment_t, AdditionsR99, PDA_AdditionsR99_t),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04002123
2124 M_PADDING_BITS (Packet_Downlink_Assignment_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002125CSN_DESCR_END (Packet_Downlink_Assignment_t)
2126
2127typedef Packet_Downlink_Assignment_t pdlaCheck_t;
2128
2129static const
2130CSN_DESCR_BEGIN(pdlaCheck_t)
2131 M_UINT (pdlaCheck_t, MESSAGE_TYPE, 6),
2132 M_UINT (pdlaCheck_t, PAGE_MODE, 2),
2133
2134 M_NEXT_EXIST (pdlaCheck_t, Exist_PERSISTENCE_LEVEL, 1),
2135 M_UINT_ARRAY (pdlaCheck_t, PERSISTENCE_LEVEL, 4, 4),
2136
2137 M_TYPE (pdlaCheck_t, ID, PacketDownlinkID_t),
2138CSN_DESCR_END (pdlaCheck_t)
2139
2140/* DTM Packet UL Assignment */
2141static const
2142CSN_DESCR_BEGIN(DTM_Packet_Uplink_Assignment_t)
2143 M_UINT (DTM_Packet_Uplink_Assignment_t, CHANNEL_CODING_COMMAND, 2),
Anders Broman8ea3cbe2020-01-28 17:36:33 +01002144 M_UINT (DTM_Packet_Uplink_Assignment_t, TLLI_BLOCK_CHANNEL_CODING, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002145 M_TYPE (DTM_Packet_Uplink_Assignment_t, Packet_Timing_Advance, Packet_Timing_Advance_t),
2146
2147 M_UNION (DTM_Packet_Uplink_Assignment_t, 3),
2148 CSN_ERROR (DTM_Packet_Uplink_Assignment_t, "Not Implemented", CSN_ERROR_STREAM_NOT_SUPPORTED),
2149 M_TYPE (DTM_Packet_Uplink_Assignment_t, u.DTM_Dynamic_Allocation, DTM_Dynamic_Allocation_t),
2150 M_TYPE (DTM_Packet_Uplink_Assignment_t, u.DTM_Single_Block_Allocation, DTM_Single_Block_Allocation_t),
2151 M_NEXT_EXIST_OR_NULL (DTM_Packet_Uplink_Assignment_t, Exist_EGPRS_Parameters, 3),
2152 M_UINT (DTM_Packet_Uplink_Assignment_t, EGPRS_CHANNEL_CODING_COMMAND, 4),
2153 M_UINT (DTM_Packet_Uplink_Assignment_t, RESEGMENT, 1),
2154 M_UINT (DTM_Packet_Uplink_Assignment_t, EGPRS_WindowSize, 5),
2155 M_NEXT_EXIST (DTM_Packet_Uplink_Assignment_t, Exist_Packet_Extended_Timing_Advance, 1),
2156 M_UINT (DTM_Packet_Uplink_Assignment_t, Packet_Extended_Timing_Advance, 2),
2157CSN_DESCR_END(DTM_Packet_Uplink_Assignment_t)
2158
2159static const
2160CSN_DESCR_BEGIN(DTM_UL_t)
2161 M_TYPE (DTM_UL_t, DTM_Packet_Uplink_Assignment, DTM_Packet_Uplink_Assignment_t),
2162CSN_DESCR_END(DTM_UL_t)
2163
2164/* DTM Packet DL Assignment */
2165static const
2166CSN_DESCR_BEGIN(DTM_Packet_Downlink_Assignment_t)
2167 M_UINT (DTM_Packet_Downlink_Assignment_t, MAC_MODE, 2),
Anders Broman8ea3cbe2020-01-28 17:36:33 +01002168 M_UINT (DTM_Packet_Downlink_Assignment_t, RLC_MODE ,1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002169 M_UINT (DTM_Packet_Downlink_Assignment_t, TIMESLOT_ALLOCATION, 8),
2170 M_TYPE (DTM_Packet_Downlink_Assignment_t, Packet_Timing_Advance, Packet_Timing_Advance_t),
2171
2172 M_NEXT_EXIST (DTM_Packet_Downlink_Assignment_t, Exist_P0_and_BTS_PWR_CTRL_MODE, 3),
2173 M_UINT (DTM_Packet_Downlink_Assignment_t, P0, 4),
Anders Broman8ea3cbe2020-01-28 17:36:33 +01002174 M_UINT (DTM_Packet_Downlink_Assignment_t, BTS_PWR_CTRL_MODE, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002175 M_UINT (DTM_Packet_Downlink_Assignment_t, PR_MODE, 1),
2176
2177 M_NEXT_EXIST (DTM_Packet_Downlink_Assignment_t, Exist_Power_Control_Parameters, 1),
2178 M_TYPE (DTM_Packet_Downlink_Assignment_t, Power_Control_Parameters, Power_Control_Parameters_t),
2179
2180 M_NEXT_EXIST (DTM_Packet_Downlink_Assignment_t, Exist_DOWNLINK_TFI_ASSIGNMENT, 1),
2181 M_UINT (DTM_Packet_Downlink_Assignment_t, DOWNLINK_TFI_ASSIGNMENT, 5),
2182
2183 M_NEXT_EXIST (DTM_Packet_Downlink_Assignment_t, Exist_Measurement_Mapping, 1),
2184 M_TYPE (DTM_Packet_Downlink_Assignment_t, Measurement_Mapping, Measurement_Mapping_struct_t),
2185 M_NEXT_EXIST_OR_NULL (DTM_Packet_Downlink_Assignment_t, EGPRS_Mode, 2),
2186 M_UINT (DTM_Packet_Downlink_Assignment_t, EGPRS_WindowSize, 5),
2187 M_UINT (DTM_Packet_Downlink_Assignment_t, LINK_QUALITY_MEASUREMENT_MODE, 2),
2188 M_NEXT_EXIST (DTM_Packet_Downlink_Assignment_t, Exist_Packet_Extended_Timing_Advance, 1),
2189 M_UINT (DTM_Packet_Downlink_Assignment_t, Packet_Extended_Timing_Advance, 2),
2190CSN_DESCR_END(DTM_Packet_Downlink_Assignment_t)
2191
2192static const
2193CSN_DESCR_BEGIN(DTM_DL_t)
2194 M_TYPE (DTM_DL_t, DTM_Packet_Downlink_Assignment, DTM_Packet_Downlink_Assignment_t),
2195CSN_DESCR_END(DTM_DL_t)
2196
2197/* GPRS Broadcast Information */
2198static const
2199CSN_DESCR_BEGIN(DTM_GPRS_Broadcast_Information_t)
2200 M_TYPE (DTM_GPRS_Broadcast_Information_t, GPRS_Cell_Options, GPRS_Cell_Options_t),
2201 M_TYPE (DTM_GPRS_Broadcast_Information_t, GPRS_Power_Control_Parameters, GPRS_Power_Control_Parameters_t),
2202CSN_DESCR_END(DTM_GPRS_Broadcast_Information_t)
2203
2204static const
2205CSN_DESCR_BEGIN(DTM_GPRS_B_t)
2206 M_TYPE (DTM_GPRS_B_t, DTM_GPRS_Broadcast_Information, DTM_GPRS_Broadcast_Information_t),
2207CSN_DESCR_END(DTM_GPRS_B_t)
2208
2209static const
2210CSN_DESCR_BEGIN(DTM_Channel_Request_Description_t)
2211 M_UINT (DTM_Channel_Request_Description_t, DTM_Pkt_Est_Cause, 2),
2212 M_TYPE (DTM_Channel_Request_Description_t, Channel_Request_Description, Channel_Request_Description_t),
2213 M_NEXT_EXIST (DTM_Channel_Request_Description_t, Exist_PFI, 1),
2214 M_UINT (DTM_Channel_Request_Description_t, PFI, 7),
2215CSN_DESCR_END(DTM_Channel_Request_Description_t)
2216/* DTM */
2217
2218/*< Packet Paging Request message content > */
2219typedef struct
2220{
2221 guint8 Length_of_Mobile_Identity_contents;/* bit (4) */
2222 guint8 Mobile_Identity[8];/* octet (val (Length of Mobile Identity contents)) */
2223} Mobile_Identity_t; /* helper */
2224
2225static const
2226CSN_DESCR_BEGIN(Mobile_Identity_t)
2227 M_UINT (Mobile_Identity_t, Length_of_Mobile_Identity_contents, 4),
2228 M_VAR_ARRAY (Mobile_Identity_t, Mobile_Identity, Length_of_Mobile_Identity_contents, 0),
2229CSN_DESCR_END (Mobile_Identity_t)
2230
2231static const
2232CSN_DESCR_BEGIN(Page_request_for_TBF_establishment_t)
2233 M_UNION (Page_request_for_TBF_establishment_t, 2),
2234 M_UINT_ARRAY (Page_request_for_TBF_establishment_t, u.PTMSI, 8, 4),/* bit (32) == 8*4 */
2235 M_TYPE (Page_request_for_TBF_establishment_t, u.Mobile_Identity, Mobile_Identity_t),
2236CSN_DESCR_END (Page_request_for_TBF_establishment_t)
2237
2238static const
2239CSN_DESCR_BEGIN(Page_request_for_RR_conn_t)
2240 M_UNION (Page_request_for_RR_conn_t, 2),
2241 M_UINT_ARRAY (Page_request_for_RR_conn_t, u.TMSI, 8, 4),/* bit (32) == 8*4 */
2242 M_TYPE (Page_request_for_RR_conn_t, u.Mobile_Identity, Mobile_Identity_t),
2243
2244 M_UINT (Page_request_for_RR_conn_t, CHANNEL_NEEDED, 2),
2245
2246 M_NEXT_EXIST (Page_request_for_RR_conn_t, Exist_eMLPP_PRIORITY, 1),
2247 M_UINT (Page_request_for_RR_conn_t, eMLPP_PRIORITY, 3),
2248CSN_DESCR_END (Page_request_for_RR_conn_t)
2249
2250static const
2251CSN_DESCR_BEGIN(Repeated_Page_info_t)
2252 M_UNION (Repeated_Page_info_t, 2),
2253 M_TYPE (Repeated_Page_info_t, u.Page_req_TBF, Page_request_for_TBF_establishment_t),
2254 M_TYPE (Repeated_Page_info_t, u.Page_req_RR, Page_request_for_RR_conn_t),
2255CSN_DESCR_END (Repeated_Page_info_t)
2256
2257static const
2258CSN_DESCR_BEGIN(Packet_Paging_Request_t)
2259 M_UINT (Packet_Paging_Request_t, MESSAGE_TYPE, 6),
2260 M_UINT (Packet_Paging_Request_t, PAGE_MODE, 2),
2261
2262 M_NEXT_EXIST (Packet_Paging_Request_t, Exist_PERSISTENCE_LEVEL, 1),
2263 M_UINT_ARRAY (Packet_Paging_Request_t, PERSISTENCE_LEVEL, 4, 4), /* 4bit*4 */
2264
2265 M_NEXT_EXIST (Packet_Paging_Request_t, Exist_NLN, 1),
2266 M_UINT (Packet_Paging_Request_t, NLN, 2),
2267
2268 M_REC_TARRAY (Packet_Paging_Request_t, Repeated_Page_info, Repeated_Page_info_t, Count_Repeated_Page_info),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04002269 M_PADDING_BITS(Packet_Paging_Request_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002270CSN_DESCR_END (Packet_Paging_Request_t)
2271
2272static const
2273CSN_DESCR_BEGIN(Packet_PDCH_Release_t)
2274 M_UINT (Packet_PDCH_Release_t, MESSAGE_TYPE, 6),
2275 M_UINT (Packet_PDCH_Release_t, PAGE_MODE, 2),
2276
2277 M_FIXED (Packet_PDCH_Release_t, 1, 0x01),
2278 M_UINT (Packet_PDCH_Release_t, TIMESLOTS_AVAILABLE, 8),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04002279 M_PADDING_BITS(Packet_PDCH_Release_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002280CSN_DESCR_END (Packet_PDCH_Release_t)
2281
2282/*< Packet Power Control/Timing Advance message content >*/
2283static const
2284CSN_DESCR_BEGIN(GlobalTimingAndPower_t)
2285 M_TYPE (GlobalTimingAndPower_t, Global_Packet_Timing_Advance, Global_Packet_Timing_Advance_t),
2286 M_TYPE (GlobalTimingAndPower_t, Power_Control_Parameters, Power_Control_Parameters_t),
2287CSN_DESCR_END (GlobalTimingAndPower_t)
2288
2289static const
2290CSN_DESCR_BEGIN(GlobalTimingOrPower_t)
2291 M_UNION (GlobalTimingOrPower_t, 2),
2292 M_TYPE (GlobalTimingOrPower_t, u.Global_Packet_Timing_Advance, Global_Packet_Timing_Advance_t),
2293 M_TYPE (GlobalTimingOrPower_t, u.Power_Control_Parameters, Power_Control_Parameters_t),
2294CSN_DESCR_END (GlobalTimingOrPower_t)
2295
2296static const
2297CSN_ChoiceElement_t PacketPowerControlTimingAdvanceID[] =
2298{
Pau Espin Pedrol7cce8252020-01-24 16:41:14 +01002299 {1, 0, 0, M_TYPE(PacketPowerControlTimingAdvanceID_t, u.Global_TFI, Global_TFI_t)},
2300 {3, 0x06, 0, M_UINT(PacketPowerControlTimingAdvanceID_t, u.TQI, 16)},
2301 {3, 0x07, 0, M_TYPE(PacketPowerControlTimingAdvanceID_t, u.Packet_Request_Reference, Packet_Request_Reference_t)},
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002302};
2303
2304static const
2305CSN_DESCR_BEGIN(PacketPowerControlTimingAdvanceID_t)
2306 M_CHOICE (PacketPowerControlTimingAdvanceID_t, UnionType, PacketPowerControlTimingAdvanceID, ElementsOf(PacketPowerControlTimingAdvanceID)),
2307CSN_DESCR_END (PacketPowerControlTimingAdvanceID_t)
2308
2309static const
2310CSN_DESCR_BEGIN(Packet_Power_Control_Timing_Advance_t)
2311 M_UINT (Packet_Power_Control_Timing_Advance_t, MESSAGE_TYPE, 6),
2312 M_UINT (Packet_Power_Control_Timing_Advance_t, PAGE_MODE, 2),
2313
2314 M_TYPE (Packet_Power_Control_Timing_Advance_t, ID, PacketPowerControlTimingAdvanceID_t),
2315
2316 /*-- Message escape*/
2317 M_FIXED (Packet_Power_Control_Timing_Advance_t, 1, 0x00),
2318
2319 M_NEXT_EXIST (Packet_Power_Control_Timing_Advance_t, Exist_Global_Power_Control_Parameters, 1),
2320 M_TYPE (Packet_Power_Control_Timing_Advance_t, Global_Power_Control_Parameters, Global_Power_Control_Parameters_t),
2321
2322 M_UNION (Packet_Power_Control_Timing_Advance_t, 2),
2323 M_TYPE (Packet_Power_Control_Timing_Advance_t, u.GlobalTimingAndPower, GlobalTimingAndPower_t),
2324 M_TYPE (Packet_Power_Control_Timing_Advance_t, u.GlobalTimingOrPower, GlobalTimingOrPower_t),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04002325
2326 M_PADDING_BITS(Packet_Power_Control_Timing_Advance_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002327CSN_DESCR_END (Packet_Power_Control_Timing_Advance_t)
2328
2329/*< Packet Queueing Notification message content > */
2330static const
2331CSN_DESCR_BEGIN(Packet_Queueing_Notification_t)
2332 M_UINT (Packet_Queueing_Notification_t, MESSAGE_TYPE, 6),
2333 M_UINT (Packet_Queueing_Notification_t, PAGE_MODE, 2),
2334
2335 M_FIXED (Packet_Queueing_Notification_t, 3, 0x07),/* 111 Fixed */
2336 M_TYPE (Packet_Queueing_Notification_t, Packet_Request_Reference, Packet_Request_Reference_t),
2337
2338 M_UINT (Packet_Queueing_Notification_t, TQI, 16),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04002339 M_PADDING_BITS(Packet_Queueing_Notification_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002340CSN_DESCR_END (Packet_Queueing_Notification_t)
2341
2342/* USED in Packet Timeslot Reconfigure message content
2343 * This is almost the same structure as used in
2344 * <Packet Uplink Assignment message content> but UPLINK_TFI_ASSIGNMENT is removed.
2345 */
2346static const
2347CSN_DESCR_BEGIN(TRDynamic_Allocation_t)
2348 M_UINT (TRDynamic_Allocation_t, Extended_Dynamic_Allocation, 1),
2349
2350 M_NEXT_EXIST (TRDynamic_Allocation_t, Exist_P0, 2),
2351 M_UINT (TRDynamic_Allocation_t, P0, 4),
2352 M_UINT (TRDynamic_Allocation_t, PR_MODE, 1),
2353
2354 M_UINT (TRDynamic_Allocation_t, USF_GRANULARITY, 1),
2355
2356 M_NEXT_EXIST (TRDynamic_Allocation_t, Exist_RLC_DATA_BLOCKS_GRANTED, 1),
2357 M_UINT (TRDynamic_Allocation_t, RLC_DATA_BLOCKS_GRANTED, 8),
2358
2359 M_NEXT_EXIST (TRDynamic_Allocation_t, Exist_TBF_Starting_Time, 1),
2360 M_TYPE (TRDynamic_Allocation_t, TBF_Starting_Time, Starting_Frame_Number_t),
2361
2362 M_UNION (TRDynamic_Allocation_t, 2),
2363 M_TYPE_ARRAY (TRDynamic_Allocation_t, u.Timeslot_Allocation, Timeslot_Allocation_t, 8),
2364 M_TYPE (TRDynamic_Allocation_t, u.Timeslot_Allocation_Power_Ctrl_Param, Timeslot_Allocation_Power_Ctrl_Param_t),
2365CSN_DESCR_END (TRDynamic_Allocation_t)
2366
2367/*< Packet Timeslot Reconfigure message content > */
2368static const
2369CSN_DESCR_BEGIN(PTR_GPRS_AdditionsR99_t)
2370 M_NEXT_EXIST (PTR_GPRS_AdditionsR99_t, Exist_Packet_Extended_Timing_Advance, 1),
2371 M_UINT (PTR_GPRS_AdditionsR99_t, Packet_Extended_Timing_Advance, 2),
2372CSN_DESCR_END (PTR_GPRS_AdditionsR99_t)
2373
2374static const
2375CSN_DESCR_BEGIN (PTR_GPRS_t)
2376 M_UINT (PTR_GPRS_t, CHANNEL_CODING_COMMAND, 2),
2377 M_TYPE (PTR_GPRS_t, Common_Timeslot_Reconfigure_Data.Global_Packet_Timing_Advance, Global_Packet_Timing_Advance_t),
2378 M_UINT (PTR_GPRS_t, Common_Timeslot_Reconfigure_Data.DOWNLINK_RLC_MODE, 1),
2379 M_UINT (PTR_GPRS_t, Common_Timeslot_Reconfigure_Data.CONTROL_ACK, 1),
2380
2381 M_NEXT_EXIST (PTR_GPRS_t, Common_Timeslot_Reconfigure_Data.Exist_DOWNLINK_TFI_ASSIGNMENT, 1),
2382 M_UINT (PTR_GPRS_t, Common_Timeslot_Reconfigure_Data.DOWNLINK_TFI_ASSIGNMENT, 5),
2383
2384 M_NEXT_EXIST (PTR_GPRS_t, Common_Timeslot_Reconfigure_Data.Exist_UPLINK_TFI_ASSIGNMENT, 1),
2385 M_UINT (PTR_GPRS_t, Common_Timeslot_Reconfigure_Data.UPLINK_TFI_ASSIGNMENT, 5),
2386
2387 M_UINT (PTR_GPRS_t, Common_Timeslot_Reconfigure_Data.DOWNLINK_TIMESLOT_ALLOCATION, 8),
2388
2389 M_NEXT_EXIST (PTR_GPRS_t, Common_Timeslot_Reconfigure_Data.Exist_Frequency_Parameters, 1),
2390 M_TYPE (PTR_GPRS_t, Common_Timeslot_Reconfigure_Data.Frequency_Parameters, Frequency_Parameters_t),
2391
2392 M_UNION (PTR_GPRS_t, 2),
2393 M_TYPE (PTR_GPRS_t, u.Dynamic_Allocation, TRDynamic_Allocation_t),
2394 CSN_ERROR (PTR_GPRS_t, "1 - Fixed Allocation was removed", CSN_ERROR_STREAM_NOT_SUPPORTED),
2395
2396 M_NEXT_EXIST_OR_NULL(PTR_GPRS_t, Exist_AdditionsR99, 1),
2397 M_TYPE (PTR_GPRS_t, AdditionsR99, PTR_GPRS_AdditionsR99_t),
2398CSN_DESCR_END (PTR_GPRS_t)
2399
2400static const
2401CSN_DESCR_BEGIN(PTR_EGPRS_00_t)
2402 M_NEXT_EXIST (PTR_EGPRS_00_t, Exist_COMPACT_ReducedMA, 1),
2403 M_TYPE (PTR_EGPRS_00_t, COMPACT_ReducedMA, COMPACT_ReducedMA_t),
2404
2405 M_UINT (PTR_EGPRS_00_t, EGPRS_ChannelCodingCommand, 4),
2406 M_UINT (PTR_EGPRS_00_t, RESEGMENT, 1),
2407
2408 M_NEXT_EXIST (PTR_EGPRS_00_t, Exist_DOWNLINK_EGPRS_WindowSize, 1),
2409 M_UINT (PTR_EGPRS_00_t, DOWNLINK_EGPRS_WindowSize, 5),
2410
2411 M_NEXT_EXIST (PTR_EGPRS_00_t, Exist_UPLINK_EGPRS_WindowSize, 1),
2412 M_UINT (PTR_EGPRS_00_t, UPLINK_EGPRS_WindowSize, 5),
2413
2414 M_UINT (PTR_EGPRS_00_t, LINK_QUALITY_MEASUREMENT_MODE, 2),
2415
2416 M_TYPE (PTR_EGPRS_00_t, Common_Timeslot_Reconfigure_Data.Global_Packet_Timing_Advance, Global_Packet_Timing_Advance_t),
2417
2418 M_NEXT_EXIST (PTR_EGPRS_00_t, Exist_Packet_Extended_Timing_Advance, 1),
2419 M_UINT (PTR_EGPRS_00_t, Packet_Extended_Timing_Advance, 2),
2420
2421 M_UINT (PTR_EGPRS_00_t, Common_Timeslot_Reconfigure_Data.DOWNLINK_RLC_MODE, 1),
2422 M_UINT (PTR_EGPRS_00_t, Common_Timeslot_Reconfigure_Data.CONTROL_ACK, 1),
2423
2424 M_NEXT_EXIST (PTR_EGPRS_00_t, Common_Timeslot_Reconfigure_Data.Exist_DOWNLINK_TFI_ASSIGNMENT, 1),
2425 M_UINT (PTR_EGPRS_00_t, Common_Timeslot_Reconfigure_Data.DOWNLINK_TFI_ASSIGNMENT, 5),
2426
2427 M_NEXT_EXIST (PTR_EGPRS_00_t, Common_Timeslot_Reconfigure_Data.Exist_UPLINK_TFI_ASSIGNMENT, 1),
2428 M_UINT (PTR_EGPRS_00_t, Common_Timeslot_Reconfigure_Data.UPLINK_TFI_ASSIGNMENT, 5),
2429
2430 M_UINT (PTR_EGPRS_00_t, Common_Timeslot_Reconfigure_Data.DOWNLINK_TIMESLOT_ALLOCATION, 8),
2431
2432 M_NEXT_EXIST (PTR_EGPRS_00_t, Common_Timeslot_Reconfigure_Data.Exist_Frequency_Parameters, 1),
2433 M_TYPE (PTR_EGPRS_00_t, Common_Timeslot_Reconfigure_Data.Frequency_Parameters, Frequency_Parameters_t),
2434
2435 M_UNION (PTR_EGPRS_00_t, 2),
2436 M_TYPE (PTR_EGPRS_00_t, u.Dynamic_Allocation, TRDynamic_Allocation_t),
2437 CSN_ERROR (PTR_EGPRS_00_t, "1 <Fixed Allocation>", CSN_ERROR_STREAM_NOT_SUPPORTED),
2438CSN_DESCR_END (PTR_EGPRS_00_t)
2439
2440static const
2441CSN_DESCR_BEGIN(PTR_EGPRS_t)
2442 M_UNION (PTR_EGPRS_t, 4),
2443 M_TYPE (PTR_EGPRS_t, u.PTR_EGPRS_00, PTR_EGPRS_00_t),
2444 CSN_ERROR (PTR_EGPRS_t, "01 <PTR_EGPRS>", CSN_ERROR_STREAM_NOT_SUPPORTED),
2445 CSN_ERROR (PTR_EGPRS_t, "10 <PTR_EGPRS>", CSN_ERROR_STREAM_NOT_SUPPORTED),
2446 CSN_ERROR (PTR_EGPRS_t, "11 <PTR_EGPRS>", CSN_ERROR_STREAM_NOT_SUPPORTED),
2447CSN_DESCR_END (PTR_EGPRS_t)
2448
2449static const
2450CSN_DESCR_BEGIN(Packet_Timeslot_Reconfigure_t)
2451 M_UINT (Packet_Timeslot_Reconfigure_t, MESSAGE_TYPE, 6),
2452 M_UINT (Packet_Timeslot_Reconfigure_t, PAGE_MODE, 2),
2453
2454 M_FIXED (Packet_Timeslot_Reconfigure_t, 1, 0x00),
2455 M_TYPE (Packet_Timeslot_Reconfigure_t, Global_TFI, Global_TFI_t),
2456
2457 M_UNION (Packet_Timeslot_Reconfigure_t, 2),
2458 M_TYPE (Packet_Timeslot_Reconfigure_t, u.PTR_GPRS_Struct, PTR_GPRS_t),
2459 M_TYPE (Packet_Timeslot_Reconfigure_t, u.PTR_EGPRS_Struct, PTR_EGPRS_t),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04002460
2461 M_PADDING_BITS(Packet_Timeslot_Reconfigure_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002462CSN_DESCR_END (Packet_Timeslot_Reconfigure_t)
2463
2464typedef Packet_Timeslot_Reconfigure_t PTRCheck_t;
2465
2466static const
2467CSN_DESCR_BEGIN(PTRCheck_t)
2468 M_UINT (PTRCheck_t, MESSAGE_TYPE, 6),
2469 M_UINT (PTRCheck_t, PAGE_MODE, 2),
2470 M_FIXED (PTRCheck_t, 1, 0x00),/* 0 fixed */
2471 M_TYPE (PTRCheck_t, Global_TFI, Global_TFI_t),
2472CSN_DESCR_END (PTRCheck_t)
2473
2474/*< Packet PRACH Parameters message content > */
2475static const
2476CSN_DESCR_BEGIN(PRACH_Control_t)
2477 M_UINT_ARRAY (PRACH_Control_t, ACC_CONTR_CLASS, 8, 2), /* bit (16) == 8bit*2 */
2478 M_UINT_ARRAY (PRACH_Control_t, MAX_RETRANS, 2, 4), /* bit (2) * 4 */
2479 M_UINT (PRACH_Control_t, S, 4),
2480 M_UINT (PRACH_Control_t, TX_INT, 4),
2481 M_NEXT_EXIST (PRACH_Control_t, Exist_PERSISTENCE_LEVEL, 1),
2482 M_UINT_ARRAY (PRACH_Control_t, PERSISTENCE_LEVEL, 4, 4),
2483CSN_DESCR_END (PRACH_Control_t)
2484
2485static const
2486CSN_DESCR_BEGIN(Cell_Allocation_t)
2487 M_REC_ARRAY (Cell_Allocation_t, RFL_Number, NoOfRFLs, 4),
2488CSN_DESCR_END (Cell_Allocation_t)
2489
2490static const
2491CSN_DESCR_BEGIN(HCS_t)
2492 M_UINT (HCS_t, PRIORITY_CLASS, 3),
2493 M_UINT (HCS_t, HCS_THR, 5),
2494CSN_DESCR_END (HCS_t)
2495
2496static const
2497CSN_DESCR_BEGIN(Location_Repeat_t)
2498 M_UINT (Location_Repeat_t, PBCCH_LOCATION, 2),
2499 M_UINT (Location_Repeat_t, PSI1_REPEAT_PERIOD, 4),
2500CSN_DESCR_END (Location_Repeat_t)
2501
2502static const
2503CSN_DESCR_BEGIN(SI13_PBCCH_Location_t)
2504 M_UNION (SI13_PBCCH_Location_t, 2),
2505 M_UINT (SI13_PBCCH_Location_t, u.SI13_LOCATION, 1),
2506 M_TYPE (SI13_PBCCH_Location_t, u.lr, Location_Repeat_t),
2507CSN_DESCR_END (SI13_PBCCH_Location_t)
2508
2509static const
2510CSN_DESCR_BEGIN(Cell_Selection_t)
2511 M_UINT (Cell_Selection_t, BSIC, 6),
2512 M_UINT (Cell_Selection_t, CELL_BAR_ACCESS_2, 1),
2513 M_UINT (Cell_Selection_t, EXC_ACC, 1),
2514 M_UINT (Cell_Selection_t, SAME_RA_AS_SERVING_CELL, 1),
2515 M_NEXT_EXIST (Cell_Selection_t, Exist_RXLEV_and_TXPWR, 2),
2516 M_UINT (Cell_Selection_t, GPRS_RXLEV_ACCESS_MIN, 6),
2517 M_UINT (Cell_Selection_t, GPRS_MS_TXPWR_MAX_CCH, 5),
2518 M_NEXT_EXIST (Cell_Selection_t, Exist_OFFSET_and_TIME, 2),
2519 M_UINT (Cell_Selection_t, GPRS_TEMPORARY_OFFSET, 3),
2520 M_UINT (Cell_Selection_t, GPRS_PENALTY_TIME, 5),
2521 M_NEXT_EXIST (Cell_Selection_t, Exist_GPRS_RESELECT_OFFSET, 1),
2522 M_UINT (Cell_Selection_t, GPRS_RESELECT_OFFSET, 5),
2523 M_NEXT_EXIST (Cell_Selection_t, Exist_HCS, 1),
2524 M_TYPE (Cell_Selection_t, HCS, HCS_t),
2525 M_NEXT_EXIST (Cell_Selection_t, Exist_SI13_PBCCH_Location, 1),
2526 M_TYPE (Cell_Selection_t, SI13_PBCCH_Location, SI13_PBCCH_Location_t),
2527CSN_DESCR_END (Cell_Selection_t)
2528
2529static const
2530CSN_DESCR_BEGIN(Cell_Selection_Params_With_FreqDiff_t)
2531 M_VAR_BITMAP (Cell_Selection_Params_With_FreqDiff_t, FREQUENCY_DIFF, FREQ_DIFF_LENGTH, 0),
2532 M_TYPE (Cell_Selection_Params_With_FreqDiff_t, Cell_SelectionParams, Cell_Selection_t),
2533CSN_DESCR_END (Cell_Selection_Params_With_FreqDiff_t)
2534
2535static const
2536CSN_DESCR_BEGIN(NeighbourCellParameters_t)
2537 M_UINT (NeighbourCellParameters_t, START_FREQUENCY, 10),
2538 M_TYPE (NeighbourCellParameters_t, Cell_Selection, Cell_Selection_t),
2539 M_UINT (NeighbourCellParameters_t, NR_OF_REMAINING_CELLS, 4),
2540 M_UINT_OFFSET(NeighbourCellParameters_t, FREQ_DIFF_LENGTH, 3, 1),/* offset 1 */
2541 M_VAR_TARRAY (NeighbourCellParameters_t, Cell_Selection_Params_With_FreqDiff, Cell_Selection_Params_With_FreqDiff_t, NR_OF_REMAINING_CELLS),
2542CSN_DESCR_END (NeighbourCellParameters_t)
2543
2544static const
2545CSN_DESCR_BEGIN(NeighbourCellList_t)
2546 M_REC_TARRAY (NeighbourCellList_t, Parameters, NeighbourCellParameters_t, Count),
2547CSN_DESCR_END (NeighbourCellList_t)
2548
2549static const
2550CSN_DESCR_BEGIN(Cell_Selection_2_t)
2551 M_UINT (Cell_Selection_2_t, CELL_BAR_ACCESS_2, 1),
2552 M_UINT (Cell_Selection_2_t, EXC_ACC, 1),
2553 M_UINT (Cell_Selection_2_t, SAME_RA_AS_SERVING_CELL, 1),
2554 M_NEXT_EXIST (Cell_Selection_2_t, Exist_RXLEV_and_TXPWR, 2),
2555 M_UINT (Cell_Selection_2_t, GPRS_RXLEV_ACCESS_MIN, 6),
2556 M_UINT (Cell_Selection_2_t, GPRS_MS_TXPWR_MAX_CCH, 5),
2557 M_NEXT_EXIST (Cell_Selection_2_t, Exist_OFFSET_and_TIME, 2),
2558 M_UINT (Cell_Selection_2_t, GPRS_TEMPORARY_OFFSET, 3),
2559 M_UINT (Cell_Selection_2_t, GPRS_PENALTY_TIME, 5),
2560 M_NEXT_EXIST (Cell_Selection_2_t, Exist_GPRS_RESELECT_OFFSET, 1),
2561 M_UINT (Cell_Selection_2_t, GPRS_RESELECT_OFFSET, 5),
2562 M_NEXT_EXIST (Cell_Selection_2_t, Exist_HCS, 1),
2563 M_TYPE (Cell_Selection_2_t, HCS, HCS_t),
2564 M_NEXT_EXIST (Cell_Selection_2_t, Exist_SI13_PBCCH_Location, 1),
2565 M_TYPE (Cell_Selection_2_t, SI13_PBCCH_Location, SI13_PBCCH_Location_t),
2566CSN_DESCR_END (Cell_Selection_2_t)
2567
2568static const
2569CSN_DESCR_BEGIN(Packet_PRACH_Parameters_t)
2570 M_UINT (Packet_PRACH_Parameters_t, MESSAGE_TYPE, 6),
2571 M_UINT (Packet_PRACH_Parameters_t, PAGE_MODE, 2),
2572
2573 M_TYPE (Packet_PRACH_Parameters_t, PRACH_Control, PRACH_Control_t),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04002574 M_PADDING_BITS(Packet_PRACH_Parameters_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002575CSN_DESCR_END (Packet_PRACH_Parameters_t)
2576
2577/* < Packet Access Reject message content > */
2578static const
2579CSN_ChoiceElement_t RejectID[] =
2580{
Pau Espin Pedrol7cce8252020-01-24 16:41:14 +01002581 {1, 0x00, 0, M_UINT(RejectID_t, u.TLLI, 32)},
2582 {2, 0x02, 0, M_TYPE(RejectID_t, u.Packet_Request_Reference, Packet_Request_Reference_t)},
2583 {2, 0x03, 0, M_TYPE(RejectID_t, u.Global_TFI, Global_TFI_t)},
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002584};
2585
2586static const
2587CSN_DESCR_BEGIN(RejectID_t)
2588 M_CHOICE (RejectID_t, UnionType, RejectID, ElementsOf(RejectID)),
2589CSN_DESCR_END (RejectID_t)
2590
2591static const
2592CSN_DESCR_BEGIN(Reject_t)
2593 M_TYPE (Reject_t, ID, RejectID_t),
2594
2595 M_NEXT_EXIST (Reject_t, Exist_Wait, 2),
2596 M_UINT (Reject_t, WAIT_INDICATION, 8),
2597 M_UINT (Reject_t, WAIT_INDICATION_SIZE, 1),
2598CSN_DESCR_END (Reject_t)
2599
2600static const
2601CSN_DESCR_BEGIN(Packet_Access_Reject_t)
2602 M_UINT (Packet_Access_Reject_t, MESSAGE_TYPE, 6),
2603 M_UINT (Packet_Access_Reject_t, PAGE_MODE, 2),
2604
Pau Espin Pedrol81b40cb2020-03-23 15:23:51 +01002605 M_REC_TARRAY_1(Packet_Access_Reject_t, Reject, Reject_t, Count_Reject),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04002606 M_PADDING_BITS(Packet_Access_Reject_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002607CSN_DESCR_END (Packet_Access_Reject_t)
2608
2609/* < Packet Cell Change Order message content > */
2610static const
2611CSN_ChoiceElement_t PacketCellChangeOrderID[] =
2612{
Pau Espin Pedrol7cce8252020-01-24 16:41:14 +01002613 {1, 0, 0, M_TYPE(PacketCellChangeOrderID_t, u.Global_TFI, Global_TFI_t)},
2614 {2, 0x02, 0, M_UINT(PacketCellChangeOrderID_t, u.TLLI, 32)},
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002615};
2616/* PacketCellChangeOrderID_t; */
2617
2618static const
2619CSN_DESCR_BEGIN(PacketCellChangeOrderID_t)
2620 M_CHOICE (PacketCellChangeOrderID_t, UnionType, PacketCellChangeOrderID, ElementsOf(PacketCellChangeOrderID)),
2621CSN_DESCR_END (PacketCellChangeOrderID_t)
2622
2623static const
2624CSN_DESCR_BEGIN(h_FreqBsicCell_t)
2625 M_UINT (h_FreqBsicCell_t, BSIC, 6),
2626 M_TYPE (h_FreqBsicCell_t, Cell_Selection, Cell_Selection_t),
2627CSN_DESCR_END (h_FreqBsicCell_t)
2628
2629static const CSN_DESCR_BEGIN(CellSelectionParamsWithFreqDiff_t)
2630 /*FREQUENCY_DIFF is really an integer but the number of bits to decode it are stored in FREQ_DIFF_LENGTH*/
2631 M_VAR_BITMAP (CellSelectionParamsWithFreqDiff_t, FREQUENCY_DIFF, FREQ_DIFF_LENGTH, 0),
2632 M_UINT (CellSelectionParamsWithFreqDiff_t, BSIC, 6),
2633 M_NEXT_EXIST (CellSelectionParamsWithFreqDiff_t, Exist_CellSelectionParams, 1),
2634 M_TYPE (CellSelectionParamsWithFreqDiff_t, CellSelectionParams, Cell_Selection_2_t),
2635CSN_DESCR_END (CellSelectionParamsWithFreqDiff_t)
2636
2637static const
2638CSN_DESCR_BEGIN(Add_Frequency_list_t)
2639 M_UINT (Add_Frequency_list_t, START_FREQUENCY, 10),
2640 M_UINT (Add_Frequency_list_t, BSIC, 6),
2641
2642 M_NEXT_EXIST (Add_Frequency_list_t, Exist_Cell_Selection, 1),
2643 M_TYPE (Add_Frequency_list_t, Cell_Selection, Cell_Selection_2_t),
2644
2645 M_UINT (Add_Frequency_list_t, NR_OF_FREQUENCIES, 5),
2646 M_UINT_OFFSET(Add_Frequency_list_t, FREQ_DIFF_LENGTH, 3, 1),/*offset 1*/
2647
2648 M_VAR_TARRAY (Add_Frequency_list_t, CellSelectionParamsWithFreqDiff, CellSelectionParamsWithFreqDiff_t, NR_OF_FREQUENCIES),
2649CSN_DESCR_END (Add_Frequency_list_t)
2650
2651static const CSN_DESCR_BEGIN(Removed_Freq_Index_t)
2652 M_UINT(Removed_Freq_Index_t, REMOVED_FREQ_INDEX, 6),
2653CSN_DESCR_END(Removed_Freq_Index_t)
2654
2655static const
2656CSN_DESCR_BEGIN(NC_Frequency_list_t)
2657 M_NEXT_EXIST (NC_Frequency_list_t, Exist_REMOVED_FREQ, 2),
2658 M_UINT_OFFSET(NC_Frequency_list_t, NR_OF_REMOVED_FREQ, 5, 1),/*offset 1*/
2659 M_VAR_TARRAY (NC_Frequency_list_t, Removed_Freq_Index, Removed_Freq_Index_t, NR_OF_REMOVED_FREQ),
2660 M_REC_TARRAY (NC_Frequency_list_t, Add_Frequency, Add_Frequency_list_t, Count_Add_Frequency),
2661CSN_DESCR_END (NC_Frequency_list_t)
2662
2663static const
2664CSN_DESCR_BEGIN(NC_Measurement_Parameters_t)
2665 M_UINT (NC_Measurement_Parameters_t, NETWORK_CONTROL_ORDER, 2),
2666
2667 M_NEXT_EXIST (NC_Measurement_Parameters_t, Exist_NC, 3),
2668 M_UINT (NC_Measurement_Parameters_t, NC_NON_DRX_PERIOD, 3),
2669 M_UINT (NC_Measurement_Parameters_t, NC_REPORTING_PERIOD_I, 3),
2670 M_UINT (NC_Measurement_Parameters_t, NC_REPORTING_PERIOD_T, 3),
2671CSN_DESCR_END (NC_Measurement_Parameters_t)
2672
2673static const
2674CSN_DESCR_BEGIN(NC_Measurement_Parameters_with_Frequency_List_t)
2675 M_UINT (NC_Measurement_Parameters_with_Frequency_List_t, NETWORK_CONTROL_ORDER, 2),
2676
2677 M_NEXT_EXIST (NC_Measurement_Parameters_with_Frequency_List_t, Exist_NC, 3),
2678 M_UINT (NC_Measurement_Parameters_with_Frequency_List_t, NC_NON_DRX_PERIOD, 3),
2679 M_UINT (NC_Measurement_Parameters_with_Frequency_List_t, NC_REPORTING_PERIOD_I, 3),
2680 M_UINT (NC_Measurement_Parameters_with_Frequency_List_t, NC_REPORTING_PERIOD_T, 3),
2681
2682 M_NEXT_EXIST (NC_Measurement_Parameters_with_Frequency_List_t, Exist_NC_FREQUENCY_LIST, 1),
2683 M_TYPE (NC_Measurement_Parameters_with_Frequency_List_t, NC_Frequency_list, NC_Frequency_list_t),
2684CSN_DESCR_END (NC_Measurement_Parameters_with_Frequency_List_t)
2685
2686/*< Packet Cell Change Order message contents >*/
2687static const
2688CSN_DESCR_BEGIN(BA_IND_t)
2689 M_UINT (BA_IND_t, BA_IND, 1),
2690 M_UINT (BA_IND_t, BA_IND_3G, 1),
2691CSN_DESCR_END (BA_IND_t)
2692
2693static const
2694CSN_DESCR_BEGIN(GPRSReportPriority_t)
2695 M_UINT (GPRSReportPriority_t, NUMBER_CELLS, 7),
2696 M_VAR_BITMAP (GPRSReportPriority_t, REPORT_PRIORITY, NUMBER_CELLS, 0),
2697CSN_DESCR_END (GPRSReportPriority_t)
2698
2699static const
2700CSN_DESCR_BEGIN(OffsetThreshold_t)
2701 M_UINT (OffsetThreshold_t, REPORTING_OFFSET, 3),
2702 M_UINT (OffsetThreshold_t, REPORTING_THRESHOLD, 3),
2703CSN_DESCR_END (OffsetThreshold_t)
2704
2705static const
2706CSN_DESCR_BEGIN(GPRSMeasurementParams_PMO_PCCO_t)
2707 M_NEXT_EXIST (GPRSMeasurementParams_PMO_PCCO_t, Exist_MULTI_BAND_REPORTING, 1),
2708 M_UINT (GPRSMeasurementParams_PMO_PCCO_t, MULTI_BAND_REPORTING, 2),
2709
2710 M_NEXT_EXIST (GPRSMeasurementParams_PMO_PCCO_t, Exist_SERVING_BAND_REPORTING, 1),
2711 M_UINT (GPRSMeasurementParams_PMO_PCCO_t, SERVING_BAND_REPORTING, 2),
2712
2713 M_UINT (GPRSMeasurementParams_PMO_PCCO_t, SCALE_ORD, 2),
2714
2715 M_NEXT_EXIST (GPRSMeasurementParams_PMO_PCCO_t, Exist_OffsetThreshold900, 1),
2716 M_TYPE (GPRSMeasurementParams_PMO_PCCO_t, OffsetThreshold900, OffsetThreshold_t),
2717
2718 M_NEXT_EXIST (GPRSMeasurementParams_PMO_PCCO_t, Exist_OffsetThreshold1800, 1),
2719 M_TYPE (GPRSMeasurementParams_PMO_PCCO_t, OffsetThreshold1800, OffsetThreshold_t),
2720
2721 M_NEXT_EXIST (GPRSMeasurementParams_PMO_PCCO_t, Exist_OffsetThreshold400, 1),
2722 M_TYPE (GPRSMeasurementParams_PMO_PCCO_t, OffsetThreshold400, OffsetThreshold_t),
2723
2724 M_NEXT_EXIST (GPRSMeasurementParams_PMO_PCCO_t, Exist_OffsetThreshold1900, 1),
2725 M_TYPE (GPRSMeasurementParams_PMO_PCCO_t, OffsetThreshold1900, OffsetThreshold_t),
2726
2727 M_NEXT_EXIST (GPRSMeasurementParams_PMO_PCCO_t, Exist_OffsetThreshold850, 1),
2728 M_TYPE (GPRSMeasurementParams_PMO_PCCO_t, OffsetThreshold850, OffsetThreshold_t),
2729CSN_DESCR_END (GPRSMeasurementParams_PMO_PCCO_t)
2730
2731static const
2732CSN_DESCR_BEGIN(GPRSMeasurementParams3G_t)
2733 M_UINT (GPRSMeasurementParams3G_t, Qsearch_p, 4),
2734 M_UINT (GPRSMeasurementParams3G_t, SearchPrio3G, 1),
2735
2736 M_NEXT_EXIST (GPRSMeasurementParams3G_t, existRepParamsFDD, 2),
2737 M_UINT (GPRSMeasurementParams3G_t, RepQuantFDD, 1),
2738 M_UINT (GPRSMeasurementParams3G_t, MultiratReportingFDD, 2),
2739
2740 M_NEXT_EXIST (GPRSMeasurementParams3G_t, existReportingParamsFDD, 2),
2741 M_UINT (GPRSMeasurementParams3G_t, ReportingOffsetFDD, 3),
2742 M_UINT (GPRSMeasurementParams3G_t, ReportingThresholdFDD, 3),
2743
2744 M_NEXT_EXIST (GPRSMeasurementParams3G_t, existMultiratReportingTDD, 1),
2745 M_UINT (GPRSMeasurementParams3G_t, MultiratReportingTDD, 2),
2746
2747 M_NEXT_EXIST (GPRSMeasurementParams3G_t, existOffsetThresholdTDD, 2),
2748 M_UINT (GPRSMeasurementParams3G_t, ReportingOffsetTDD, 3),
2749 M_UINT (GPRSMeasurementParams3G_t, ReportingThresholdTDD, 3),
2750CSN_DESCR_END (GPRSMeasurementParams3G_t)
2751
2752static const
2753CSN_DESCR_BEGIN(MultiratParams3G_t)
2754 M_NEXT_EXIST (MultiratParams3G_t, existMultiratReporting, 1),
2755 M_UINT (MultiratParams3G_t, MultiratReporting, 2),
2756
2757 M_NEXT_EXIST (MultiratParams3G_t, existOffsetThreshold, 1),
2758 M_TYPE (MultiratParams3G_t, OffsetThreshold, OffsetThreshold_t),
2759CSN_DESCR_END (MultiratParams3G_t)
2760
2761static const
2762CSN_DESCR_BEGIN(ENH_GPRSMeasurementParams3G_PMO_t)
2763 M_UINT (ENH_GPRSMeasurementParams3G_PMO_t, Qsearch_P, 4),
2764 M_UINT (ENH_GPRSMeasurementParams3G_PMO_t, SearchPrio3G, 1),
2765
2766 M_NEXT_EXIST (ENH_GPRSMeasurementParams3G_PMO_t, existRepParamsFDD, 2),
2767 M_UINT (ENH_GPRSMeasurementParams3G_PMO_t, RepQuantFDD, 1),
2768 M_UINT (ENH_GPRSMeasurementParams3G_PMO_t, MultiratReportingFDD, 2),
2769
2770 M_NEXT_EXIST (ENH_GPRSMeasurementParams3G_PMO_t, existOffsetThreshold, 1),
2771 M_TYPE (ENH_GPRSMeasurementParams3G_PMO_t, OffsetThreshold, OffsetThreshold_t),
2772
2773 M_TYPE (ENH_GPRSMeasurementParams3G_PMO_t, ParamsTDD, MultiratParams3G_t),
2774 M_TYPE (ENH_GPRSMeasurementParams3G_PMO_t, ParamsCDMA2000, MultiratParams3G_t),
2775CSN_DESCR_END (ENH_GPRSMeasurementParams3G_PMO_t)
2776
2777static const
2778CSN_DESCR_BEGIN(ENH_GPRSMeasurementParams3G_PCCO_t)
2779 M_UINT (ENH_GPRSMeasurementParams3G_PCCO_t, Qsearch_P, 4),
2780 M_UINT (ENH_GPRSMeasurementParams3G_PCCO_t, SearchPrio3G, 1),
2781
2782 M_NEXT_EXIST (ENH_GPRSMeasurementParams3G_PCCO_t, existRepParamsFDD, 2),
2783 M_UINT (ENH_GPRSMeasurementParams3G_PCCO_t, RepQuantFDD, 1),
2784 M_UINT (ENH_GPRSMeasurementParams3G_PCCO_t, MultiratReportingFDD, 2),
2785
2786 M_NEXT_EXIST (ENH_GPRSMeasurementParams3G_PCCO_t, existOffsetThreshold, 1),
2787 M_TYPE (ENH_GPRSMeasurementParams3G_PCCO_t, OffsetThreshold, OffsetThreshold_t),
2788
2789 M_TYPE (ENH_GPRSMeasurementParams3G_PCCO_t, ParamsTDD, MultiratParams3G_t),
2790CSN_DESCR_END (ENH_GPRSMeasurementParams3G_PCCO_t)
2791
2792static const
2793CSN_DESCR_BEGIN(N2_t)
2794 M_UINT (N2_t, REMOVED_3GCELL_INDEX, 7),
2795 M_UINT (N2_t, CELL_DIFF_LENGTH_3G, 3),
2796 M_VAR_BITMAP (N2_t, CELL_DIFF_3G, CELL_DIFF_LENGTH_3G, 0),
2797CSN_DESCR_END (N2_t)
2798
2799static const
2800CSN_DESCR_BEGIN (N1_t)
2801 M_UINT_OFFSET (N1_t, N2_Count, 5, 1), /*offset 1*/
2802 M_VAR_TARRAY (N1_t, N2s, N2_t, N2_Count),
2803CSN_DESCR_END (N1_t)
2804
2805static const
2806CSN_DESCR_BEGIN (Removed3GCellDescription_t)
2807 M_UINT_OFFSET (Removed3GCellDescription_t, N1_Count, 2, 1), /* offset 1 */
2808 M_VAR_TARRAY (Removed3GCellDescription_t, N1s, N1_t, N1_Count),
2809CSN_DESCR_END (Removed3GCellDescription_t)
2810
2811static const
2812CSN_DESCR_BEGIN(CDMA2000_Description_t)
2813 M_UINT (CDMA2000_Description_t, Complete_This, 1),
2814 CSN_ERROR (CDMA2000_Description_t, "Not Implemented", CSN_ERROR_STREAM_NOT_SUPPORTED),
2815CSN_DESCR_END (CDMA2000_Description_t)
2816
2817static const
2818CSN_DESCR_BEGIN(UTRAN_FDD_NeighbourCells_t)
2819 M_UINT (UTRAN_FDD_NeighbourCells_t, ZERO, 1),
2820 M_UINT (UTRAN_FDD_NeighbourCells_t, UARFCN, 14),
2821 M_UINT (UTRAN_FDD_NeighbourCells_t, Indic0, 1),
2822 M_UINT (UTRAN_FDD_NeighbourCells_t, NrOfCells, 5),
2823/* M_CALLBACK (UTRAN_FDD_NeighbourCells_t, (void*) 14, NrOfCells, BitsInCellInfo), */
2824 M_VAR_BITMAP (UTRAN_FDD_NeighbourCells_t, CellInfo, BitsInCellInfo, 0),
2825CSN_DESCR_END (UTRAN_FDD_NeighbourCells_t)
2826
2827static const
2828CSN_DESCR_BEGIN(UTRAN_FDD_Description_t)
2829 M_NEXT_EXIST (UTRAN_FDD_Description_t, existBandwidth, 1),
2830 M_UINT (UTRAN_FDD_Description_t, Bandwidth, 3),
2831 M_REC_TARRAY (UTRAN_FDD_Description_t, CellParams, UTRAN_FDD_NeighbourCells_t, NrOfFrequencies),
2832CSN_DESCR_END (UTRAN_FDD_Description_t)
2833
2834static const
2835CSN_DESCR_BEGIN(UTRAN_TDD_NeighbourCells_t)
2836 M_UINT (UTRAN_TDD_NeighbourCells_t, ZERO, 1),
2837 M_UINT (UTRAN_TDD_NeighbourCells_t, UARFCN, 14),
2838 M_UINT (UTRAN_TDD_NeighbourCells_t, Indic0, 1),
2839 M_UINT (UTRAN_TDD_NeighbourCells_t, NrOfCells, 5),
2840/* M_CALLBACK (UTRAN_TDD_NeighbourCells_t, (void*) 23, NrOfCells, BitsInCellInfo), */
2841 M_VAR_BITMAP (UTRAN_TDD_NeighbourCells_t, CellInfo, BitsInCellInfo, 0),
2842CSN_DESCR_END (UTRAN_TDD_NeighbourCells_t)
2843
2844static const
2845CSN_DESCR_BEGIN(UTRAN_TDD_Description_t)
2846 M_NEXT_EXIST (UTRAN_TDD_Description_t, existBandwidth, 1),
2847 M_UINT (UTRAN_TDD_Description_t, Bandwidth, 3),
2848 M_REC_TARRAY (UTRAN_TDD_Description_t, CellParams, UTRAN_TDD_NeighbourCells_t, NrOfFrequencies),
2849CSN_DESCR_END (UTRAN_TDD_Description_t)
2850
2851static const
2852CSN_DESCR_BEGIN(NeighbourCellDescription3G_PMO_t)
2853 M_NEXT_EXIST (NeighbourCellDescription3G_PMO_t, Exist_Index_Start_3G, 1),
2854 M_UINT (NeighbourCellDescription3G_PMO_t, Index_Start_3G, 7),
2855 M_NEXT_EXIST (NeighbourCellDescription3G_PMO_t, Exist_Absolute_Index_Start_EMR, 1),
2856 M_UINT (NeighbourCellDescription3G_PMO_t, Absolute_Index_Start_EMR, 7),
2857 M_NEXT_EXIST (NeighbourCellDescription3G_PMO_t, Exist_UTRAN_FDD_Description, 1),
2858 M_TYPE (NeighbourCellDescription3G_PMO_t, UTRAN_FDD_Description, UTRAN_FDD_Description_t),
2859 M_NEXT_EXIST (NeighbourCellDescription3G_PMO_t, Exist_UTRAN_TDD_Description, 1),
2860 M_TYPE (NeighbourCellDescription3G_PMO_t, UTRAN_TDD_Description, UTRAN_TDD_Description_t),
2861 M_NEXT_EXIST (NeighbourCellDescription3G_PMO_t, Exist_CDMA2000_Description, 1),
2862 M_TYPE (NeighbourCellDescription3G_PMO_t, CDMA2000_Description, CDMA2000_Description_t),
2863 M_NEXT_EXIST (NeighbourCellDescription3G_PMO_t, Exist_Removed3GCellDescription, 1),
2864 M_TYPE (NeighbourCellDescription3G_PMO_t, Removed3GCellDescription, Removed3GCellDescription_t),
2865CSN_DESCR_END (NeighbourCellDescription3G_PMO_t)
2866
2867static const
2868CSN_DESCR_BEGIN(NeighbourCellDescription3G_PCCO_t)
2869 M_NEXT_EXIST (NeighbourCellDescription3G_PCCO_t, Exist_Index_Start_3G, 1),
2870 M_UINT (NeighbourCellDescription3G_PCCO_t, Index_Start_3G, 7),
2871 M_NEXT_EXIST (NeighbourCellDescription3G_PCCO_t, Exist_Absolute_Index_Start_EMR, 1),
2872 M_UINT (NeighbourCellDescription3G_PCCO_t, Absolute_Index_Start_EMR, 7),
2873 M_NEXT_EXIST (NeighbourCellDescription3G_PCCO_t, Exist_UTRAN_FDD_Description, 1),
2874 M_TYPE (NeighbourCellDescription3G_PCCO_t, UTRAN_FDD_Description, UTRAN_FDD_Description_t),
2875 M_NEXT_EXIST (NeighbourCellDescription3G_PCCO_t, Exist_UTRAN_TDD_Description, 1),
2876 M_TYPE (NeighbourCellDescription3G_PCCO_t, UTRAN_TDD_Description, UTRAN_TDD_Description_t),
2877 M_NEXT_EXIST (NeighbourCellDescription3G_PCCO_t, Exist_Removed3GCellDescription, 1),
2878 M_TYPE (NeighbourCellDescription3G_PCCO_t, Removed3GCellDescription, Removed3GCellDescription_t),
2879CSN_DESCR_END (NeighbourCellDescription3G_PCCO_t)
2880
2881static const
2882CSN_DESCR_BEGIN(ENH_Measurement_Parameters_PMO_t)
2883 M_UNION (ENH_Measurement_Parameters_PMO_t, 2),
2884 M_TYPE (ENH_Measurement_Parameters_PMO_t, u.BA_IND, BA_IND_t),
2885 M_UINT (ENH_Measurement_Parameters_PMO_t, u.PSI3_CHANGE_MARK, 2),
2886 M_UINT (ENH_Measurement_Parameters_PMO_t, PMO_IND, 1),
2887
2888 M_UINT (ENH_Measurement_Parameters_PMO_t, REPORT_TYPE, 1),
2889 M_UINT (ENH_Measurement_Parameters_PMO_t, REPORTING_RATE, 1),
2890 M_UINT (ENH_Measurement_Parameters_PMO_t, INVALID_BSIC_REPORTING, 1),
2891
2892 M_NEXT_EXIST (ENH_Measurement_Parameters_PMO_t, Exist_NeighbourCellDescription3G, 1),
2893 M_TYPE (ENH_Measurement_Parameters_PMO_t, NeighbourCellDescription3G, NeighbourCellDescription3G_PMO_t),
2894
2895 M_NEXT_EXIST (ENH_Measurement_Parameters_PMO_t, Exist_GPRSReportPriority, 1),
2896 M_TYPE (ENH_Measurement_Parameters_PMO_t, GPRSReportPriority, GPRSReportPriority_t),
2897
2898 M_NEXT_EXIST (ENH_Measurement_Parameters_PMO_t, Exist_GPRSMeasurementParams, 1),
2899 M_TYPE (ENH_Measurement_Parameters_PMO_t, GPRSMeasurementParams, GPRSMeasurementParams_PMO_PCCO_t),
2900
2901 M_NEXT_EXIST (ENH_Measurement_Parameters_PMO_t, Exist_GPRSMeasurementParams3G, 1),
2902 M_TYPE (ENH_Measurement_Parameters_PMO_t, GPRSMeasurementParams3G, ENH_GPRSMeasurementParams3G_PMO_t),
2903CSN_DESCR_END (ENH_Measurement_Parameters_PMO_t)
2904
2905static const
2906CSN_DESCR_BEGIN(ENH_Measurement_Parameters_PCCO_t)
2907 M_UNION (ENH_Measurement_Parameters_PCCO_t, 2),
2908 M_TYPE (ENH_Measurement_Parameters_PCCO_t, u.BA_IND, BA_IND_t),
2909 M_UINT (ENH_Measurement_Parameters_PCCO_t, u.PSI3_CHANGE_MARK, 2),
2910 M_UINT (ENH_Measurement_Parameters_PCCO_t, PMO_IND, 1),
2911
2912 M_UINT (ENH_Measurement_Parameters_PCCO_t, REPORT_TYPE, 1),
2913 M_UINT (ENH_Measurement_Parameters_PCCO_t, REPORTING_RATE, 1),
2914 M_UINT (ENH_Measurement_Parameters_PCCO_t, INVALID_BSIC_REPORTING, 1),
2915
2916 M_NEXT_EXIST (ENH_Measurement_Parameters_PCCO_t, Exist_NeighbourCellDescription3G, 1),
2917 M_TYPE (ENH_Measurement_Parameters_PCCO_t, NeighbourCellDescription3G, NeighbourCellDescription3G_PCCO_t),
2918
2919 M_NEXT_EXIST (ENH_Measurement_Parameters_PCCO_t, Exist_GPRSReportPriority, 1),
2920 M_TYPE (ENH_Measurement_Parameters_PCCO_t, GPRSReportPriority, GPRSReportPriority_t),
2921
2922 M_NEXT_EXIST (ENH_Measurement_Parameters_PCCO_t, Exist_GPRSMeasurementParams, 1),
2923 M_TYPE (ENH_Measurement_Parameters_PCCO_t, GPRSMeasurementParams, GPRSMeasurementParams_PMO_PCCO_t),
2924
2925 M_NEXT_EXIST (ENH_Measurement_Parameters_PCCO_t, Exist_GPRSMeasurementParams3G, 1),
2926 M_TYPE (ENH_Measurement_Parameters_PCCO_t, GPRSMeasurementParams3G, ENH_GPRSMeasurementParams3G_PCCO_t),
2927CSN_DESCR_END (ENH_Measurement_Parameters_PCCO_t)
2928
2929static const
2930CSN_DESCR_BEGIN(CCN_Support_Description_t)
2931 M_UINT (CCN_Support_Description_t, NUMBER_CELLS, 7),
2932 M_VAR_BITMAP (CCN_Support_Description_t, CCN_SUPPORTED, NUMBER_CELLS, 0),
2933CSN_DESCR_END (CCN_Support_Description_t)
2934
2935static const
2936CSN_DESCR_BEGIN(lu_ModeCellSelectionParameters_t)
2937 M_UINT (lu_ModeCellSelectionParameters_t, CELL_BAR_QUALIFY_3, 2),
2938 M_NEXT_EXIST (lu_ModeCellSelectionParameters_t, Exist_SI13_Alt_PBCCH_Location, 1),
2939 M_TYPE (lu_ModeCellSelectionParameters_t, SI13_Alt_PBCCH_Location, SI13_PBCCH_Location_t),
2940CSN_DESCR_END (lu_ModeCellSelectionParameters_t)
2941
2942static const
2943CSN_DESCR_BEGIN(lu_ModeCellSelectionParams_t)
2944 M_NEXT_EXIST (lu_ModeCellSelectionParams_t, Exist_lu_ModeCellSelectionParams, 1),
2945 M_TYPE (lu_ModeCellSelectionParams_t, lu_ModeCellSelectionParameters, lu_ModeCellSelectionParameters_t),
2946CSN_DESCR_END (lu_ModeCellSelectionParams_t)
2947
2948static const
2949CSN_DESCR_BEGIN(lu_ModeNeighbourCellParams_t)
2950 M_TYPE (lu_ModeNeighbourCellParams_t, lu_ModeCellSelectionParameters, lu_ModeCellSelectionParams_t),
2951 M_UINT (lu_ModeNeighbourCellParams_t, NR_OF_FREQUENCIES, 5),
2952 M_VAR_TARRAY (lu_ModeNeighbourCellParams_t, lu_ModeCellSelectionParams, lu_ModeCellSelectionParams_t, NR_OF_FREQUENCIES),
2953CSN_DESCR_END (lu_ModeNeighbourCellParams_t)
2954
2955static const
2956CSN_DESCR_BEGIN(lu_ModeOnlyCellSelection_t)
2957 M_UINT (lu_ModeOnlyCellSelection_t, CELL_BAR_QUALIFY_3, 2),
2958 M_UINT (lu_ModeOnlyCellSelection_t, SAME_RA_AS_SERVING_CELL, 1),
2959
2960 M_NEXT_EXIST (lu_ModeOnlyCellSelection_t, Exist_RXLEV_and_TXPWR, 2),
2961 M_UINT (lu_ModeOnlyCellSelection_t, GPRS_RXLEV_ACCESS_MIN, 6),
2962 M_UINT (lu_ModeOnlyCellSelection_t, GPRS_MS_TXPWR_MAX_CCH, 5),
2963
2964 M_NEXT_EXIST (lu_ModeOnlyCellSelection_t, Exist_OFFSET_and_TIME, 2),
2965 M_UINT (lu_ModeOnlyCellSelection_t, GPRS_TEMPORARY_OFFSET, 3),
2966 M_UINT (lu_ModeOnlyCellSelection_t, GPRS_PENALTY_TIME, 5),
2967
2968 M_NEXT_EXIST (lu_ModeOnlyCellSelection_t, Exist_GPRS_RESELECT_OFFSET, 1),
2969 M_UINT (lu_ModeOnlyCellSelection_t, GPRS_RESELECT_OFFSET, 5),
2970
2971 M_NEXT_EXIST (lu_ModeOnlyCellSelection_t, Exist_HCS, 1),
2972 M_TYPE (lu_ModeOnlyCellSelection_t, HCS, HCS_t),
2973
2974 M_NEXT_EXIST (lu_ModeOnlyCellSelection_t, Exist_SI13_Alt_PBCCH_Location, 1),
2975 M_TYPE (lu_ModeOnlyCellSelection_t, SI13_Alt_PBCCH_Location, SI13_PBCCH_Location_t),
2976CSN_DESCR_END (lu_ModeOnlyCellSelection_t)
2977
2978static const
2979CSN_DESCR_BEGIN(lu_ModeOnlyCellSelectionParamsWithFreqDiff_t)
2980 /*FREQUENCY_DIFF is really an integer but the number of bits to decode it are stored in FREQ_DIFF_LENGTH*/
2981 M_VAR_BITMAP (lu_ModeOnlyCellSelectionParamsWithFreqDiff_t, FREQUENCY_DIFF, FREQ_DIFF_LENGTH, 0),
2982 M_UINT (lu_ModeOnlyCellSelectionParamsWithFreqDiff_t, BSIC, 6),
2983 M_NEXT_EXIST (lu_ModeOnlyCellSelectionParamsWithFreqDiff_t, Exist_lu_ModeOnlyCellSelectionParams, 1),
2984 M_TYPE (lu_ModeOnlyCellSelectionParamsWithFreqDiff_t, lu_ModeOnlyCellSelectionParams, lu_ModeOnlyCellSelection_t),
2985CSN_DESCR_END (lu_ModeOnlyCellSelectionParamsWithFreqDiff_t)
2986
2987static const
2988CSN_DESCR_BEGIN(Add_lu_ModeOnlyFrequencyList_t)
2989 M_UINT (Add_lu_ModeOnlyFrequencyList_t, START_FREQUENCY, 10),
2990 M_UINT (Add_lu_ModeOnlyFrequencyList_t, BSIC, 6),
2991
2992 M_NEXT_EXIST (Add_lu_ModeOnlyFrequencyList_t, Exist_lu_ModeCellSelection, 1),
2993 M_TYPE (Add_lu_ModeOnlyFrequencyList_t, lu_ModeOnlyCellSelection, lu_ModeOnlyCellSelection_t),
2994
2995 M_UINT (Add_lu_ModeOnlyFrequencyList_t, NR_OF_FREQUENCIES, 5),
2996 M_UINT (Add_lu_ModeOnlyFrequencyList_t, FREQ_DIFF_LENGTH, 3),
2997
2998 M_VAR_TARRAY (Add_lu_ModeOnlyFrequencyList_t, lu_ModeOnlyCellSelectionParamsWithFreqDiff, lu_ModeOnlyCellSelectionParamsWithFreqDiff_t, NR_OF_FREQUENCIES),
2999CSN_DESCR_END (Add_lu_ModeOnlyFrequencyList_t)
3000
3001static const
3002CSN_DESCR_BEGIN(NC_lu_ModeOnlyCapableCellList_t)
3003 M_REC_TARRAY (NC_lu_ModeOnlyCapableCellList_t, Add_lu_ModeOnlyFrequencyList, Add_lu_ModeOnlyFrequencyList_t, Count_Add_lu_ModeOnlyFrequencyList),
3004CSN_DESCR_END (NC_lu_ModeOnlyCapableCellList_t)
3005
3006static const
3007CSN_DESCR_BEGIN(GPRS_AdditionalMeasurementParams3G_t)
3008 M_NEXT_EXIST (GPRS_AdditionalMeasurementParams3G_t, Exist_FDD_REPORTING_THRESHOLD_2, 1),
3009 M_UINT (GPRS_AdditionalMeasurementParams3G_t, FDD_REPORTING_THRESHOLD_2, 6),
3010CSN_DESCR_END (GPRS_AdditionalMeasurementParams3G_t)
3011
3012static const
3013CSN_DESCR_BEGIN(ServingCellPriorityParametersDescription_t)
3014 M_UINT (ServingCellPriorityParametersDescription_t, GERAN_PRIORITY, 3),
3015 M_UINT (ServingCellPriorityParametersDescription_t, THRESH_Priority_Search, 4),
3016 M_UINT (ServingCellPriorityParametersDescription_t, THRESH_GSM_low, 4),
3017 M_UINT (ServingCellPriorityParametersDescription_t, H_PRIO, 2),
3018 M_UINT (ServingCellPriorityParametersDescription_t, T_Reselection, 2),
3019CSN_DESCR_END (ServingCellPriorityParametersDescription_t)
3020
3021static const
3022CSN_DESCR_BEGIN(RepeatedUTRAN_PriorityParameters_t)
3023 M_REC_ARRAY (RepeatedUTRAN_PriorityParameters_t, UTRAN_FREQUENCY_INDEX_a, NumberOfFrequencyIndexes, 5),
3024
3025 M_NEXT_EXIST (RepeatedUTRAN_PriorityParameters_t, existUTRAN_PRIORITY, 1),
3026 M_UINT (RepeatedUTRAN_PriorityParameters_t, UTRAN_PRIORITY, 3),
3027
3028 M_UINT (RepeatedUTRAN_PriorityParameters_t, THRESH_UTRAN_high, 5),
3029
3030 M_NEXT_EXIST (RepeatedUTRAN_PriorityParameters_t, existTHRESH_UTRAN_low, 1),
3031 M_UINT (RepeatedUTRAN_PriorityParameters_t, THRESH_UTRAN_low, 5),
3032
3033 M_NEXT_EXIST (RepeatedUTRAN_PriorityParameters_t, existUTRAN_QRXLEVMIN, 1),
3034 M_UINT (RepeatedUTRAN_PriorityParameters_t, UTRAN_QRXLEVMIN, 5),
3035CSN_DESCR_END (RepeatedUTRAN_PriorityParameters_t)
3036
3037static const
3038CSN_DESCR_BEGIN(PriorityParametersDescription3G_PMO_t)
3039
3040 M_NEXT_EXIST (PriorityParametersDescription3G_PMO_t, existDEFAULT_UTRAN_Parameters, 3),
3041 M_UINT (PriorityParametersDescription3G_PMO_t, DEFAULT_UTRAN_PRIORITY, 3),
3042 M_UINT (PriorityParametersDescription3G_PMO_t, DEFAULT_THRESH_UTRAN, 5),
3043 M_UINT (PriorityParametersDescription3G_PMO_t, DEFAULT_UTRAN_QRXLEVMIN, 5),
3044
3045 M_REC_TARRAY (PriorityParametersDescription3G_PMO_t, RepeatedUTRAN_PriorityParameters_a, RepeatedUTRAN_PriorityParameters_t, NumberOfPriorityParameters),
3046CSN_DESCR_END (PriorityParametersDescription3G_PMO_t)
3047
3048static const
3049CSN_DESCR_BEGIN(EUTRAN_REPORTING_THRESHOLD_OFFSET_t)
3050 M_NEXT_EXIST (EUTRAN_REPORTING_THRESHOLD_OFFSET_t, existEUTRAN_FDD_REPORTING_THRESHOLD_OFFSET, 5),
3051 M_UINT (EUTRAN_REPORTING_THRESHOLD_OFFSET_t, EUTRAN_FDD_REPORTING_THRESHOLD, 3),
3052 M_NEXT_EXIST (EUTRAN_REPORTING_THRESHOLD_OFFSET_t, existEUTRAN_FDD_REPORTING_THRESHOLD_2, 1),
3053 M_UINT (EUTRAN_REPORTING_THRESHOLD_OFFSET_t, EUTRAN_FDD_REPORTING_THRESHOLD_2, 6),
3054 M_NEXT_EXIST (EUTRAN_REPORTING_THRESHOLD_OFFSET_t, existEUTRAN_FDD_REPORTING_OFFSET, 1),
3055 M_UINT (EUTRAN_REPORTING_THRESHOLD_OFFSET_t, EUTRAN_FDD_REPORTING_OFFSET, 3),
3056
3057 M_NEXT_EXIST (EUTRAN_REPORTING_THRESHOLD_OFFSET_t, existEUTRAN_TDD_REPORTING_THRESHOLD_OFFSET, 5),
3058 M_UINT (EUTRAN_REPORTING_THRESHOLD_OFFSET_t, EUTRAN_TDD_REPORTING_THRESHOLD, 3),
3059 M_NEXT_EXIST (EUTRAN_REPORTING_THRESHOLD_OFFSET_t, existEUTRAN_TDD_REPORTING_THRESHOLD_2, 1),
3060 M_UINT (EUTRAN_REPORTING_THRESHOLD_OFFSET_t, EUTRAN_TDD_REPORTING_THRESHOLD_2, 6),
3061 M_NEXT_EXIST (EUTRAN_REPORTING_THRESHOLD_OFFSET_t, existEUTRAN_TDD_REPORTING_OFFSET, 1),
3062 M_UINT (EUTRAN_REPORTING_THRESHOLD_OFFSET_t, EUTRAN_TDD_REPORTING_OFFSET, 3),
3063CSN_DESCR_END (EUTRAN_REPORTING_THRESHOLD_OFFSET_t)
3064
3065static const
3066CSN_DESCR_BEGIN(GPRS_EUTRAN_MeasurementParametersDescription_t)
3067 M_UINT (GPRS_EUTRAN_MeasurementParametersDescription_t, Qsearch_P_EUTRAN, 4),
Anders Broman8ea3cbe2020-01-28 17:36:33 +01003068 M_UINT (GPRS_EUTRAN_MeasurementParametersDescription_t, EUTRAN_REP_QUANT, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03003069 M_UINT (GPRS_EUTRAN_MeasurementParametersDescription_t, EUTRAN_MULTIRAT_REPORTING, 2),
3070 M_TYPE (GPRS_EUTRAN_MeasurementParametersDescription_t, EUTRAN_REPORTING_THRESHOLD_OFFSET, EUTRAN_REPORTING_THRESHOLD_OFFSET_t),
3071CSN_DESCR_END (GPRS_EUTRAN_MeasurementParametersDescription_t)
3072
3073static const
3074CSN_DESCR_BEGIN(RepeatedEUTRAN_Cells_t)
3075 M_UINT (RepeatedEUTRAN_Cells_t, EARFCN, 16),
3076 M_NEXT_EXIST (RepeatedEUTRAN_Cells_t, existMeasurementBandwidth, 1),
3077 M_UINT (RepeatedEUTRAN_Cells_t, MeasurementBandwidth, 3),
3078CSN_DESCR_END (RepeatedEUTRAN_Cells_t)
3079
3080static const
3081CSN_DESCR_BEGIN(RepeatedEUTRAN_NeighbourCells_t)
3082 M_REC_TARRAY (RepeatedEUTRAN_NeighbourCells_t, EUTRAN_Cells_a, RepeatedEUTRAN_Cells_t, nbrOfEUTRAN_Cells),
3083
3084 M_NEXT_EXIST (RepeatedEUTRAN_NeighbourCells_t, existEUTRAN_PRIORITY, 1),
3085 M_UINT (RepeatedEUTRAN_NeighbourCells_t, EUTRAN_PRIORITY, 3),
3086
3087 M_UINT (RepeatedEUTRAN_NeighbourCells_t, THRESH_EUTRAN_high, 5),
3088
3089 M_NEXT_EXIST (RepeatedEUTRAN_NeighbourCells_t, existTHRESH_EUTRAN_low, 1),
3090 M_UINT (RepeatedEUTRAN_NeighbourCells_t, THRESH_EUTRAN_low, 5),
3091
3092 M_NEXT_EXIST (RepeatedEUTRAN_NeighbourCells_t, existEUTRAN_QRXLEVMIN, 1),
3093 M_UINT (RepeatedEUTRAN_NeighbourCells_t, EUTRAN_QRXLEVMIN, 5),
3094CSN_DESCR_END (RepeatedEUTRAN_NeighbourCells_t)
3095
3096static const
3097CSN_DESCR_BEGIN(PCID_Pattern_t)
3098 M_UINT (PCID_Pattern_t, PCID_Pattern_length, 3),
3099 M_VAR_BITMAP (PCID_Pattern_t, PCID_Pattern, PCID_Pattern_length, 1), /* offset 1, 44.060 12.57 */
3100 M_UINT (PCID_Pattern_t, PCID_Pattern_sense, 1),
3101CSN_DESCR_END (PCID_Pattern_t)
3102
3103static const
3104CSN_DESCR_BEGIN(PCID_Group_IE_t)
3105
3106 M_REC_ARRAY (PCID_Group_IE_t, PCID_a, NumberOfPCIDs, 9),
3107
3108 M_NEXT_EXIST (PCID_Group_IE_t, existPCID_BITMAP_GROUP, 1),
3109 M_UINT (PCID_Group_IE_t, PCID_BITMAP_GROUP, 6),
3110
3111 M_REC_TARRAY (PCID_Group_IE_t, PCID_Pattern_a, PCID_Pattern_t, NumberOfPCID_Patterns),
3112CSN_DESCR_END (PCID_Group_IE_t)
3113
3114static const
3115CSN_DESCR_BEGIN(EUTRAN_FREQUENCY_INDEX_t)
3116 M_UINT (EUTRAN_FREQUENCY_INDEX_t, EUTRAN_FREQUENCY_INDEX, 3),
3117CSN_DESCR_END (EUTRAN_FREQUENCY_INDEX_t)
3118
3119static const
3120CSN_DESCR_BEGIN(RepeatedEUTRAN_NotAllowedCells_t)
3121 M_TYPE (RepeatedEUTRAN_NotAllowedCells_t, NotAllowedCells, PCID_Group_IE_t),
3122
3123 M_REC_TARRAY (RepeatedEUTRAN_NotAllowedCells_t, EUTRAN_FREQUENCY_INDEX_a, EUTRAN_FREQUENCY_INDEX_t, NumberOfFrequencyIndexes),
3124CSN_DESCR_END (RepeatedEUTRAN_NotAllowedCells_t)
3125
3126static const
3127CSN_DESCR_BEGIN(RepeatedEUTRAN_PCID_to_TA_mapping_t)
3128 M_REC_TARRAY (RepeatedEUTRAN_PCID_to_TA_mapping_t, PCID_ToTA_Mapping_a, PCID_Group_IE_t, NumberOfMappings),
3129 M_REC_TARRAY (RepeatedEUTRAN_PCID_to_TA_mapping_t, EUTRAN_FREQUENCY_INDEX_a, EUTRAN_FREQUENCY_INDEX_t, NumberOfFrequencyIndexes),
3130CSN_DESCR_END (RepeatedEUTRAN_PCID_to_TA_mapping_t)
3131
3132static const
3133CSN_DESCR_BEGIN(EUTRAN_ParametersDescription_PMO_t)
Anders Broman8ea3cbe2020-01-28 17:36:33 +01003134 M_UINT (EUTRAN_ParametersDescription_PMO_t, EUTRAN_CCN_ACTIVE, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03003135
3136 M_NEXT_EXIST (EUTRAN_ParametersDescription_PMO_t, existGPRS_EUTRAN_MeasurementParametersDescription, 1),
3137 M_TYPE (EUTRAN_ParametersDescription_PMO_t, GPRS_EUTRAN_MeasurementParametersDescription, GPRS_EUTRAN_MeasurementParametersDescription_t),
3138
3139 M_REC_TARRAY (EUTRAN_ParametersDescription_PMO_t, RepeatedEUTRAN_NeighbourCells_a, RepeatedEUTRAN_NeighbourCells_t, nbrOfRepeatedEUTRAN_NeighbourCellsStructs),
3140 M_REC_TARRAY (EUTRAN_ParametersDescription_PMO_t, RepeatedEUTRAN_NotAllowedCells_a, RepeatedEUTRAN_NotAllowedCells_t, NumberOfNotAllowedCells),
3141 M_REC_TARRAY (EUTRAN_ParametersDescription_PMO_t, RepeatedEUTRAN_PCID_to_TA_mapping_a, RepeatedEUTRAN_PCID_to_TA_mapping_t, NumberOfMappings),
3142CSN_DESCR_END (EUTRAN_ParametersDescription_PMO_t)
3143
3144static const
3145CSN_DESCR_BEGIN(PSC_Pattern_t)
3146 M_UINT (PSC_Pattern_t, PSC_Pattern_length, 3),
3147 M_VAR_BITMAP (PSC_Pattern_t, PSC_Pattern, PSC_Pattern_length, 1),
Anders Broman8ea3cbe2020-01-28 17:36:33 +01003148 M_UINT (PSC_Pattern_t, PSC_Pattern_sense, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03003149CSN_DESCR_END (PSC_Pattern_t)
3150
3151static const
3152CSN_DESCR_BEGIN(PSC_Group_t)
3153 M_REC_ARRAY (PSC_Group_t, PSC, PSC_Count, 9),
3154 M_REC_TARRAY (PSC_Group_t, PSC_Pattern, PSC_Pattern_t, PSC_Pattern_Count),
3155CSN_DESCR_END (PSC_Group_t)
3156
3157static const
3158CSN_DESCR_BEGIN(ThreeG_CSG_Description_Body_t)
3159 M_TYPE (ThreeG_CSG_Description_Body_t, CSG_PSC_SPLIT, PSC_Group_t),
3160 M_REC_ARRAY (ThreeG_CSG_Description_Body_t, UTRAN_FREQUENCY_INDEX, Count, 5),
3161CSN_DESCR_END (ThreeG_CSG_Description_Body_t)
3162
3163static const
3164CSN_DESCR_BEGIN(ThreeG_CSG_Description_t)
3165 M_REC_TARRAY (ThreeG_CSG_Description_t, ThreeG_CSG_Description_Body, ThreeG_CSG_Description_Body_t, Count),
3166CSN_DESCR_END (ThreeG_CSG_Description_t)
3167
3168static const
3169CSN_DESCR_BEGIN(EUTRAN_CSG_Description_Body_t)
3170 M_TYPE (EUTRAN_CSG_Description_Body_t, CSG_PCI_SPLIT, PSC_Group_t),
3171 M_REC_ARRAY (EUTRAN_CSG_Description_Body_t, EUTRAN_FREQUENCY_INDEX, Count, 3),
3172CSN_DESCR_END (EUTRAN_CSG_Description_Body_t)
3173
3174static const
3175CSN_DESCR_BEGIN(EUTRAN_CSG_Description_t)
3176 M_REC_TARRAY (EUTRAN_CSG_Description_t, EUTRAN_CSG_Description_Body, EUTRAN_CSG_Description_Body_t, Count),
3177CSN_DESCR_END (EUTRAN_CSG_Description_t)
3178
3179static const
3180CSN_DESCR_BEGIN(Meas_Ctrl_Param_Desp_t)
3181 M_NEXT_EXIST (Meas_Ctrl_Param_Desp_t, existMeasurement_Control_EUTRAN, 3),
Anders Broman8ea3cbe2020-01-28 17:36:33 +01003182 M_UINT (Meas_Ctrl_Param_Desp_t, Measurement_Control_EUTRAN, 1),
3183 M_UINT (Meas_Ctrl_Param_Desp_t, EUTRAN_FREQUENCY_INDEX_top, 3),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03003184 M_REC_ARRAY (Meas_Ctrl_Param_Desp_t, EUTRAN_FREQUENCY_INDEX, Count_EUTRAN_FREQUENCY_INDEX, 3),
3185 M_NEXT_EXIST (Meas_Ctrl_Param_Desp_t, existMeasurement_Control_UTRAN, 1),
Anders Broman8ea3cbe2020-01-28 17:36:33 +01003186 M_UINT (Meas_Ctrl_Param_Desp_t, Measurement_Control_UTRAN, 1),
3187 M_UINT (Meas_Ctrl_Param_Desp_t, UTRAN_FREQUENCY_INDEX_top, 5),
3188 M_REC_ARRAY (Meas_Ctrl_Param_Desp_t, UTRAN_FREQUENCY_INDEX, Count_UTRAN_FREQUENCY_INDEX, 5),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03003189CSN_DESCR_END (Meas_Ctrl_Param_Desp_t)
3190
3191static const
3192CSN_DESCR_BEGIN(Reselection_Based_On_RSRQ_t)
3193 M_UINT (Reselection_Based_On_RSRQ_t, THRESH_EUTRAN_high_Q, 5),
3194 M_NEXT_EXIST (Reselection_Based_On_RSRQ_t, existTHRESH_EUTRAN_low_Q, 1),
3195 M_UINT (Reselection_Based_On_RSRQ_t, THRESH_EUTRAN_low_Q, 5),
3196 M_NEXT_EXIST (Reselection_Based_On_RSRQ_t, existEUTRAN_QQUALMIN, 1),
3197 M_UINT (Reselection_Based_On_RSRQ_t, EUTRAN_QQUALMIN, 4),
3198 M_NEXT_EXIST (Reselection_Based_On_RSRQ_t, existEUTRAN_RSRPmin, 1),
3199 M_UINT (Reselection_Based_On_RSRQ_t, EUTRAN_RSRPmin, 5),
3200CSN_DESCR_END (Reselection_Based_On_RSRQ_t)
3201
3202static const
3203CSN_DESCR_BEGIN(Rept_EUTRAN_Enh_Cell_Resel_Param_t)
3204 M_REC_ARRAY (Rept_EUTRAN_Enh_Cell_Resel_Param_t, EUTRAN_FREQUENCY_INDEX, Count_EUTRAN_FREQUENCY_INDEX, 3),
3205 M_UNION (Rept_EUTRAN_Enh_Cell_Resel_Param_t, 2),
3206 M_UINT (Rept_EUTRAN_Enh_Cell_Resel_Param_t, u.EUTRAN_Qmin, 4),
3207 M_TYPE (Rept_EUTRAN_Enh_Cell_Resel_Param_t, u.Reselection_Based_On_RSRQ, Reselection_Based_On_RSRQ_t),
3208CSN_DESCR_END (Rept_EUTRAN_Enh_Cell_Resel_Param_t)
3209
3210static const
3211CSN_DESCR_BEGIN(Enh_Cell_Reselect_Param_Desp_t)
3212 M_REC_TARRAY (Enh_Cell_Reselect_Param_Desp_t, Repeated_EUTRAN_Enhanced_Cell_Reselection_Parameters, Rept_EUTRAN_Enh_Cell_Resel_Param_t, Count),
3213CSN_DESCR_END (Enh_Cell_Reselect_Param_Desp_t)
3214
3215static const
3216CSN_DESCR_BEGIN(UTRAN_CSG_Cells_Reporting_Desp_t)
3217 M_NEXT_EXIST (UTRAN_CSG_Cells_Reporting_Desp_t, existUTRAN_CSG_FDD_REPORTING_THRESHOLD, 2),
3218 M_UINT (UTRAN_CSG_Cells_Reporting_Desp_t, UTRAN_CSG_FDD_REPORTING_THRESHOLD, 3),
3219 M_UINT (UTRAN_CSG_Cells_Reporting_Desp_t, UTRAN_CSG_FDD_REPORTING_THRESHOLD_2, 6),
3220 M_NEXT_EXIST (UTRAN_CSG_Cells_Reporting_Desp_t, existUTRAN_CSG_TDD_REPORTING_THRESHOLD, 1),
3221 M_UINT (UTRAN_CSG_Cells_Reporting_Desp_t, UTRAN_CSG_TDD_REPORTING_THRESHOLD, 3),
3222CSN_DESCR_END (UTRAN_CSG_Cells_Reporting_Desp_t)
3223
3224static const
3225CSN_DESCR_BEGIN(EUTRAN_CSG_Cells_Reporting_Desp_t)
3226 M_NEXT_EXIST (EUTRAN_CSG_Cells_Reporting_Desp_t, existEUTRAN_CSG_FDD_REPORTING_THRESHOLD, 2),
3227 M_UINT (EUTRAN_CSG_Cells_Reporting_Desp_t, EUTRAN_CSG_FDD_REPORTING_THRESHOLD, 3),
3228 M_UINT (EUTRAN_CSG_Cells_Reporting_Desp_t, EUTRAN_CSG_FDD_REPORTING_THRESHOLD_2, 6),
3229 M_NEXT_EXIST (EUTRAN_CSG_Cells_Reporting_Desp_t, existEUTRAN_CSG_TDD_REPORTING_THRESHOLD, 2),
3230 M_UINT (EUTRAN_CSG_Cells_Reporting_Desp_t, EUTRAN_CSG_TDD_REPORTING_THRESHOLD, 3),
3231 M_UINT (EUTRAN_CSG_Cells_Reporting_Desp_t, EUTRAN_CSG_TDD_REPORTING_THRESHOLD_2, 6),
3232CSN_DESCR_END (EUTRAN_CSG_Cells_Reporting_Desp_t)
3233
3234
3235static const
3236CSN_DESCR_BEGIN(CSG_Cells_Reporting_Desp_t)
3237 M_NEXT_EXIST (CSG_Cells_Reporting_Desp_t, existUTRAN_CSG_Cells_Reporting_Description, 1),
3238 M_TYPE (CSG_Cells_Reporting_Desp_t, UTRAN_CSG_Cells_Reporting_Description, UTRAN_CSG_Cells_Reporting_Desp_t),
3239 M_NEXT_EXIST (CSG_Cells_Reporting_Desp_t, existEUTRAN_CSG_Cells_Reporting_Description, 1),
3240 M_TYPE (CSG_Cells_Reporting_Desp_t, EUTRAN_CSG_Cells_Reporting_Description, EUTRAN_CSG_Cells_Reporting_Desp_t),
3241CSN_DESCR_END (CSG_Cells_Reporting_Desp_t)
3242
3243static const
3244CSN_DESCR_BEGIN (PriorityAndEUTRAN_ParametersDescription_PMO_t)
3245 M_NEXT_EXIST (PriorityAndEUTRAN_ParametersDescription_PMO_t, existServingCellPriorityParametersDescription, 1),
3246 M_TYPE (PriorityAndEUTRAN_ParametersDescription_PMO_t, ServingCellPriorityParametersDescription, ServingCellPriorityParametersDescription_t),
3247 M_NEXT_EXIST (PriorityAndEUTRAN_ParametersDescription_PMO_t, existPriorityParametersDescription3G_PMO, 1),
3248 M_TYPE (PriorityAndEUTRAN_ParametersDescription_PMO_t, PriorityParametersDescription3G_PMO, PriorityParametersDescription3G_PMO_t),
3249 M_NEXT_EXIST (PriorityAndEUTRAN_ParametersDescription_PMO_t, existEUTRAN_ParametersDescription_PMO, 1),
3250 M_TYPE (PriorityAndEUTRAN_ParametersDescription_PMO_t, EUTRAN_ParametersDescription_PMO, EUTRAN_ParametersDescription_PMO_t),
3251CSN_DESCR_END (PriorityAndEUTRAN_ParametersDescription_PMO_t)
3252
3253
3254static const
3255CSN_DESCR_BEGIN (Delete_All_Stored_Individual_Priorities_t)
Anders Broman72c102a2020-01-24 14:31:15 +01003256 M_NULL (Delete_All_Stored_Individual_Priorities_t, dummy, 0),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03003257CSN_DESCR_END (Delete_All_Stored_Individual_Priorities_t)
3258
3259static const
3260CSN_DESCR_BEGIN (Individual_UTRAN_Priority_FDD_t)
3261 M_REC_ARRAY (Individual_UTRAN_Priority_FDD_t, FDD_ARFCN, Count, 14),
3262CSN_DESCR_END (Individual_UTRAN_Priority_FDD_t)
3263
3264static const
3265CSN_DESCR_BEGIN (Individual_UTRAN_Priority_TDD_t)
3266 M_REC_ARRAY (Individual_UTRAN_Priority_TDD_t, TDD_ARFCN, Count, 14),
3267CSN_DESCR_END (Individual_UTRAN_Priority_TDD_t)
3268
3269static const
3270CSN_DESCR_BEGIN (Repeated_Individual_UTRAN_Priority_Parameters_t)
3271 M_UNION (Repeated_Individual_UTRAN_Priority_Parameters_t, 2),
3272 M_TYPE (Repeated_Individual_UTRAN_Priority_Parameters_t, u.Individual_UTRAN_Priority_FDD, Individual_UTRAN_Priority_FDD_t),
3273 M_TYPE (Repeated_Individual_UTRAN_Priority_Parameters_t, u.Individual_UTRAN_Priority_TDD, Individual_UTRAN_Priority_TDD_t),
3274 M_UINT (Repeated_Individual_UTRAN_Priority_Parameters_t, UTRAN_PRIORITY, 3),
3275CSN_DESCR_END (Repeated_Individual_UTRAN_Priority_Parameters_t)
3276
3277static const
3278CSN_DESCR_BEGIN (ThreeG_Individual_Priority_Parameters_Description_t)
3279 M_NEXT_EXIST (ThreeG_Individual_Priority_Parameters_Description_t, Exist_DEFAULT_UTRAN_PRIORITY, 1),
3280 M_UINT (ThreeG_Individual_Priority_Parameters_Description_t, DEFAULT_UTRAN_PRIORITY, 3),
3281 M_REC_TARRAY (ThreeG_Individual_Priority_Parameters_Description_t, Repeated_Individual_UTRAN_Priority_Parameters, Repeated_Individual_UTRAN_Priority_Parameters_t, Repeated_Individual_UTRAN_Priority_Parameters_Count),
3282CSN_DESCR_END (ThreeG_Individual_Priority_Parameters_Description_t)
3283
3284static const
3285CSN_DESCR_BEGIN (Repeated_Individual_EUTRAN_Priority_Parameters_t)
3286 M_REC_ARRAY (Repeated_Individual_EUTRAN_Priority_Parameters_t, EARFCN, Count, 16),
3287 M_UINT (Repeated_Individual_EUTRAN_Priority_Parameters_t, EUTRAN_PRIORITY, 3),
3288CSN_DESCR_END (Repeated_Individual_EUTRAN_Priority_Parameters_t)
3289
3290static const
3291CSN_DESCR_BEGIN (EUTRAN_Individual_Priority_Parameters_Description_t)
3292 M_NEXT_EXIST (EUTRAN_Individual_Priority_Parameters_Description_t, Exist_DEFAULT_EUTRAN_PRIORITY, 1),
3293 M_UINT (EUTRAN_Individual_Priority_Parameters_Description_t, DEFAULT_EUTRAN_PRIORITY, 3),
3294 M_REC_TARRAY (EUTRAN_Individual_Priority_Parameters_Description_t, Repeated_Individual_EUTRAN_Priority_Parameters, Repeated_Individual_EUTRAN_Priority_Parameters_t, Count),
3295CSN_DESCR_END (EUTRAN_Individual_Priority_Parameters_Description_t)
3296
3297static const
3298CSN_DESCR_BEGIN (Provide_Individual_Priorities_t)
3299 M_UINT (Provide_Individual_Priorities_t, GERAN_PRIORITY, 3),
3300 M_NEXT_EXIST (Provide_Individual_Priorities_t, Exist_3G_Individual_Priority_Parameters_Description, 1),
3301 M_TYPE (Provide_Individual_Priorities_t, ThreeG_Individual_Priority_Parameters_Description, ThreeG_Individual_Priority_Parameters_Description_t),
3302 M_NEXT_EXIST (Provide_Individual_Priorities_t, Exist_EUTRAN_Individual_Priority_Parameters_Description, 1),
3303 M_TYPE (Provide_Individual_Priorities_t, EUTRAN_Individual_Priority_Parameters_Description, EUTRAN_Individual_Priority_Parameters_Description_t),
3304 M_NEXT_EXIST (Provide_Individual_Priorities_t, Exist_T3230_timeout_value, 1),
3305 M_UINT (Provide_Individual_Priorities_t, T3230_timeout_value, 3),
3306CSN_DESCR_END (Provide_Individual_Priorities_t)
3307
3308static const
3309CSN_DESCR_BEGIN (Individual_Priorities_t)
3310 M_UNION (Individual_Priorities_t, 2),
3311 M_TYPE (Individual_Priorities_t, u.Delete_All_Stored_Individual_Priorities, Delete_All_Stored_Individual_Priorities_t),
3312 M_TYPE (Individual_Priorities_t, u.Provide_Individual_Priorities, Provide_Individual_Priorities_t),
3313CSN_DESCR_END (Individual_Priorities_t)
3314
3315static const
3316CSN_DESCR_BEGIN (PMO_AdditionsR9_t)
3317 M_NEXT_EXIST (PMO_AdditionsR9_t, existEnhanced_Cell_Reselection_Parameters_Description, 1),
3318 M_TYPE (PMO_AdditionsR9_t, Enhanced_Cell_Reselection_Parameters_Description, Enh_Cell_Reselect_Param_Desp_t),
3319 M_NEXT_EXIST (PMO_AdditionsR9_t, existCSG_Cells_Reporting_Description, 1),
3320 M_TYPE (PMO_AdditionsR9_t, CSG_Cells_Reporting_Description, CSG_Cells_Reporting_Desp_t),
3321CSN_DESCR_END (PMO_AdditionsR9_t)
3322
3323static const
3324CSN_DESCR_BEGIN (PMO_AdditionsR8_t)
3325 M_NEXT_EXIST (PMO_AdditionsR8_t, existBA_IND_3G_PMO_IND, 2),
Anders Broman8ea3cbe2020-01-28 17:36:33 +01003326 M_UINT (PMO_AdditionsR8_t, BA_IND_3G, 1),
3327 M_UINT (PMO_AdditionsR8_t, PMO_IND, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03003328 M_NEXT_EXIST (PMO_AdditionsR8_t, existPriorityAndEUTRAN_ParametersDescription_PMO, 1),
3329 M_TYPE (PMO_AdditionsR8_t, PriorityAndEUTRAN_ParametersDescription_PMO, PriorityAndEUTRAN_ParametersDescription_PMO_t),
3330 M_NEXT_EXIST (PMO_AdditionsR8_t, existIndividualPriorities_PMO, 1),
3331 M_TYPE (PMO_AdditionsR8_t, IndividualPriorities_PMO, Individual_Priorities_t),
3332 M_NEXT_EXIST (PMO_AdditionsR8_t, existThreeG_CSG_Description, 1),
3333 M_TYPE (PMO_AdditionsR8_t, ThreeG_CSG_Description_PMO, ThreeG_CSG_Description_t),
3334 M_NEXT_EXIST (PMO_AdditionsR8_t, existEUTRAN_CSG_Description, 1),
3335 M_TYPE (PMO_AdditionsR8_t, EUTRAN_CSG_Description_PMO, EUTRAN_CSG_Description_t),
3336 M_NEXT_EXIST (PMO_AdditionsR8_t, existMeasurement_Control_Parameters_Description, 1),
3337 M_TYPE (PMO_AdditionsR8_t, Measurement_Control_Parameters_Description_PMO, Meas_Ctrl_Param_Desp_t),
3338 M_NEXT_EXIST_OR_NULL (PMO_AdditionsR8_t, existAdditionsR9, 1),
3339 M_TYPE (PMO_AdditionsR8_t, AdditionsR9, PMO_AdditionsR9_t),
3340CSN_DESCR_END (PMO_AdditionsR8_t)
3341
3342static const
3343CSN_DESCR_BEGIN (PMO_AdditionsR7_t)
3344 M_NEXT_EXIST (PMO_AdditionsR7_t, existREPORTING_OFFSET_THRESHOLD_700, 2),
3345 M_UINT (PMO_AdditionsR7_t, REPORTING_OFFSET_700, 3),
3346 M_UINT (PMO_AdditionsR7_t, REPORTING_THRESHOLD_700, 3),
3347
3348 M_NEXT_EXIST (PMO_AdditionsR7_t, existREPORTING_OFFSET_THRESHOLD_810, 2),
3349 M_UINT (PMO_AdditionsR7_t, REPORTING_OFFSET_810, 3),
3350 M_UINT (PMO_AdditionsR7_t, REPORTING_THRESHOLD_810, 3),
3351
3352 M_NEXT_EXIST_OR_NULL (PMO_AdditionsR7_t, existAdditionsR8, 1),
3353 M_TYPE (PMO_AdditionsR7_t, additionsR8, PMO_AdditionsR8_t),
3354CSN_DESCR_END (PMO_AdditionsR7_t)
3355
3356static const
3357CSN_DESCR_BEGIN (PMO_AdditionsR6_t)
3358 M_UINT (PMO_AdditionsR6_t, CCN_ACTIVE_3G, 1),
3359 M_NEXT_EXIST_OR_NULL (PMO_AdditionsR6_t, existAdditionsR7, 1),
3360 M_TYPE (PMO_AdditionsR6_t, additionsR7, PMO_AdditionsR7_t),
3361CSN_DESCR_END (PMO_AdditionsR6_t)
3362
3363static const
3364CSN_DESCR_BEGIN(PCCO_AdditionsR6_t)
3365 M_UINT (PCCO_AdditionsR6_t, CCN_ACTIVE_3G, 1),
3366CSN_DESCR_END (PCCO_AdditionsR6_t)
3367
3368static const
3369CSN_DESCR_BEGIN (PMO_AdditionsR5_t)
3370 M_NEXT_EXIST (PMO_AdditionsR5_t, existGRNTI_Extension, 1),
3371 M_UINT (PMO_AdditionsR5_t, GRNTI, 4),
3372 M_NEXT_EXIST (PMO_AdditionsR5_t, exist_lu_ModeNeighbourCellParams, 1),
3373 M_REC_TARRAY (PMO_AdditionsR5_t, lu_ModeNeighbourCellParams, lu_ModeNeighbourCellParams_t, count_lu_ModeNeighbourCellParams),
3374 M_NEXT_EXIST (PMO_AdditionsR5_t, existNC_lu_ModeOnlyCapableCellList, 1),
3375 M_TYPE (PMO_AdditionsR5_t, NC_lu_ModeOnlyCapableCellList, NC_lu_ModeOnlyCapableCellList_t),
3376 M_NEXT_EXIST (PMO_AdditionsR5_t, existGPRS_AdditionalMeasurementParams3G, 1),
3377 M_TYPE (PMO_AdditionsR5_t, GPRS_AdditionalMeasurementParams3G, GPRS_AdditionalMeasurementParams3G_t),
3378 M_NEXT_EXIST_OR_NULL (PMO_AdditionsR5_t, existAdditionsR6, 1),
3379 M_TYPE (PMO_AdditionsR5_t, additionsR6, PMO_AdditionsR6_t),
3380CSN_DESCR_END (PMO_AdditionsR5_t)
3381
3382static const
3383CSN_DESCR_BEGIN (PCCO_AdditionsR5_t)
3384 M_NEXT_EXIST (PCCO_AdditionsR5_t, existGRNTI_Extension, 1),
3385 M_UINT (PCCO_AdditionsR5_t, GRNTI, 4),
3386 M_NEXT_EXIST (PCCO_AdditionsR5_t, exist_lu_ModeNeighbourCellParams, 1),
3387 M_REC_TARRAY (PCCO_AdditionsR5_t, lu_ModeNeighbourCellParams, lu_ModeNeighbourCellParams_t, count_lu_ModeNeighbourCellParams),
3388 M_NEXT_EXIST (PCCO_AdditionsR5_t, existNC_lu_ModeOnlyCapableCellList, 1),
3389 M_TYPE (PCCO_AdditionsR5_t, NC_lu_ModeOnlyCapableCellList, NC_lu_ModeOnlyCapableCellList_t),
3390 M_NEXT_EXIST (PCCO_AdditionsR5_t, existGPRS_AdditionalMeasurementParams3G, 1),
3391 M_TYPE (PCCO_AdditionsR5_t, GPRS_AdditionalMeasurementParams3G, GPRS_AdditionalMeasurementParams3G_t),
3392 M_NEXT_EXIST_OR_NULL (PCCO_AdditionsR5_t, existAdditionsR6, 1),
3393 M_TYPE (PCCO_AdditionsR5_t, additionsR6, PCCO_AdditionsR6_t),
3394CSN_DESCR_END (PCCO_AdditionsR5_t)
3395
3396static const
3397CSN_DESCR_BEGIN (PMO_AdditionsR4_t)
3398 M_UINT (PMO_AdditionsR4_t, CCN_ACTIVE, 1),
3399 M_NEXT_EXIST (PMO_AdditionsR4_t, Exist_CCN_Support_Description_ID, 1),
3400 M_TYPE (PMO_AdditionsR4_t, CCN_Support_Description, CCN_Support_Description_t),
3401 M_NEXT_EXIST_OR_NULL (PMO_AdditionsR4_t, Exist_AdditionsR5, 1),
3402 M_TYPE (PMO_AdditionsR4_t, AdditionsR5, PMO_AdditionsR5_t),
3403CSN_DESCR_END (PMO_AdditionsR4_t)
3404
3405static const
3406CSN_DESCR_BEGIN (PMO_AdditionsR99_t)
3407 M_NEXT_EXIST (PMO_AdditionsR99_t, Exist_ENH_Measurement_Parameters, 1),
3408 M_TYPE (PMO_AdditionsR99_t, ENH_Measurement_Parameters, ENH_Measurement_Parameters_PMO_t),
3409 M_NEXT_EXIST_OR_NULL (PMO_AdditionsR99_t, Exist_AdditionsR4, 1),
3410 M_TYPE (PMO_AdditionsR99_t, AdditionsR4, PMO_AdditionsR4_t),
3411CSN_DESCR_END (PMO_AdditionsR99_t)
3412
3413static const
3414CSN_DESCR_BEGIN (PCCO_AdditionsR4_t)
3415 M_UINT (PCCO_AdditionsR4_t, CCN_ACTIVE, 1),
3416 M_NEXT_EXIST (PCCO_AdditionsR4_t, Exist_Container_ID, 1),
3417 M_UINT (PCCO_AdditionsR4_t, CONTAINER_ID, 2),
3418 M_NEXT_EXIST (PCCO_AdditionsR4_t, Exist_CCN_Support_Description_ID, 1),
3419 M_TYPE (PCCO_AdditionsR4_t, CCN_Support_Description, CCN_Support_Description_t),
3420 M_NEXT_EXIST_OR_NULL (PCCO_AdditionsR4_t, Exist_AdditionsR5, 1),
3421 M_TYPE (PCCO_AdditionsR4_t, AdditionsR5, PCCO_AdditionsR5_t),
3422CSN_DESCR_END (PCCO_AdditionsR4_t)
3423
3424static const
3425CSN_DESCR_BEGIN (PCCO_AdditionsR99_t)
3426 M_TYPE (PCCO_AdditionsR99_t, ENH_Measurement_Parameters, ENH_Measurement_Parameters_PCCO_t),
3427 M_NEXT_EXIST_OR_NULL (PCCO_AdditionsR99_t, Exist_AdditionsR4, 1),
3428 M_TYPE (PCCO_AdditionsR99_t, AdditionsR4, PCCO_AdditionsR4_t),
3429CSN_DESCR_END (PCCO_AdditionsR99_t)
3430
3431static const
3432CSN_DESCR_BEGIN(LSA_ID_Info_Element_t)
3433 M_UNION (LSA_ID_Info_Element_t, 2),
3434 M_UINT (LSA_ID_Info_Element_t, u.LSA_ID, 24),
3435 M_UINT (LSA_ID_Info_Element_t, u.ShortLSA_ID, 10),
3436CSN_DESCR_END (LSA_ID_Info_Element_t)
3437
3438static const
3439CSN_DESCR_BEGIN(LSA_ID_Info_t)
3440 M_REC_TARRAY (LSA_ID_Info_t, LSA_ID_Info_Elements, LSA_ID_Info_Element_t, Count_LSA_ID_Info_Element),
3441CSN_DESCR_END (LSA_ID_Info_t)
3442
3443static const
3444CSN_DESCR_BEGIN(LSA_Parameters_t)
3445 M_UINT (LSA_Parameters_t, NR_OF_FREQ_OR_CELLS, 5),
3446 M_VAR_TARRAY (LSA_Parameters_t, LSA_ID_Info, LSA_ID_Info_t, NR_OF_FREQ_OR_CELLS),
3447CSN_DESCR_END (LSA_Parameters_t)
3448
3449static const
3450CSN_DESCR_BEGIN (PMO_AdditionsR98_t)
3451 M_NEXT_EXIST (PMO_AdditionsR98_t, Exist_LSA_Parameters, 1),
3452 M_TYPE (PMO_AdditionsR98_t, LSA_Parameters, LSA_Parameters_t),
3453
3454 M_NEXT_EXIST_OR_NULL (PMO_AdditionsR98_t, Exist_AdditionsR99, 1),
3455 M_TYPE (PMO_AdditionsR98_t, AdditionsR99, PMO_AdditionsR99_t),
3456CSN_DESCR_END (PMO_AdditionsR98_t)
3457
3458static const
3459CSN_DESCR_BEGIN (PCCO_AdditionsR98_t)
3460 M_NEXT_EXIST (PCCO_AdditionsR98_t, Exist_LSA_Parameters, 1),
3461 M_TYPE (PCCO_AdditionsR98_t, LSA_Parameters, LSA_Parameters_t),
3462
3463 M_NEXT_EXIST_OR_NULL (PCCO_AdditionsR98_t, Exist_AdditionsR99, 1),
3464 M_TYPE (PCCO_AdditionsR98_t, AdditionsR99, PCCO_AdditionsR99_t),
3465CSN_DESCR_END (PCCO_AdditionsR98_t)
3466
3467static const
3468CSN_DESCR_BEGIN (Target_Cell_GSM_t)
3469 M_UINT (Target_Cell_GSM_t, IMMEDIATE_REL, 1),
3470 M_UINT (Target_Cell_GSM_t, ARFCN, 10),
3471 M_UINT (Target_Cell_GSM_t, BSIC, 6),
3472 M_TYPE (Target_Cell_GSM_t, NC_Measurement_Parameters, NC_Measurement_Parameters_with_Frequency_List_t),
3473 M_NEXT_EXIST_OR_NULL (Target_Cell_GSM_t, Exist_AdditionsR98, 1),
3474 M_TYPE (Target_Cell_GSM_t, AdditionsR98, PCCO_AdditionsR98_t),
3475CSN_DESCR_END (Target_Cell_GSM_t)
3476
3477static const
3478CSN_DESCR_BEGIN (Target_Cell_3G_AdditionsR8_t)
3479 M_NEXT_EXIST (Target_Cell_3G_AdditionsR8_t, Exist_EUTRAN_Target_Cell, 1),
3480 M_TYPE (Target_Cell_3G_AdditionsR8_t, EUTRAN_Target_Cell, EUTRAN_Target_Cell_t),
3481 M_NEXT_EXIST (Target_Cell_3G_AdditionsR8_t, Exist_Individual_Priorities, 1),
3482 M_TYPE (Target_Cell_3G_AdditionsR8_t, Individual_Priorities, Individual_Priorities_t),
3483CSN_DESCR_END (Target_Cell_3G_AdditionsR8_t)
3484
3485static const
3486CSN_DESCR_BEGIN (Target_Cell_3G_AdditionsR5_t)
3487 M_NEXT_EXIST (Target_Cell_3G_AdditionsR5_t, Exist_G_RNTI_Extention, 1),
3488 M_UINT (Target_Cell_3G_AdditionsR5_t, G_RNTI_Extention, 4),
3489 M_NEXT_EXIST_OR_NULL (Target_Cell_3G_AdditionsR5_t, Exist_AdditionsR8, 1),
3490 M_TYPE (Target_Cell_3G_AdditionsR5_t, AdditionsR8, Target_Cell_3G_AdditionsR8_t),
3491CSN_DESCR_END (Target_Cell_3G_AdditionsR5_t)
3492
3493static const
3494CSN_DESCR_BEGIN(Target_Cell_3G_t)
3495 /* 00 -- Message escape */
3496 M_FIXED (Target_Cell_3G_t, 2, 0x00),
3497 M_UINT (Target_Cell_3G_t, IMMEDIATE_REL, 1),
3498 M_NEXT_EXIST (Target_Cell_3G_t, Exist_FDD_Description, 1),
3499 M_TYPE (Target_Cell_3G_t, FDD_Target_Cell, FDD_Target_Cell_t),
3500 M_NEXT_EXIST (Target_Cell_3G_t, Exist_TDD_Description, 1),
3501 M_TYPE (Target_Cell_3G_t, TDD_Target_Cell, TDD_Target_Cell_t),
3502 M_NEXT_EXIST_OR_NULL (Target_Cell_3G_t, Exist_AdditionsR5, 1),
3503 M_TYPE (Target_Cell_3G_t, AdditionsR5, Target_Cell_3G_AdditionsR5_t),
3504CSN_DESCR_END (Target_Cell_3G_t)
3505
3506static const
3507CSN_DESCR_BEGIN(Packet_Cell_Change_Order_t)
3508 M_UINT (Packet_Cell_Change_Order_t, MESSAGE_TYPE, 6),
3509 M_UINT (Packet_Cell_Change_Order_t, PAGE_MODE, 2),
3510
3511 M_TYPE (Packet_Cell_Change_Order_t, ID, PacketCellChangeOrderID_t),
3512
3513 M_UNION (Packet_Cell_Change_Order_t, 2),
3514 M_TYPE (Packet_Cell_Change_Order_t, u.Target_Cell_GSM, Target_Cell_GSM_t),
3515 M_TYPE (Packet_Cell_Change_Order_t, u.Target_Cell_3G, Target_Cell_3G_t),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04003516
3517 M_PADDING_BITS(Packet_Cell_Change_Order_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03003518CSN_DESCR_END (Packet_Cell_Change_Order_t)
3519
3520/*< Packet (Enhanced) Measurement Report message contents > */
3521static const
3522CSN_DESCR_BEGIN(BA_USED_t)
3523 M_UINT (BA_USED_t, BA_USED, 1),
3524 M_UINT (BA_USED_t, BA_USED_3G, 1),
3525CSN_DESCR_END (BA_USED_t)
3526
3527static const
3528CSN_DESCR_BEGIN(Serving_Cell_Data_t)
3529 M_UINT (Serving_Cell_Data_t, RXLEV_SERVING_CELL, 6),
3530 M_FIXED (Serving_Cell_Data_t, 1, 0),
3531CSN_DESCR_END (Serving_Cell_Data_t)
3532
3533static const
3534CSN_DESCR_BEGIN(NC_Measurements_t)
3535 M_UINT (NC_Measurements_t, FREQUENCY_N, 6),
3536
3537 M_NEXT_EXIST (NC_Measurements_t, Exist_BSIC_N, 1),
3538 M_UINT (NC_Measurements_t, BSIC_N, 6),
3539 M_UINT (NC_Measurements_t, RXLEV_N, 6),
3540CSN_DESCR_END (NC_Measurements_t)
3541
3542static const
3543CSN_DESCR_BEGIN(RepeatedInvalid_BSIC_Info_t)
3544 M_UINT (RepeatedInvalid_BSIC_Info_t, BCCH_FREQ_N, 5),
3545 M_UINT (RepeatedInvalid_BSIC_Info_t, BSIC_N, 6),
3546 M_UINT (RepeatedInvalid_BSIC_Info_t, RXLEV_N, 6),
3547CSN_DESCR_END (RepeatedInvalid_BSIC_Info_t)
3548
3549static const
3550CSN_DESCR_BEGIN(REPORTING_QUANTITY_Instance_t)
3551 M_NEXT_EXIST (REPORTING_QUANTITY_Instance_t, Exist_REPORTING_QUANTITY, 1),
3552 M_UINT (REPORTING_QUANTITY_Instance_t, REPORTING_QUANTITY, 6),
3553CSN_DESCR_END (REPORTING_QUANTITY_Instance_t)
3554
3555static const
3556CSN_DESCR_BEGIN(NC_Measurement_Report_t)
3557 M_UINT (NC_Measurement_Report_t, NC_MODE, 1),
3558 M_TYPE (NC_Measurement_Report_t, Serving_Cell_Data, Serving_Cell_Data_t),
3559 M_UINT (NC_Measurement_Report_t, NUMBER_OF_NC_MEASUREMENTS, 3),
3560 M_VAR_TARRAY (NC_Measurement_Report_t, NC_Measurements, NC_Measurements_t, NUMBER_OF_NC_MEASUREMENTS),
3561CSN_DESCR_END (NC_Measurement_Report_t)
3562
3563static const
3564CSN_DESCR_BEGIN(ENH_NC_Measurement_Report_t)
3565 M_UINT (ENH_NC_Measurement_Report_t, NC_MODE, 1),
3566 M_UNION (ENH_NC_Measurement_Report_t, 2),
3567 M_TYPE (ENH_NC_Measurement_Report_t, u.BA_USED, BA_USED_t),
3568 M_UINT (ENH_NC_Measurement_Report_t, u.PSI3_CHANGE_MARK, 2),
3569 M_UINT (ENH_NC_Measurement_Report_t, PMO_USED, 1),
3570 M_UINT (ENH_NC_Measurement_Report_t, BSIC_Seen, 1),
3571 M_UINT (ENH_NC_Measurement_Report_t, SCALE, 1),
3572 M_NEXT_EXIST (ENH_NC_Measurement_Report_t, Exist_Serving_Cell_Data, 1),
3573 M_TYPE (ENH_NC_Measurement_Report_t, Serving_Cell_Data, Serving_Cell_Data_t),
Pau Espin Pedrol81b40cb2020-03-23 15:23:51 +01003574 M_REC_TARRAY (ENH_NC_Measurement_Report_t, RepeatedInvalid_BSIC_Info, RepeatedInvalid_BSIC_Info_t, Count_RepeatedInvalid_BSIC_Info),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03003575 M_NEXT_EXIST (ENH_NC_Measurement_Report_t, Exist_ReportBitmap, 1),
3576 M_VAR_TARRAY (ENH_NC_Measurement_Report_t, REPORTING_QUANTITY_Instances, REPORTING_QUANTITY_Instance_t, Count_REPORTING_QUANTITY_Instances),
3577CSN_DESCR_END (ENH_NC_Measurement_Report_t)
3578
3579
3580static const
3581CSN_DESCR_BEGIN(EXT_Measurement_Report_t)
3582 M_UINT (EXT_Measurement_Report_t, EXT_REPORTING_TYPE, 2),
3583
3584 M_NEXT_EXIST (EXT_Measurement_Report_t, Exist_I_LEVEL, 1),
3585
3586 M_NEXT_EXIST (EXT_Measurement_Report_t, Slot[0].Exist, 1),
3587 M_UINT (EXT_Measurement_Report_t, Slot[0].I_LEVEL, 6),
3588
3589 M_NEXT_EXIST (EXT_Measurement_Report_t, Slot[1].Exist, 1),
3590 M_UINT (EXT_Measurement_Report_t, Slot[1].I_LEVEL, 6),
3591
3592 M_NEXT_EXIST (EXT_Measurement_Report_t, Slot[2].Exist, 1),
3593 M_UINT (EXT_Measurement_Report_t, Slot[2].I_LEVEL, 6),
3594
3595 M_NEXT_EXIST (EXT_Measurement_Report_t, Slot[3].Exist, 1),
3596 M_UINT (EXT_Measurement_Report_t, Slot[3].I_LEVEL, 6),
3597
3598 M_NEXT_EXIST (EXT_Measurement_Report_t, Slot[4].Exist, 1),
3599 M_UINT (EXT_Measurement_Report_t, Slot[4].I_LEVEL, 6),
3600
3601 M_NEXT_EXIST (EXT_Measurement_Report_t, Slot[5].Exist, 1),
3602 M_UINT (EXT_Measurement_Report_t, Slot[5].I_LEVEL, 6),
3603
3604 M_NEXT_EXIST (EXT_Measurement_Report_t, Slot[6].Exist, 1),
3605 M_UINT (EXT_Measurement_Report_t, Slot[6].I_LEVEL, 6),
3606
3607 M_NEXT_EXIST (EXT_Measurement_Report_t, Slot[7].Exist, 1),
3608 M_UINT (EXT_Measurement_Report_t, Slot[7].I_LEVEL, 6),
3609
3610 M_UINT (EXT_Measurement_Report_t, NUMBER_OF_EXT_MEASUREMENTS, 5),
3611 M_VAR_TARRAY (EXT_Measurement_Report_t, EXT_Measurements, NC_Measurements_t, NUMBER_OF_EXT_MEASUREMENTS),
3612CSN_DESCR_END (EXT_Measurement_Report_t)
3613
3614static const
3615CSN_DESCR_BEGIN (Measurements_3G_t)
3616 M_UINT (Measurements_3G_t, CELL_LIST_INDEX_3G, 7),
3617 M_UINT (Measurements_3G_t, REPORTING_QUANTITY, 6),
3618CSN_DESCR_END (Measurements_3G_t)
3619
3620static const
3621CSN_DESCR_BEGIN (EUTRAN_Measurement_Report_Body_t)
3622 M_UINT (EUTRAN_Measurement_Report_Body_t, EUTRAN_FREQUENCY_INDEX, 3),
3623 M_UINT (EUTRAN_Measurement_Report_Body_t, CELL_IDENTITY, 9),
3624 M_UINT (EUTRAN_Measurement_Report_Body_t, REPORTING_QUANTITY, 6),
3625CSN_DESCR_END (EUTRAN_Measurement_Report_Body_t)
3626
3627static const
3628CSN_DESCR_BEGIN (EUTRAN_Measurement_Report_t)
3629 M_UINT_OFFSET (EUTRAN_Measurement_Report_t, N_EUTRAN, 2, 1),
3630 M_VAR_TARRAY (EUTRAN_Measurement_Report_t, Report, EUTRAN_Measurement_Report_Body_t, N_EUTRAN),
3631CSN_DESCR_END (EUTRAN_Measurement_Report_t)
3632
3633static const
3634CSN_DESCR_BEGIN(UTRAN_CSG_Measurement_Report_t)
3635 M_UINT (UTRAN_CSG_Measurement_Report_t, UTRAN_CGI, 28),
3636 M_NEXT_EXIST (UTRAN_CSG_Measurement_Report_t, Exist_PLMN_ID, 1),
3637 M_TYPE (UTRAN_CSG_Measurement_Report_t, Plmn_ID, PLMN_t),
3638 M_UINT (UTRAN_CSG_Measurement_Report_t, CSG_ID, 27),
Anders Broman8ea3cbe2020-01-28 17:36:33 +01003639 M_UINT (UTRAN_CSG_Measurement_Report_t, Access_Mode, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03003640 M_UINT (UTRAN_CSG_Measurement_Report_t, REPORTING_QUANTITY, 6),
3641CSN_DESCR_END (UTRAN_CSG_Measurement_Report_t)
3642
3643static const
3644CSN_DESCR_BEGIN(EUTRAN_CSG_Measurement_Report_t)
Anders Broman8ea3cbe2020-01-28 17:36:33 +01003645 M_UINT (EUTRAN_CSG_Measurement_Report_t, EUTRAN_CGI, 28),
3646 M_UINT (EUTRAN_CSG_Measurement_Report_t, Tracking_Area_Code, 16),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03003647 M_NEXT_EXIST (EUTRAN_CSG_Measurement_Report_t, Exist_PLMN_ID, 1),
3648 M_TYPE (EUTRAN_CSG_Measurement_Report_t, Plmn_ID, PLMN_t),
Anders Broman8ea3cbe2020-01-28 17:36:33 +01003649 M_UINT (EUTRAN_CSG_Measurement_Report_t, CSG_ID, 27),
3650 M_UINT (EUTRAN_CSG_Measurement_Report_t, Access_Mode, 1),
3651 M_UINT (EUTRAN_CSG_Measurement_Report_t, REPORTING_QUANTITY, 6),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03003652CSN_DESCR_END (EUTRAN_CSG_Measurement_Report_t)
3653
3654static const
3655CSN_DESCR_BEGIN (PMR_AdditionsR9_t)
3656 M_NEXT_EXIST (PMR_AdditionsR9_t, Exist_UTRAN_CSG_Meas_Rpt, 1),
3657 M_TYPE (PMR_AdditionsR9_t, UTRAN_CSG_Meas_Rpt, UTRAN_CSG_Measurement_Report_t),
3658 M_NEXT_EXIST (PMR_AdditionsR9_t, Exist_EUTRAN_CSG_Meas_Rpt, 1),
3659 M_TYPE (PMR_AdditionsR9_t, EUTRAN_CSG_Meas_Rpt, EUTRAN_CSG_Measurement_Report_t),
3660CSN_DESCR_END (PMR_AdditionsR9_t)
3661
3662static const
3663CSN_DESCR_BEGIN (PMR_AdditionsR8_t)
3664 M_NEXT_EXIST (PMR_AdditionsR8_t, Exist_EUTRAN_Meas_Rpt, 1),
3665 M_TYPE (PMR_AdditionsR8_t, EUTRAN_Meas_Rpt, EUTRAN_Measurement_Report_t),
3666 M_NEXT_EXIST_OR_NULL(PMR_AdditionsR8_t, Exist_AdditionsR9, 1),
3667 M_TYPE (PMR_AdditionsR8_t, AdditionsR9, PMR_AdditionsR9_t),
3668CSN_DESCR_END (PMR_AdditionsR8_t)
3669
3670static const
3671CSN_DESCR_BEGIN (PMR_AdditionsR5_t)
Pascal Quantine4a243c2020-01-28 18:08:15 +01003672 M_NEXT_EXIST (PMR_AdditionsR5_t, Exist_GRNTI, 3),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03003673 M_UINT (PMR_AdditionsR5_t, GRNTI, 4),
3674 M_NEXT_EXIST_OR_NULL (PMR_AdditionsR5_t, Exist_AdditionsR8, 1),
3675 M_TYPE (PMR_AdditionsR5_t, AdditionsR8, PMR_AdditionsR8_t),
3676CSN_DESCR_END (PMR_AdditionsR5_t)
3677
3678static const
3679CSN_DESCR_BEGIN (PMR_AdditionsR99_t)
3680 M_NEXT_EXIST (PMR_AdditionsR99_t, Exist_Info3G, 4),
3681 M_UNION (PMR_AdditionsR99_t, 2),
3682 M_TYPE (PMR_AdditionsR99_t, u.BA_USED, BA_USED_t),
3683 M_UINT (PMR_AdditionsR99_t, u.PSI3_CHANGE_MARK, 2),
3684 M_UINT (PMR_AdditionsR99_t, PMO_USED, 1),
3685
3686 M_NEXT_EXIST (PMR_AdditionsR99_t, Exist_MeasurementReport3G, 2),
3687 M_UINT_OFFSET (PMR_AdditionsR99_t, N_3G, 3, 1), /* offset 1 */
3688 M_VAR_TARRAY_OFFSET (PMR_AdditionsR99_t, Measurements_3G, Measurements_3G_t, N_3G),
3689
3690 M_NEXT_EXIST_OR_NULL (PMR_AdditionsR99_t, Exist_AdditionsR5, 1),
3691 M_TYPE (PMR_AdditionsR99_t, AdditionsR5, PMR_AdditionsR5_t),
3692CSN_DESCR_END (PMR_AdditionsR99_t)
3693
3694static const
3695CSN_DESCR_BEGIN(EMR_ServingCell_t)
3696 /*CSN_MEMBER_BIT (EMR_ServingCell_t, DTX_USED),*/
Anders Broman8ea3cbe2020-01-28 17:36:33 +01003697 M_UINT (EMR_ServingCell_t, DTX_USED, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03003698 M_UINT (EMR_ServingCell_t, RXLEV_VAL, 6),
3699 M_UINT (EMR_ServingCell_t, RX_QUAL_FULL, 3),
3700 M_UINT (EMR_ServingCell_t, MEAN_BEP, 5),
3701 M_UINT (EMR_ServingCell_t, CV_BEP, 3),
3702 M_UINT (EMR_ServingCell_t, NBR_RCVD_BLOCKS, 5),
3703CSN_DESCR_END(EMR_ServingCell_t)
3704
3705static const
3706CSN_DESCR_BEGIN (EnhancedMeasurementReport_t)
3707 M_UINT (EnhancedMeasurementReport_t, RR_Short_PD, 1),
3708 M_UINT (EnhancedMeasurementReport_t, MESSAGE_TYPE, 5),
3709 M_UINT (EnhancedMeasurementReport_t, ShortLayer2_Header, 2),
3710 M_TYPE (EnhancedMeasurementReport_t, BA_USED, BA_USED_t),
3711 M_UINT (EnhancedMeasurementReport_t, BSIC_Seen, 1),
3712 M_UINT (EnhancedMeasurementReport_t, SCALE, 1),
3713 M_NEXT_EXIST (EnhancedMeasurementReport_t, Exist_ServingCellData, 1),
3714 M_TYPE (EnhancedMeasurementReport_t, ServingCellData, EMR_ServingCell_t),
Pau Espin Pedrol81b40cb2020-03-23 15:23:51 +01003715 M_REC_TARRAY (EnhancedMeasurementReport_t, RepeatedInvalid_BSIC_Info, RepeatedInvalid_BSIC_Info_t,
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03003716 Count_RepeatedInvalid_BSIC_Info),
3717 M_NEXT_EXIST (EnhancedMeasurementReport_t, Exist_ReportBitmap, 1),
3718 M_VAR_TARRAY (EnhancedMeasurementReport_t, REPORTING_QUANTITY_Instances, REPORTING_QUANTITY_Instance_t, Count_REPORTING_QUANTITY_Instances),
3719CSN_DESCR_END (EnhancedMeasurementReport_t)
3720
3721static const
3722CSN_DESCR_BEGIN (Packet_Measurement_Report_t)
3723 /* Mac header */
3724 M_UINT (Packet_Measurement_Report_t, PayloadType, 2),
3725 M_UINT (Packet_Measurement_Report_t, spare, 5),
3726 M_UINT (Packet_Measurement_Report_t, R, 1),
3727 M_UINT (Packet_Measurement_Report_t, MESSAGE_TYPE, 6),
3728 /* Mac header */
3729
3730 M_UINT (Packet_Measurement_Report_t, TLLI, 32),
3731
3732 M_NEXT_EXIST (Packet_Measurement_Report_t, Exist_PSI5_CHANGE_MARK, 1),
3733 M_UINT (Packet_Measurement_Report_t, PSI5_CHANGE_MARK, 2),
3734
3735 M_UNION (Packet_Measurement_Report_t, 2),
3736 M_TYPE (Packet_Measurement_Report_t, u.NC_Measurement_Report, NC_Measurement_Report_t),
3737 M_TYPE (Packet_Measurement_Report_t, u.EXT_Measurement_Report, EXT_Measurement_Report_t),
3738
3739 M_NEXT_EXIST_OR_NULL(Packet_Measurement_Report_t, Exist_AdditionsR99, 1),
3740 M_TYPE (Packet_Measurement_Report_t, AdditionsR99, PMR_AdditionsR99_t),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04003741
3742 M_PADDING_BITS (Packet_Measurement_Report_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03003743CSN_DESCR_END (Packet_Measurement_Report_t)
3744
3745static const
3746CSN_DESCR_BEGIN (PEMR_AdditionsR9_t)
3747 M_NEXT_EXIST (PEMR_AdditionsR9_t, Exist_UTRAN_CSG_Target_Cell, 1),
3748 M_TYPE (PEMR_AdditionsR9_t, UTRAN_CSG_Target_Cell, UTRAN_CSG_Target_Cell_t),
3749 M_NEXT_EXIST (PEMR_AdditionsR9_t, Exist_EUTRAN_CSG_Target_Cell, 1),
3750 M_TYPE (PEMR_AdditionsR9_t, EUTRAN_CSG_Target_Cell, EUTRAN_CSG_Target_Cell_t),
3751CSN_DESCR_END (PEMR_AdditionsR9_t)
3752
3753static const
3754CSN_DESCR_BEGIN (Bitmap_Report_Quantity_t)
3755 M_NEXT_EXIST (Bitmap_Report_Quantity_t, Exist_REPORTING_QUANTITY, 1),
3756 M_UINT (Bitmap_Report_Quantity_t, REPORTING_QUANTITY, 6),
3757CSN_DESCR_END (Bitmap_Report_Quantity_t)
3758
3759static const
3760CSN_DESCR_BEGIN (PEMR_AdditionsR8_t)
3761 M_UINT_OFFSET (PEMR_AdditionsR8_t, BITMAP_LENGTH, 7, 1),
3762 M_VAR_TARRAY (PEMR_AdditionsR8_t, Bitmap_Report_Quantity, Bitmap_Report_Quantity_t, BITMAP_LENGTH),
3763 M_NEXT_EXIST (PEMR_AdditionsR8_t, Exist_EUTRAN_Meas_Rpt, 1),
3764 M_TYPE (PEMR_AdditionsR8_t, EUTRAN_Meas_Rpt, EUTRAN_Measurement_Report_t),
3765 M_NEXT_EXIST_OR_NULL(PEMR_AdditionsR8_t, Exist_AdditionsR9, 1),
3766 M_TYPE (PEMR_AdditionsR8_t, AdditionsR9, PEMR_AdditionsR9_t),
3767CSN_DESCR_END (PEMR_AdditionsR8_t)
3768
3769static const
3770CSN_DESCR_BEGIN (PEMR_AdditionsR5_t)
3771 M_NEXT_EXIST (PEMR_AdditionsR5_t, Exist_GRNTI_Ext, 1),
3772 M_UINT (PEMR_AdditionsR5_t, GRNTI_Ext, 4),
3773 M_NEXT_EXIST_OR_NULL(PEMR_AdditionsR5_t, Exist_AdditionsR8, 1),
3774 M_TYPE (PEMR_AdditionsR5_t, AdditionsR8, PEMR_AdditionsR8_t),
3775CSN_DESCR_END (PEMR_AdditionsR5_t)
3776
3777
3778static const
3779CSN_DESCR_BEGIN (Packet_Enh_Measurement_Report_t)
3780 /* Mac header */
3781 M_UINT (Packet_Enh_Measurement_Report_t, PayloadType, 2),
3782 M_UINT (Packet_Enh_Measurement_Report_t, spare, 5),
3783 M_UINT (Packet_Enh_Measurement_Report_t, R, 1),
3784 M_UINT (Packet_Enh_Measurement_Report_t, MESSAGE_TYPE, 6),
3785 /* Mac header */
3786
3787 M_UINT (Packet_Enh_Measurement_Report_t, TLLI, 32),
3788
3789 M_TYPE (Packet_Enh_Measurement_Report_t, Measurements, ENH_NC_Measurement_Report_t),
3790
3791 M_NEXT_EXIST_OR_NULL(Packet_Enh_Measurement_Report_t, Exist_AdditionsR5, 1),
3792 M_TYPE (Packet_Enh_Measurement_Report_t, AdditionsR5, PEMR_AdditionsR5_t),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04003793
3794 M_PADDING_BITS(Packet_Enh_Measurement_Report_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03003795CSN_DESCR_END (Packet_Enh_Measurement_Report_t)
3796
3797/*< Packet Measurement Order message contents >*/
3798static const
3799CSN_DESCR_BEGIN(EXT_Frequency_List_t)
3800 M_UINT (EXT_Frequency_List_t, START_FREQUENCY, 10),
3801 M_UINT (EXT_Frequency_List_t, NR_OF_FREQUENCIES, 5),
3802 M_UINT (EXT_Frequency_List_t, FREQ_DIFF_LENGTH, 3),
3803
3804/* TBD: Count_FREQUENCY_DIFF
3805 * guint8 FREQUENCY_DIFF[31];
3806 * bit (FREQ_DIFF_LENGTH) * NR_OF_FREQUENCIES --> MAX is bit(7) * 31
3807 */
3808CSN_DESCR_END (EXT_Frequency_List_t)
3809
3810static const
3811CSN_DESCR_BEGIN (Packet_Measurement_Order_t)
3812 M_UINT (Packet_Measurement_Order_t, MESSAGE_TYPE, 6),
3813 M_UINT (Packet_Measurement_Order_t, PAGE_MODE, 2),
3814
3815 M_TYPE (Packet_Measurement_Order_t, ID, PacketDownlinkID_t), /* reuse the PDA ID type */
3816
3817 M_UINT (Packet_Measurement_Order_t, PMO_INDEX, 3),
3818 M_UINT (Packet_Measurement_Order_t, PMO_COUNT, 3),
3819
3820 M_NEXT_EXIST (Packet_Measurement_Order_t, Exist_NC_Measurement_Parameters, 1),
3821 M_TYPE (Packet_Measurement_Order_t, NC_Measurement_Parameters, NC_Measurement_Parameters_with_Frequency_List_t),
3822
3823 M_NEXT_EXIST (Packet_Measurement_Order_t, Exist_EXT_Measurement_Parameters, 1),
3824 M_FIXED (Packet_Measurement_Order_t, 2, 0x0), /* EXT_Measurement_Parameters not handled */
3825
3826 M_NEXT_EXIST_OR_NULL (Packet_Measurement_Order_t, Exist_AdditionsR98, 1),
3827 M_TYPE (Packet_Measurement_Order_t, AdditionsR98, PMO_AdditionsR98_t),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04003828
3829 M_PADDING_BITS (Packet_Measurement_Order_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03003830CSN_DESCR_END (Packet_Measurement_Order_t)
3831
3832static const
3833CSN_DESCR_BEGIN(CCN_Measurement_Report_t)
3834 M_UINT (CCN_Measurement_Report_t, RXLEV_SERVING_CELL, 6),
3835 M_FIXED (CCN_Measurement_Report_t, 1, 0),
3836 M_UINT (CCN_Measurement_Report_t, NUMBER_OF_NC_MEASUREMENTS, 3),
3837 M_VAR_TARRAY (CCN_Measurement_Report_t, NC_Measurements, NC_Measurements_t, NUMBER_OF_NC_MEASUREMENTS),
3838CSN_DESCR_END (CCN_Measurement_Report_t)
3839
3840static const
3841CSN_DESCR_BEGIN(Target_Cell_GSM_Notif_t)
3842 M_UINT (Target_Cell_GSM_Notif_t, ARFCN, 10),
3843 M_UINT (Target_Cell_GSM_Notif_t, BSIC, 6),
3844CSN_DESCR_END (Target_Cell_GSM_Notif_t)
3845
3846static const
3847CSN_DESCR_BEGIN(FDD_Target_Cell_Notif_t)
3848 M_UINT (FDD_Target_Cell_Notif_t, FDD_ARFCN, 14),
3849 M_NEXT_EXIST (FDD_Target_Cell_Notif_t, Exist_Bandwith_FDD, 1),
3850 M_UINT (FDD_Target_Cell_Notif_t, BANDWITH_FDD, 3),
3851 M_UINT (FDD_Target_Cell_Notif_t, SCRAMBLING_CODE, 9),
3852CSN_DESCR_END (FDD_Target_Cell_Notif_t)
3853
3854static const
3855CSN_DESCR_BEGIN(TDD_Target_Cell_Notif_t)
3856 M_UINT (TDD_Target_Cell_Notif_t, TDD_ARFCN, 14),
3857 M_NEXT_EXIST (TDD_Target_Cell_Notif_t, Exist_Bandwith_TDD, 1),
3858 M_UINT (TDD_Target_Cell_Notif_t, BANDWITH_TDD, 3),
3859 M_UINT (TDD_Target_Cell_Notif_t, CELL_PARAMETER, 7),
3860 M_UINT (TDD_Target_Cell_Notif_t, Sync_Case_TSTD, 1),
3861CSN_DESCR_END (TDD_Target_Cell_Notif_t)
3862
3863static const
3864CSN_DESCR_BEGIN(Target_Cell_3G_Notif_t)
3865 M_NEXT_EXIST (Target_Cell_3G_Notif_t, Exist_FDD_Description, 1),
3866 M_TYPE (Target_Cell_3G_Notif_t, FDD_Target_Cell_Notif, FDD_Target_Cell_Notif_t),
3867 M_NEXT_EXIST (Target_Cell_3G_Notif_t, Exist_TDD_Description, 1),
3868 M_TYPE (Target_Cell_3G_Notif_t, TDD_Target_Cell, TDD_Target_Cell_Notif_t),
3869 M_UINT (Target_Cell_3G_Notif_t, REPORTING_QUANTITY, 6),
3870CSN_DESCR_END (Target_Cell_3G_Notif_t)
3871
3872static const
3873CSN_DESCR_BEGIN(Target_EUTRAN_Cell_Notif_t)
3874 M_UINT (Target_EUTRAN_Cell_Notif_t, EARFCN, 16),
3875 M_NEXT_EXIST (Target_EUTRAN_Cell_Notif_t, Exist_Measurement_Bandwidth, 1),
3876 M_UINT (Target_EUTRAN_Cell_Notif_t, Measurement_Bandwidth, 3),
3877 M_UINT (Target_EUTRAN_Cell_Notif_t, Physical_Layer_Cell_Identity, 9),
3878 M_UINT (Target_EUTRAN_Cell_Notif_t, Reporting_Quantity, 6),
3879CSN_DESCR_END (Target_EUTRAN_Cell_Notif_t)
3880
3881static const
3882CSN_DESCR_BEGIN(Eutran_Ccn_Measurement_Report_Cell_t)
3883 M_UINT (Eutran_Ccn_Measurement_Report_Cell_t, EUTRAN_FREQUENCY_INDEX, 3),
3884 M_UINT (Eutran_Ccn_Measurement_Report_Cell_t, CELL_IDENTITY, 9),
3885 M_UINT (Eutran_Ccn_Measurement_Report_Cell_t, REPORTING_QUANTITY, 6),
3886CSN_DESCR_END (Eutran_Ccn_Measurement_Report_Cell_t)
3887
3888
3889static const
3890CSN_DESCR_BEGIN(Eutran_Ccn_Measurement_Report_t)
Anders Broman8ea3cbe2020-01-28 17:36:33 +01003891 M_UINT (Eutran_Ccn_Measurement_Report_t, ThreeG_BA_USED, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03003892 M_UINT_OFFSET(Eutran_Ccn_Measurement_Report_t, N_EUTRAN, 2, 1),
3893 M_VAR_TARRAY (Eutran_Ccn_Measurement_Report_t, Eutran_Ccn_Measurement_Report_Cell, Eutran_Ccn_Measurement_Report_Cell_t, N_EUTRAN),
3894CSN_DESCR_END (Eutran_Ccn_Measurement_Report_t)
3895
3896static const
3897CSN_DESCR_BEGIN(Target_Cell_4G_Notif_t)
3898 M_NEXT_EXIST (Target_Cell_4G_Notif_t, Exist_Arfcn, 2),
3899 M_UINT (Target_Cell_4G_Notif_t, Arfcn, 10),
3900 M_UINT (Target_Cell_4G_Notif_t, bsic, 6),
3901 M_NEXT_EXIST (Target_Cell_4G_Notif_t, Exist_3G_Target_Cell, 1),
3902 M_TYPE (Target_Cell_4G_Notif_t, Target_Cell_3G_Notif, Target_Cell_3G_Notif_t),
3903 M_NEXT_EXIST (Target_Cell_4G_Notif_t, Exist_Eutran_Target_Cell, 1),
3904 M_TYPE (Target_Cell_4G_Notif_t, Target_EUTRAN_Cell, Target_EUTRAN_Cell_Notif_t),
3905 M_NEXT_EXIST (Target_Cell_4G_Notif_t, Exist_Eutran_Ccn_Measurement_Report, 1),
3906 M_TYPE (Target_Cell_4G_Notif_t, Eutran_Ccn_Measurement_Report, Eutran_Ccn_Measurement_Report_t),
3907CSN_DESCR_END (Target_Cell_4G_Notif_t)
3908
3909static const
3910CSN_DESCR_BEGIN(Target_Cell_CSG_Notif_t)
3911 M_FIXED (Target_Cell_CSG_Notif_t, 1, 0x00),
3912 M_UNION (Target_Cell_CSG_Notif_t, 2),
3913 M_TYPE (Target_Cell_CSG_Notif_t, u.UTRAN_CSG_Measurement_Report, UTRAN_CSG_Measurement_Report_t),
3914 M_TYPE (Target_Cell_CSG_Notif_t, u.EUTRAN_CSG_Measurement_Report, EUTRAN_CSG_Measurement_Report_t),
3915 M_NEXT_EXIST (Target_Cell_CSG_Notif_t, Exist_Eutran_Ccn_Measurement_Report, 1),
3916 M_TYPE (Target_Cell_CSG_Notif_t, Eutran_Ccn_Measurement_Report, Eutran_Ccn_Measurement_Report_t),
3917CSN_DESCR_END (Target_Cell_CSG_Notif_t)
3918
3919static const
3920CSN_DESCR_BEGIN(Target_Other_RAT_2_Notif_t)
3921 /* 110 vs 1110 */
3922 M_UNION (Target_Other_RAT_2_Notif_t, 2),
3923 M_TYPE (Target_Other_RAT_2_Notif_t, u.Target_Cell_4G_Notif, Target_Cell_4G_Notif_t),
3924 M_TYPE (Target_Other_RAT_2_Notif_t, u.Target_Cell_CSG_Notif, Target_Cell_CSG_Notif_t),
3925CSN_DESCR_END (Target_Other_RAT_2_Notif_t)
3926
3927static const
3928CSN_DESCR_BEGIN(Target_Other_RAT_Notif_t)
3929 /* 10 vs 110 */
3930 M_UNION (Target_Other_RAT_Notif_t, 2),
3931 M_TYPE (Target_Other_RAT_Notif_t, u.Target_Cell_3G_Notif, Target_Cell_3G_Notif_t),
3932 M_TYPE (Target_Other_RAT_Notif_t, u.Target_Other_RAT_2_Notif, Target_Other_RAT_2_Notif_t),
3933CSN_DESCR_END (Target_Other_RAT_Notif_t)
3934
3935static const
3936CSN_DESCR_BEGIN(Target_Cell_t)
3937 /* 0 vs 10 */
3938 M_UNION (Target_Cell_t, 2),
3939 M_TYPE (Target_Cell_t, u.Target_Cell_GSM_Notif, Target_Cell_GSM_Notif_t),
3940 M_TYPE (Target_Cell_t, u.Target_Other_RAT_Notif, Target_Other_RAT_Notif_t),
3941CSN_DESCR_END (Target_Cell_t)
3942
3943static const
3944CSN_DESCR_BEGIN (PCCN_AdditionsR6_t)
3945 M_NEXT_EXIST (PCCN_AdditionsR6_t, Exist_BA_USED_3G, 1),
3946 M_UINT (PCCN_AdditionsR6_t, BA_USED_3G, 1),
3947
3948 M_UINT_OFFSET (PCCN_AdditionsR6_t, N_3G, 3, 1), /* offset 1 */
3949 M_VAR_TARRAY_OFFSET (PCCN_AdditionsR6_t, Measurements_3G, Measurements_3G_t, N_3G),
3950CSN_DESCR_END (PCCN_AdditionsR6_t)
3951
3952/*< Packet Cell Change Notification message contents > */
3953static const
3954CSN_DESCR_BEGIN(Packet_Cell_Change_Notification_t)
3955 /* Mac header */
3956 M_UINT (Packet_Cell_Change_Notification_t, PayloadType, 2),
3957 M_UINT (Packet_Cell_Change_Notification_t, spare, 5),
3958 M_UINT (Packet_Cell_Change_Notification_t, R, 1),
3959 M_UINT (Packet_Cell_Change_Notification_t, MESSAGE_TYPE, 6),
3960 /* Mac header */
3961
3962 M_TYPE (Packet_Cell_Change_Notification_t, Global_TFI, Global_TFI_t),
3963 M_TYPE (Packet_Cell_Change_Notification_t, Target_Cell, Target_Cell_t),
3964
3965 M_UNION (Packet_Cell_Change_Notification_t, 2),
3966 M_UINT (Packet_Cell_Change_Notification_t, u.BA_IND, 1),
3967 M_UINT (Packet_Cell_Change_Notification_t, u.PSI3_CHANGE_MARK, 2),
3968
3969 M_UINT (Packet_Cell_Change_Notification_t, PMO_USED, 1),
3970 M_UINT (Packet_Cell_Change_Notification_t, PCCN_SENDING, 1),
3971 M_TYPE (Packet_Cell_Change_Notification_t, CCN_Measurement_Report, CCN_Measurement_Report_t),
3972
3973 M_NEXT_EXIST_OR_NULL(Packet_Cell_Change_Notification_t, Exist_AdditionsR6, 1),
3974 M_TYPE (Packet_Cell_Change_Notification_t, AdditionsR6, PCCN_AdditionsR6_t),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04003975
3976 M_PADDING_BITS(Packet_Cell_Change_Notification_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03003977CSN_DESCR_END (Packet_Cell_Change_Notification_t)
3978
3979/*< Packet Cell Change Continue message contents > */
3980static const
3981CSN_DESCR_BEGIN(Packet_Cell_Change_Continue_t)
3982 M_UINT (Packet_Cell_Change_Continue_t, MESSAGE_TYPE, 6),
3983 M_UINT (Packet_Cell_Change_Continue_t, PAGE_MODE, 2),
3984 M_FIXED (Packet_Cell_Change_Continue_t, 1, 0x00),
3985 M_TYPE (Packet_Cell_Change_Continue_t, Global_TFI, Global_TFI_t),
3986
3987 M_NEXT_EXIST (Packet_Cell_Change_Continue_t, Exist_ID, 3),
3988 M_UINT (Packet_Cell_Change_Continue_t, ARFCN, 10),
3989 M_UINT (Packet_Cell_Change_Continue_t, BSIC, 6),
3990 M_UINT (Packet_Cell_Change_Continue_t, CONTAINER_ID, 2),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04003991
3992 M_PADDING_BITS(Packet_Cell_Change_Continue_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03003993CSN_DESCR_END (Packet_Cell_Change_Continue_t)
3994
3995/*< Packet Neighbour Cell Data message contents > */
3996static const
3997CSN_DESCR_BEGIN(PNCD_Container_With_ID_t)
3998 M_UINT (PNCD_Container_With_ID_t, ARFCN, 10),
3999 M_UINT (PNCD_Container_With_ID_t, BSIC, 6),
4000 M_UINT_ARRAY (PNCD_Container_With_ID_t, CONTAINER, 8, 17),/* 8*17 bits */
4001CSN_DESCR_END (PNCD_Container_With_ID_t)
4002
4003static const
4004CSN_DESCR_BEGIN(PNCD_Container_Without_ID_t)
4005 M_UINT_ARRAY (PNCD_Container_Without_ID_t, CONTAINER, 8, 19),/* 8*19 bits */
4006CSN_DESCR_END (PNCD_Container_Without_ID_t)
4007
4008static const
4009CSN_ChoiceElement_t PNCDContainer[] =
4010{
Pau Espin Pedrol7cce8252020-01-24 16:41:14 +01004011 {1, 0x0, 0, M_TYPE(PNCDContainer_t, u.PNCD_Container_Without_ID, PNCD_Container_Without_ID_t)},
4012 {1, 0x1, 0, M_TYPE(PNCDContainer_t, u.PNCD_Container_With_ID, PNCD_Container_With_ID_t)},
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004013};
4014
4015static const
4016CSN_DESCR_BEGIN(PNCDContainer_t)
4017 M_CHOICE (PNCDContainer_t, UnionType, PNCDContainer, ElementsOf(PNCDContainer)),
4018CSN_DESCR_END (PNCDContainer_t)
4019
4020static const
4021CSN_DESCR_BEGIN(Packet_Neighbour_Cell_Data_t)
4022 M_UINT (Packet_Neighbour_Cell_Data_t, MESSAGE_TYPE, 6),
4023 M_UINT (Packet_Neighbour_Cell_Data_t, PAGE_MODE, 2),
4024 M_FIXED (Packet_Neighbour_Cell_Data_t, 1, 0x00),
4025 M_TYPE (Packet_Neighbour_Cell_Data_t, Global_TFI, Global_TFI_t),
4026
4027 M_UINT (Packet_Neighbour_Cell_Data_t, CONTAINER_ID, 2),
4028 M_UINT (Packet_Neighbour_Cell_Data_t, spare, 1),
4029 M_UINT (Packet_Neighbour_Cell_Data_t, CONTAINER_INDEX, 5),
4030
4031 M_TYPE (Packet_Neighbour_Cell_Data_t, Container, PNCDContainer_t),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04004032 M_PADDING_BITS(Packet_Neighbour_Cell_Data_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004033CSN_DESCR_END (Packet_Neighbour_Cell_Data_t)
4034
4035/*< Packet Serving Cell Data message contents > */
4036static const
4037CSN_DESCR_BEGIN(Packet_Serving_Cell_Data_t)
4038 M_UINT (Packet_Serving_Cell_Data_t, MESSAGE_TYPE, 6),
4039 M_UINT (Packet_Serving_Cell_Data_t, PAGE_MODE, 2),
4040 M_FIXED (Packet_Serving_Cell_Data_t, 1, 0x00),
4041 M_TYPE (Packet_Serving_Cell_Data_t, Global_TFI, Global_TFI_t),
4042
4043 M_UINT (Packet_Serving_Cell_Data_t, spare, 4),
4044 M_UINT (Packet_Serving_Cell_Data_t, CONTAINER_INDEX, 5),
4045 M_UINT_ARRAY (Packet_Serving_Cell_Data_t, CONTAINER, 8, 19),/* 8*19 bits */
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04004046 M_PADDING_BITS(Packet_Serving_Cell_Data_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004047CSN_DESCR_END (Packet_Serving_Cell_Data_t)
4048
4049
4050/* Enhanced Measurement Report */
4051static const
4052CSN_DESCR_BEGIN (ServingCellData_t)
4053 M_UINT (ServingCellData_t, RXLEV_SERVING_CELL, 6),
4054 M_FIXED (ServingCellData_t, 1, 0),
4055CSN_DESCR_END (ServingCellData_t)
4056
4057static const
4058CSN_DESCR_BEGIN (Repeated_Invalid_BSIC_Info_t)
4059 M_UINT (Repeated_Invalid_BSIC_Info_t, BCCH_FREQ_NCELL, 5),
4060 M_UINT (Repeated_Invalid_BSIC_Info_t, BSIC, 6),
4061 M_UINT (Repeated_Invalid_BSIC_Info_t, RXLEV_NCELL, 5),
4062CSN_DESCR_END (Repeated_Invalid_BSIC_Info_t)
4063
4064static const
4065CSN_DESCR_BEGIN (REPORTING_QUANTITY_t)
4066 M_NEXT_EXIST (REPORTING_QUANTITY_t, Exist_REPORTING_QUANTITY, 1),
4067 M_UINT (REPORTING_QUANTITY_t, REPORTING_QUANTITY, 6),
4068CSN_DESCR_END (REPORTING_QUANTITY_t)
4069
4070
4071static const
4072CSN_DESCR_BEGIN (NC_MeasurementReport_t)
Anders Broman8ea3cbe2020-01-28 17:36:33 +01004073 M_UINT (NC_MeasurementReport_t, NC_MODE, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004074 M_UNION (NC_MeasurementReport_t, 2),
4075 M_TYPE (NC_MeasurementReport_t, u.BA_USED, BA_USED_t),
Anders Broman8ea3cbe2020-01-28 17:36:33 +01004076 M_UINT (NC_MeasurementReport_t, u.PSI3_CHANGE_MARK, 2),
4077 M_UINT (NC_MeasurementReport_t, PMO_USED, 1),
4078 M_UINT (NC_MeasurementReport_t, SCALE, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004079
4080 M_NEXT_EXIST (NC_MeasurementReport_t, Exist_ServingCellData, 1),
4081 M_TYPE (NC_MeasurementReport_t, ServingCellData, ServingCellData_t),
4082
4083 M_REC_TARRAY (NC_MeasurementReport_t, Repeated_Invalid_BSIC_Info, Repeated_Invalid_BSIC_Info_t, Count_Repeated_Invalid_BSIC_Info),
4084
4085 M_NEXT_EXIST (NC_MeasurementReport_t, Exist_Repeated_REPORTING_QUANTITY, 1),
4086 M_VAR_TARRAY (NC_MeasurementReport_t, Repeated_REPORTING_QUANTITY, REPORTING_QUANTITY_t, Count_Repeated_Reporting_Quantity),
4087CSN_DESCR_END (NC_MeasurementReport_t)
4088
4089
4090
4091/*< Packet Handover Command message content > */
4092static const
4093CSN_DESCR_BEGIN (GlobalTimeslotDescription_t)
4094 M_UNION (GlobalTimeslotDescription_t, 2),
4095 M_UINT (GlobalTimeslotDescription_t, u.MS_TimeslotAllocation, 8),
4096 M_TYPE (GlobalTimeslotDescription_t, u.Power_Control_Parameters, Power_Control_Parameters_t),
4097CSN_DESCR_END (GlobalTimeslotDescription_t)
4098
4099static const
4100CSN_DESCR_BEGIN (PHO_DownlinkAssignment_t)
4101 M_UINT (PHO_DownlinkAssignment_t, TimeslotAllocation, 8),
4102 M_UINT (PHO_DownlinkAssignment_t, PFI, 7),
Anders Broman8ea3cbe2020-01-28 17:36:33 +01004103 M_UINT (PHO_DownlinkAssignment_t, RLC_Mode, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004104 M_UINT (PHO_DownlinkAssignment_t, TFI_Assignment, 5),
Anders Broman8ea3cbe2020-01-28 17:36:33 +01004105 M_UINT (PHO_DownlinkAssignment_t, ControlACK, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004106
4107 M_NEXT_EXIST (PHO_DownlinkAssignment_t, Exist_EGPRS_WindowSize, 1),
4108 M_UINT (PHO_DownlinkAssignment_t, EGPRS_WindowSize, 5),
4109CSN_DESCR_END (PHO_DownlinkAssignment_t)
4110
4111static const
4112CSN_DESCR_BEGIN (PHO_USF_1_7_t)
4113 M_NEXT_EXIST (PHO_USF_1_7_t, Exist_USF, 1),
4114 M_UINT (PHO_USF_1_7_t, USF, 3),
4115CSN_DESCR_END (PHO_USF_1_7_t)
4116
4117static const
4118CSN_DESCR_BEGIN (USF_AllocationArray_t)
4119 M_UINT (USF_AllocationArray_t, USF_0, 3),
4120 M_VAR_TARRAY_OFFSET (USF_AllocationArray_t, USF_1_7, PHO_USF_1_7_t, NBR_OfAllocatedTimeslots),
4121CSN_DESCR_END (USF_AllocationArray_t)
4122
4123static const
4124CSN_DESCR_BEGIN (PHO_UplinkAssignment_t)
4125 M_UINT (PHO_UplinkAssignment_t, PFI, 7),
Anders Broman8ea3cbe2020-01-28 17:36:33 +01004126 M_UINT (PHO_UplinkAssignment_t, RLC_Mode, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004127 M_UINT (PHO_UplinkAssignment_t, TFI_Assignment, 5),
4128
4129 M_NEXT_EXIST (PHO_UplinkAssignment_t, Exist_ChannelCodingCommand, 1),
4130 M_UINT (PHO_UplinkAssignment_t, ChannelCodingCommand, 2),
4131
4132 M_NEXT_EXIST (PHO_UplinkAssignment_t, Exist_EGPRS_ChannelCodingCommand, 1),
4133 M_UINT (PHO_UplinkAssignment_t, EGPRS_ChannelCodingCommand, 4),
4134
4135 M_NEXT_EXIST (PHO_UplinkAssignment_t, Exist_EGPRS_WindowSize, 1),
4136 M_UINT (PHO_UplinkAssignment_t, EGPRS_WindowSize, 5),
4137
Anders Broman8ea3cbe2020-01-28 17:36:33 +01004138 M_UINT (PHO_UplinkAssignment_t, USF_Granularity, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004139
4140 M_NEXT_EXIST (PHO_UplinkAssignment_t, Exist_TBF_TimeslotAllocation, 1),
4141 M_LEFT_VAR_BMP (PHO_UplinkAssignment_t, TBF_TimeslotAllocation, u.USF_AllocationArray.NBR_OfAllocatedTimeslots, 0),
4142
4143 M_UNION (PHO_UplinkAssignment_t, 2),
4144 M_UINT (PHO_UplinkAssignment_t, u.USF_SingleAllocation, 3),
4145 M_TYPE (PHO_UplinkAssignment_t, u.USF_AllocationArray, USF_AllocationArray_t),
4146CSN_DESCR_END (PHO_UplinkAssignment_t)
4147
4148static const
4149CSN_DESCR_BEGIN (GlobalTimeslotDescription_UA_t)
4150 M_TYPE (GlobalTimeslotDescription_UA_t, GlobalTimeslotDescription, GlobalTimeslotDescription_t),
Pascal Quantin46374692020-01-28 18:03:22 +01004151 M_NEXT_EXIST (GlobalTimeslotDescription_UA_t, Exist_PHO_UA, 2), /* Don't use M_REC_TARRAY as we don't support multiple TBFs */
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004152
4153 M_TYPE (GlobalTimeslotDescription_UA_t, PHO_UA, PHO_UplinkAssignment_t),
4154 M_FIXED (GlobalTimeslotDescription_UA_t, 1, 0x0), /* Escape recursive */
4155CSN_DESCR_END (GlobalTimeslotDescription_UA_t)
4156
4157static const
4158CSN_DESCR_BEGIN (PHO_GPRS_t)
4159 M_NEXT_EXIST (PHO_GPRS_t, Exist_ChannelCodingCommand, 1),
4160 M_UINT (PHO_GPRS_t, ChannelCodingCommand, 2),
4161
4162 M_NEXT_EXIST (PHO_GPRS_t, Exist_GlobalTimeslotDescription_UA, 1),
4163 M_TYPE (PHO_GPRS_t, GTD_UA, GlobalTimeslotDescription_UA_t),
4164
4165 M_NEXT_EXIST (PHO_GPRS_t, Exist_DownlinkAssignment, 2), /* Don't use M_REC_TARRAY as we don't support multiple TBFs */
4166 M_TYPE (PHO_GPRS_t, DownlinkAssignment, PHO_DownlinkAssignment_t),
4167 M_FIXED (PHO_GPRS_t, 1, 0x0), /* Escape recursive */
4168CSN_DESCR_END (PHO_GPRS_t)
4169
4170static const
4171CSN_DESCR_BEGIN (EGPRS_Description_t)
4172 M_NEXT_EXIST (EGPRS_Description_t, Exist_EGPRS_WindowSize, 1),
4173 M_UINT (EGPRS_Description_t, EGPRS_WindowSize, 5),
4174
4175 M_UINT (EGPRS_Description_t, LinkQualityMeasurementMode, 2),
4176 M_NEXT_EXIST (EGPRS_Description_t, Exist_BEP_Period2, 1),
4177 M_UINT (EGPRS_Description_t, BEP_Period2, 4),
4178CSN_DESCR_END (EGPRS_Description_t)
4179
4180static const
4181CSN_DESCR_BEGIN (DownlinkTBF_t)
4182 M_NEXT_EXIST (DownlinkTBF_t, Exist_EGPRS_Description, 1),
4183 M_TYPE (DownlinkTBF_t, EGPRS_Description, EGPRS_Description_t),
4184
4185 M_NEXT_EXIST (DownlinkTBF_t, Exist_DownlinkAssignment, 2), /* Don't use M_REC_TARRAY as we don't support multiple TBFs */
4186 M_TYPE (DownlinkTBF_t, DownlinkAssignment, PHO_DownlinkAssignment_t),
4187 M_FIXED (DownlinkTBF_t, 1, 0x0), /* Escape recursive */
4188CSN_DESCR_END (DownlinkTBF_t)
4189
4190static const
4191CSN_DESCR_BEGIN (PHO_EGPRS_t)
4192 M_NEXT_EXIST (PHO_EGPRS_t, Exist_EGPRS_WindowSize, 1),
4193 M_UINT (PHO_EGPRS_t, EGPRS_WindowSize, 5),
4194
4195 M_NEXT_EXIST (PHO_EGPRS_t, Exist_EGPRS_ChannelCodingCommand, 1),
4196 M_UINT (PHO_EGPRS_t, EGPRS_ChannelCodingCommand, 4),
4197
4198 M_NEXT_EXIST (PHO_EGPRS_t, Exist_BEP_Period2, 1),
4199 M_UINT (PHO_EGPRS_t, BEP_Period2, 4),
4200
4201 M_NEXT_EXIST (PHO_EGPRS_t, Exist_GlobalTimeslotDescription_UA, 1),
4202 M_TYPE (PHO_EGPRS_t, GTD_UA, GlobalTimeslotDescription_UA_t),
4203
Pascal Quantin46374692020-01-28 18:03:22 +01004204 M_NEXT_EXIST (PHO_EGPRS_t, Exist_DownlinkTBF, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004205 M_TYPE (PHO_EGPRS_t, DownlinkTBF, DownlinkTBF_t),
4206CSN_DESCR_END (PHO_EGPRS_t)
4207
4208static const
4209CSN_DESCR_BEGIN(PHO_TimingAdvance_t)
4210 M_TYPE (PHO_TimingAdvance_t, GlobalPacketTimingAdvance, Global_Packet_Timing_Advance_t),
4211 M_NEXT_EXIST (PHO_TimingAdvance_t, Exist_PacketExtendedTimingAdvance, 1),
4212 M_UINT (PHO_TimingAdvance_t, PacketExtendedTimingAdvance, 2),
4213CSN_DESCR_END (PHO_TimingAdvance_t)
4214
4215static const
Vincent Helfree525bf92020-01-28 18:14:30 +01004216CSN_DESCR_BEGIN(NAS_Container_For_PS_HO_t)
4217 M_UINT (NAS_Container_For_PS_HO_t, NAS_ContainerLength, 7),
4218 M_UINT (NAS_Container_For_PS_HO_t, Spare_1a, 1),
4219 M_UINT (NAS_Container_For_PS_HO_t, Spare_1b, 1),
4220 M_UINT (NAS_Container_For_PS_HO_t, Spare_1c, 1),
4221 M_UINT (NAS_Container_For_PS_HO_t, Old_XID, 1),
4222 M_UINT (NAS_Container_For_PS_HO_t, Spare_1e, 1),
4223 M_UINT (NAS_Container_For_PS_HO_t, Type_of_Ciphering_Algo, 3),
4224 M_UINT (NAS_Container_For_PS_HO_t, IOV_UI_value, 32),
4225CSN_DESCR_END (NAS_Container_For_PS_HO_t)
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004226
4227static const
4228CSN_DESCR_BEGIN(PS_HandoverTo_UTRAN_Payload_t)
4229 M_UINT (PS_HandoverTo_UTRAN_Payload_t, RRC_ContainerLength, 8),
4230 M_VAR_ARRAY (PS_HandoverTo_UTRAN_Payload_t, RRC_Container, RRC_ContainerLength, 0),
4231CSN_DESCR_END (PS_HandoverTo_UTRAN_Payload_t)
4232
4233
4234static const
4235CSN_DESCR_BEGIN(PHO_RadioResources_t)
4236 M_NEXT_EXIST (PHO_RadioResources_t, Exist_HandoverReference, 1),
4237 M_UINT (PHO_RadioResources_t, HandoverReference, 8),
4238
4239 M_UINT (PHO_RadioResources_t, ARFCN, 10),
4240 M_UINT (PHO_RadioResources_t, SI, 2),
Anders Broman8ea3cbe2020-01-28 17:36:33 +01004241 M_UINT (PHO_RadioResources_t, NCI, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004242 M_UINT (PHO_RadioResources_t, BSIC, 6),
4243 M_NEXT_EXIST (PHO_RadioResources_t, Exist_CCN_Active, 1),
Anders Broman8ea3cbe2020-01-28 17:36:33 +01004244 M_UINT (PHO_RadioResources_t, CCN_Active, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004245
4246 M_NEXT_EXIST (PHO_RadioResources_t, Exist_CCN_Active_3G, 1),
Anders Broman8ea3cbe2020-01-28 17:36:33 +01004247 M_UINT (PHO_RadioResources_t, CCN_Active_3G, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004248
4249 M_NEXT_EXIST (PHO_RadioResources_t, Exist_CCN_Support_Description, 1),
4250 M_TYPE (PHO_RadioResources_t, CCN_Support_Description, CCN_Support_Description_t),
4251
4252 M_TYPE (PHO_RadioResources_t, Frequency_Parameters, Frequency_Parameters_t),
4253 M_UINT (PHO_RadioResources_t, NetworkControlOrder, 2),
4254 M_NEXT_EXIST (PHO_RadioResources_t, Exist_PHO_TimingAdvance, 1),
4255 M_TYPE (PHO_RadioResources_t, PHO_TimingAdvance, PHO_TimingAdvance_t),
4256
Anders Broman8ea3cbe2020-01-28 17:36:33 +01004257 M_UINT (PHO_RadioResources_t, Extended_Dynamic_Allocation, 1),
4258 M_UINT (PHO_RadioResources_t, RLC_Reset, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004259 M_NEXT_EXIST (PHO_RadioResources_t, Exist_PO_PR, 2),
4260 M_UINT (PHO_RadioResources_t, PO, 4),
Anders Broman8ea3cbe2020-01-28 17:36:33 +01004261 M_UINT (PHO_RadioResources_t, PR_Mode, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004262
4263
4264 M_NEXT_EXIST (PHO_RadioResources_t, Exist_UplinkControlTimeslot, 1),
4265 M_UINT (PHO_RadioResources_t, UplinkControlTimeslot, 3),
4266
4267 M_UNION (PHO_RadioResources_t, 2),
4268 M_TYPE (PHO_RadioResources_t, u.PHO_GPRS_Mode, PHO_GPRS_t),
4269 M_TYPE (PHO_RadioResources_t, u.PHO_EGPRS_Mode, PHO_EGPRS_t),
4270CSN_DESCR_END (PHO_RadioResources_t)
4271
4272static const
4273CSN_DESCR_BEGIN(PS_HandoverTo_A_GB_ModePayload_t)
4274 M_FIXED (PS_HandoverTo_A_GB_ModePayload_t, 2, 0x00), /* For future extension to enum. */
4275 M_TYPE (PS_HandoverTo_A_GB_ModePayload_t, PHO_RadioResources, PHO_RadioResources_t),
4276
4277 M_NEXT_EXIST (PS_HandoverTo_A_GB_ModePayload_t, Exist_NAS_Container, 1),
Vincent Helfree525bf92020-01-28 18:14:30 +01004278 M_TYPE (PS_HandoverTo_A_GB_ModePayload_t, NAS_Container, NAS_Container_For_PS_HO_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004279CSN_DESCR_END (PS_HandoverTo_A_GB_ModePayload_t)
4280
4281static const
4282CSN_DESCR_BEGIN(Packet_Handover_Command_t)
4283 M_UINT (Packet_Handover_Command_t, MessageType, 6),
4284 M_UINT (Packet_Handover_Command_t, PageMode, 2),
4285
4286 M_FIXED (Packet_Handover_Command_t, 1, 0x00), /* 0 fixed */
4287 M_TYPE (Packet_Handover_Command_t, Global_TFI, Global_TFI_t),
4288
4289 M_UINT (Packet_Handover_Command_t, ContainerID, 2),
4290
4291 M_UNION (Packet_Handover_Command_t, 4),
4292 M_TYPE (Packet_Handover_Command_t, u.PS_HandoverTo_A_GB_ModePayload, PS_HandoverTo_A_GB_ModePayload_t),
4293 M_TYPE (Packet_Handover_Command_t, u.PS_HandoverTo_UTRAN_Payload, PS_HandoverTo_UTRAN_Payload_t),
4294 CSN_ERROR (Packet_Handover_Command_t, "10 <extension> not implemented", CSN_ERROR_STREAM_NOT_SUPPORTED),
4295 CSN_ERROR (Packet_Handover_Command_t, "11 <extension> not implemented", CSN_ERROR_STREAM_NOT_SUPPORTED),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04004296
4297 M_PADDING_BITS(Packet_Handover_Command_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004298CSN_DESCR_END (Packet_Handover_Command_t)
4299
4300/*< End Packet Handover Command >*/
4301
4302/*< Packet Physical Information message content > */
4303
4304static const
4305CSN_DESCR_BEGIN(Packet_PhysicalInformation_t)
4306 M_UINT (Packet_PhysicalInformation_t, MessageType, 6),
4307 M_UINT (Packet_PhysicalInformation_t, PageMode, 2),
4308
4309 M_TYPE (Packet_PhysicalInformation_t, Global_TFI, Global_TFI_t),
4310
4311 M_UINT (Packet_PhysicalInformation_t, TimingAdvance, 8),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04004312 M_PADDING_BITS(Packet_PhysicalInformation_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004313CSN_DESCR_END (Packet_PhysicalInformation_t)
4314
4315/*< End Packet Physical Information > */
4316
4317
4318/*< ADDITIONAL MS RADIO ACCESS CAPABILITIES content > */
4319static const
4320CSN_ChoiceElement_t AdditionalMsRadAccessCapID[] =
4321{
Pau Espin Pedrol7cce8252020-01-24 16:41:14 +01004322 {1, 0, 0, M_TYPE(AdditionalMsRadAccessCapID_t, u.Global_TFI, Global_TFI_t)},
4323 {1, 0x01, 0, M_UINT(AdditionalMsRadAccessCapID_t, u.TLLI, 32)},
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004324};
4325
4326static const
4327CSN_DESCR_BEGIN(AdditionalMsRadAccessCapID_t)
4328 M_CHOICE (AdditionalMsRadAccessCapID_t, UnionType, AdditionalMsRadAccessCapID, ElementsOf(AdditionalMsRadAccessCapID)),
4329CSN_DESCR_END (AdditionalMsRadAccessCapID_t)
4330
4331
4332static const
4333CSN_DESCR_BEGIN (Additional_MS_Rad_Access_Cap_t)
4334 /* Mac header */
4335 M_UINT (Additional_MS_Rad_Access_Cap_t, PayloadType, 2),
4336 M_UINT (Additional_MS_Rad_Access_Cap_t, spare, 5),
4337 M_UINT (Additional_MS_Rad_Access_Cap_t, R, 1),
4338 M_UINT (Additional_MS_Rad_Access_Cap_t, MESSAGE_TYPE, 6),
4339 /* Mac header */
4340
4341 M_TYPE (Additional_MS_Rad_Access_Cap_t, ID, AdditionalMsRadAccessCapID_t),
4342 M_TYPE (Additional_MS_Rad_Access_Cap_t, MS_Radio_Access_capability, MS_Radio_Access_capability_t),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04004343 M_PADDING_BITS (Additional_MS_Rad_Access_Cap_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004344CSN_DESCR_END (Additional_MS_Rad_Access_Cap_t)
4345
4346
4347/*< End ADDITIONAL MS RADIO ACCESS CAPABILITIES > */
4348
4349
4350/*< Packet Pause content > */
4351
4352static const
4353CSN_DESCR_BEGIN (Packet_Pause_t)
4354 M_UINT (Packet_Pause_t, MESSAGE_TYPE, 2),
4355 M_UINT (Packet_Pause_t, TLLI, 32),
4356 M_BITMAP (Packet_Pause_t, RAI, 48),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04004357 M_PADDING_BITS (Packet_Pause_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004358CSN_DESCR_END (Packet_Pause_t)
4359
4360
4361/*< End Packet Pause > */
4362
4363
4364/*< Packet System Information Type 1 message content >*/
Pascal Quantin29248d62020-01-28 17:13:17 +01004365CSN_DESCR_BEGIN(PSI1_AdditionsR6_t)
4366 M_UINT (PSI1_AdditionsR6_t, LB_MS_TXPWR_MAX_CCH, 5),
4367CSN_DESCR_END (PSI1_AdditionsR6_t)
4368
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004369static const
Pascal Quantin29248d62020-01-28 17:13:17 +01004370CSN_DESCR_BEGIN (PSI1_AdditionsR99_t)
4371 M_UINT (PSI1_AdditionsR99_t, MSCR, 1),
4372 M_UINT (PSI1_AdditionsR99_t, SGSNR, 1),
4373 M_UINT (PSI1_AdditionsR99_t, BandIndicator, 1),
4374 M_NEXT_EXIST_OR_NULL (PSI1_AdditionsR99_t, Exist_AdditionsR6, 1),
4375 M_TYPE (PSI1_AdditionsR99_t, AdditionsR6, PSI1_AdditionsR6_t),
4376CSN_DESCR_END (PSI1_AdditionsR99_t)
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004377
4378static const
4379CSN_DESCR_BEGIN(PCCCH_Organization_t)
4380 M_UINT (PCCCH_Organization_t, BS_PCC_REL, 1),
4381 M_UINT (PCCCH_Organization_t, BS_PBCCH_BLKS, 2),
4382 M_UINT (PCCCH_Organization_t, BS_PAG_BLKS_RES, 4),
4383 M_UINT (PCCCH_Organization_t, BS_PRACH_BLKS, 4),
4384CSN_DESCR_END (PCCCH_Organization_t)
4385
4386
4387static const
4388CSN_DESCR_BEGIN(PSI1_t)
Pascal Quantin29248d62020-01-28 17:13:17 +01004389 M_UINT (PSI1_t, MESSAGE_TYPE, 6),
4390 M_UINT (PSI1_t, PAGE_MODE, 2),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004391
Pascal Quantin29248d62020-01-28 17:13:17 +01004392 M_UINT (PSI1_t, PBCCH_CHANGE_MARK, 3),
4393 M_UINT (PSI1_t, PSI_CHANGE_FIELD, 4),
4394 M_UINT (PSI1_t, PSI1_REPEAT_PERIOD, 4),
4395 M_UINT (PSI1_t, PSI_COUNT_LR, 6),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004396
Pascal Quantin29248d62020-01-28 17:13:17 +01004397 M_NEXT_EXIST (PSI1_t, Exist_PSI_COUNT_HR, 1),
4398 M_UINT (PSI1_t, PSI_COUNT_HR, 4),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004399
Pascal Quantin29248d62020-01-28 17:13:17 +01004400 M_UINT (PSI1_t, MEASUREMENT_ORDER, 1),
4401 M_TYPE (PSI1_t, GPRS_Cell_Options, GPRS_Cell_Options_t),
4402 M_TYPE (PSI1_t, PRACH_Control, PRACH_Control_t),
4403 M_TYPE (PSI1_t, PCCCH_Organization, PCCCH_Organization_t),
4404 M_TYPE (PSI1_t, Global_Power_Control_Parameters, Global_Power_Control_Parameters_t),
4405 M_UINT (PSI1_t, PSI_STATUS_IND, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004406
Pascal Quantin29248d62020-01-28 17:13:17 +01004407 M_NEXT_EXIST_OR_NULL (PSI1_t, Exist_AdditionsR99, 1),
4408 M_TYPE (PSI1_t, AdditionsR99, PSI1_AdditionsR99_t),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04004409
4410 M_PADDING_BITS(PSI1_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004411CSN_DESCR_END (PSI1_t)
4412/*< End Packet System Information Type 1 message content >*/
4413
4414
4415/*< Packet System Information Type 2 message content >*/
4416
4417static const
4418CSN_DESCR_BEGIN(LAI_t)
4419 M_TYPE (LAI_t, PLMN, PLMN_t),
4420 M_UINT (LAI_t, LAC, 16),
4421CSN_DESCR_END (LAI_t)
4422
4423static const
4424CSN_DESCR_BEGIN(Cell_Identification_t)
4425 M_TYPE (Cell_Identification_t, LAI, LAI_t),
4426 M_UINT (Cell_Identification_t, RAC, 8),
4427 M_UINT (Cell_Identification_t, Cell_Identity, 16),
4428CSN_DESCR_END (Cell_Identification_t)
4429
4430static const
4431CSN_DESCR_BEGIN(Non_GPRS_Cell_Options_t)
Anders Broman8ea3cbe2020-01-28 17:36:33 +01004432 M_UINT (Non_GPRS_Cell_Options_t, ATT, 1),
Pau Espin Pedrol034e32f2020-01-28 17:14:26 +01004433
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004434 M_NEXT_EXIST (Non_GPRS_Cell_Options_t, Exist_T3212, 1),
4435 M_UINT (Non_GPRS_Cell_Options_t, T3212, 8),
Pau Espin Pedrol034e32f2020-01-28 17:14:26 +01004436
Anders Broman8ea3cbe2020-01-28 17:36:33 +01004437 M_UINT (Non_GPRS_Cell_Options_t, NECI, 1),
4438 M_UINT (Non_GPRS_Cell_Options_t, PWRC, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004439 M_UINT (Non_GPRS_Cell_Options_t, DTX, 2),
4440 M_UINT (Non_GPRS_Cell_Options_t, RADIO_LINK_TIMEOUT, 4),
4441 M_UINT (Non_GPRS_Cell_Options_t, BS_AG_BLKS_RES, 3),
4442 M_UINT (Non_GPRS_Cell_Options_t, CCCH_CONF, 3),
4443 M_UINT (Non_GPRS_Cell_Options_t, BS_PA_MFRMS, 3),
4444 M_UINT (Non_GPRS_Cell_Options_t, MAX_RETRANS, 2),
4445 M_UINT (Non_GPRS_Cell_Options_t, TX_INTEGER, 4),
Anders Broman8ea3cbe2020-01-28 17:36:33 +01004446 M_UINT (Non_GPRS_Cell_Options_t, EC, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004447 M_UINT (Non_GPRS_Cell_Options_t, MS_TXPWR_MAX_CCCH, 5),
4448
4449 M_NEXT_EXIST (Non_GPRS_Cell_Options_t, Exist_Extension_Bits, 1),
4450 M_TYPE (Non_GPRS_Cell_Options_t, Extension_Bits, Extension_Bits_t),
4451CSN_DESCR_END (Non_GPRS_Cell_Options_t)
4452
4453static const
4454CSN_DESCR_BEGIN(Reference_Frequency_t)
4455 M_UINT(Reference_Frequency_t, NUMBER, 4),
4456 M_UINT_OFFSET(Reference_Frequency_t, Length, 4, 3),
4457 M_VAR_ARRAY (Reference_Frequency_t, Contents[0], Length, 0),
4458CSN_DESCR_END (Reference_Frequency_t)
4459
4460static const
4461CSN_DESCR_BEGIN(PSI2_MA_t)
4462 M_UINT(PSI2_MA_t, NUMBER, 4),
4463 M_TYPE(PSI2_MA_t, Mobile_Allocation, GPRS_Mobile_Allocation_t),
4464CSN_DESCR_END (PSI2_MA_t)
4465
4466static const
4467CSN_DESCR_BEGIN(Non_Hopping_PCCCH_Carriers_t)
4468 M_UINT(Non_Hopping_PCCCH_Carriers_t, ARFCN, 10),
4469 M_UINT(Non_Hopping_PCCCH_Carriers_t, TIMESLOT_ALLOCATION, 8),
4470CSN_DESCR_END (Non_Hopping_PCCCH_Carriers_t)
4471
4472static const
4473CSN_DESCR_BEGIN(NonHoppingPCCCH_t)
Pau Espin Pedrol81b40cb2020-03-23 15:23:51 +01004474 M_REC_TARRAY (NonHoppingPCCCH_t, Carriers, Non_Hopping_PCCCH_Carriers_t, Count_Carriers),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004475CSN_DESCR_END (NonHoppingPCCCH_t)
4476
4477static const
4478CSN_DESCR_BEGIN(Hopping_PCCCH_Carriers_t)
4479 M_UINT(Hopping_PCCCH_Carriers_t, MAIO, 6),
4480 M_UINT(Hopping_PCCCH_Carriers_t, TIMESLOT_ALLOCATION, 8),
4481CSN_DESCR_END (Hopping_PCCCH_Carriers_t)
4482
4483static const
4484CSN_DESCR_BEGIN(HoppingPCCCH_t)
4485 M_UINT(HoppingPCCCH_t, MA_NUMBER, 4),
Pau Espin Pedrol81b40cb2020-03-23 15:23:51 +01004486 M_REC_TARRAY (HoppingPCCCH_t, Carriers, Hopping_PCCCH_Carriers_t, Count_Carriers),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004487CSN_DESCR_END (HoppingPCCCH_t)
4488
4489static const
4490CSN_DESCR_BEGIN(PCCCH_Description_t)
4491 M_UINT(PCCCH_Description_t, TSC, 3),
4492 M_UNION (PCCCH_Description_t, 2),
4493 M_TYPE (PCCCH_Description_t, u.NonHopping, NonHoppingPCCCH_t),
4494 M_TYPE (PCCCH_Description_t, u.Hopping, HoppingPCCCH_t),
4495CSN_DESCR_END (PCCCH_Description_t)
4496
4497static const
4498CSN_DESCR_BEGIN(PSI2_t)
4499 M_UINT (PSI2_t, MESSAGE_TYPE, 6),
4500 M_UINT (PSI2_t, PAGE_MODE, 2),
4501
4502 M_UINT (PSI2_t, CHANGE_MARK, 2),
4503 M_UINT (PSI2_t, INDEX, 3),
4504 M_UINT (PSI2_t, COUNT, 3),
4505
4506 M_NEXT_EXIST (PSI2_t, Exist_Cell_Identification, 1),
4507 M_TYPE (PSI2_t, Cell_Identification, Cell_Identification_t),
4508
4509 M_NEXT_EXIST (PSI2_t, Exist_Non_GPRS_Cell_Options, 1),
4510 M_TYPE (PSI2_t, Non_GPRS_Cell_Options, Non_GPRS_Cell_Options_t),
4511
Pau Espin Pedrol81b40cb2020-03-23 15:23:51 +01004512 M_REC_TARRAY (PSI2_t, Reference_Frequency, Reference_Frequency_t, Count_Reference_Frequency),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004513 M_TYPE (PSI2_t, Cell_Allocation, Cell_Allocation_t),
Pau Espin Pedrol81b40cb2020-03-23 15:23:51 +01004514 M_REC_TARRAY (PSI2_t, GPRS_MA, PSI2_MA_t, Count_GPRS_MA),
4515 M_REC_TARRAY (PSI2_t, PCCCH_Description, PCCCH_Description_t, Count_PCCCH_Description),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04004516 M_PADDING_BITS(PSI2_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004517CSN_DESCR_END (PSI2_t)
4518/*< End Packet System Information Type 2 message content >*/
4519
4520
4521
4522/*< Packet System Information Type 3 message content >*/
4523static const
4524CSN_DESCR_BEGIN(Serving_Cell_params_t)
Anders Broman8ea3cbe2020-01-28 17:36:33 +01004525 M_UINT (Serving_Cell_params_t, CELL_BAR_ACCESS_2, 1),
4526 M_UINT (Serving_Cell_params_t, EXC_ACC, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004527 M_UINT (Serving_Cell_params_t, GPRS_RXLEV_ACCESS_MIN, 6),
4528 M_UINT (Serving_Cell_params_t, GPRS_MS_TXPWR_MAX_CCH, 5),
4529 M_NEXT_EXIST (Serving_Cell_params_t, Exist_HCS, 1),
4530 M_TYPE (Serving_Cell_params_t, HCS, HCS_t),
4531 M_UINT (Serving_Cell_params_t, MULTIBAND_REPORTING, 2),
4532CSN_DESCR_END (Serving_Cell_params_t)
4533
4534
4535static const
4536CSN_DESCR_BEGIN(Gen_Cell_Sel_t)
4537 M_UINT (Gen_Cell_Sel_t, GPRS_CELL_RESELECT_HYSTERESIS, 3),
Anders Broman8ea3cbe2020-01-28 17:36:33 +01004538 M_UINT (Gen_Cell_Sel_t, C31_HYST, 1),
4539 M_UINT (Gen_Cell_Sel_t, C32_QUAL, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004540 M_FIXED (Gen_Cell_Sel_t, 1, 0x01),
Pau Espin Pedrol034e32f2020-01-28 17:14:26 +01004541
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004542 M_NEXT_EXIST (Gen_Cell_Sel_t, Exist_T_RESEL, 1),
4543 M_UINT (Gen_Cell_Sel_t, T_RESEL, 3),
4544
4545 M_NEXT_EXIST (Gen_Cell_Sel_t, Exist_RA_RESELECT_HYSTERESIS, 1),
4546 M_UINT (Gen_Cell_Sel_t, RA_RESELECT_HYSTERESIS, 3),
4547CSN_DESCR_END (Gen_Cell_Sel_t)
4548
4549
4550static const
4551CSN_DESCR_BEGIN(COMPACT_Cell_Sel_t)
4552 M_UINT (COMPACT_Cell_Sel_t, bsic, 6),
Anders Broman8ea3cbe2020-01-28 17:36:33 +01004553 M_UINT (COMPACT_Cell_Sel_t, CELL_BAR_ACCESS_2, 1),
4554 M_UINT (COMPACT_Cell_Sel_t, EXC_ACC, 1),
4555 M_UINT (COMPACT_Cell_Sel_t, SAME_RA_AS_SERVING_CELL, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004556 M_NEXT_EXIST (COMPACT_Cell_Sel_t, Exist_GPRS_RXLEV_ACCESS_MIN, 2),
4557 M_UINT (COMPACT_Cell_Sel_t, GPRS_RXLEV_ACCESS_MIN, 6),
4558 M_UINT (COMPACT_Cell_Sel_t, GPRS_MS_TXPWR_MAX_CCH, 5),
4559 M_NEXT_EXIST (COMPACT_Cell_Sel_t, Exist_GPRS_TEMPORARY_OFFSET, 2),
4560 M_UINT (COMPACT_Cell_Sel_t, GPRS_TEMPORARY_OFFSET, 3),
4561 M_UINT (COMPACT_Cell_Sel_t, GPRS_PENALTY_TIME, 5),
4562 M_NEXT_EXIST (COMPACT_Cell_Sel_t, Exist_GPRS_RESELECT_OFFSET, 1),
4563 M_UINT (COMPACT_Cell_Sel_t, GPRS_RESELECT_OFFSET, 5),
4564 M_NEXT_EXIST (COMPACT_Cell_Sel_t, Exist_Hcs_Parm, 1),
4565 M_TYPE (COMPACT_Cell_Sel_t, HCS_Param, HCS_t),
4566 M_NEXT_EXIST (COMPACT_Cell_Sel_t, Exist_TIME_GROUP, 1),
4567 M_UINT (COMPACT_Cell_Sel_t, TIME_GROUP, 2),
4568 M_NEXT_EXIST (COMPACT_Cell_Sel_t, Exist_GUAR_CONSTANT_PWR_BLKS, 1),
4569 M_UINT (COMPACT_Cell_Sel_t, GUAR_CONSTANT_PWR_BLKS, 2),
4570CSN_DESCR_END (COMPACT_Cell_Sel_t)
4571
4572static const
4573CSN_DESCR_BEGIN(COMPACT_Neighbour_Cell_Param_Remaining_t)
4574 /* this FREQ_DIFF_LENGTH is not initialised, it should be the SAME as COMPACT_Neighbour_Cell_Param_t.FREQ_DIFF_LENGTH.
4575 * So it is buggy, but there is no way to handle it. Same issue is in Cell_Selection_Params_With_FreqDiff_t.FREQ_DIFF_LENGTH.
4576 */
4577 M_VAR_BITMAP (COMPACT_Neighbour_Cell_Param_Remaining_t, FREQUENCY_DIFF, FREQ_DIFF_LENGTH, 0),
4578 M_TYPE (COMPACT_Neighbour_Cell_Param_Remaining_t, COMPACT_Cell_Sel_Remain_Cells, COMPACT_Cell_Sel_t),
4579CSN_DESCR_END (COMPACT_Neighbour_Cell_Param_Remaining_t)
4580
4581
4582static const
4583CSN_DESCR_BEGIN(COMPACT_Neighbour_Cell_Param_t)
4584 M_UINT (COMPACT_Neighbour_Cell_Param_t, START_FREQUENCY, 10),
4585 M_TYPE (COMPACT_Neighbour_Cell_Param_t, COMPACT_Cell_Sel, COMPACT_Cell_Sel_t),
4586 M_UINT (COMPACT_Neighbour_Cell_Param_t, NR_OF_REMAINING_CELLS, 4),
4587 M_UINT_OFFSET(COMPACT_Neighbour_Cell_Param_t, FREQ_DIFF_LENGTH, 3, 1),
4588 M_VAR_TARRAY (COMPACT_Neighbour_Cell_Param_t, COMPACT_Neighbour_Cell_Param_Remaining, COMPACT_Neighbour_Cell_Param_Remaining_t, NR_OF_REMAINING_CELLS),
4589CSN_DESCR_END (COMPACT_Neighbour_Cell_Param_t)
4590
4591
4592static const
4593CSN_DESCR_BEGIN(COMPACT_Info_t)
4594 M_TYPE (COMPACT_Info_t, Cell_Identification, Cell_Identification_t),
4595 M_REC_TARRAY (COMPACT_Info_t, COMPACT_Neighbour_Cell_Param, COMPACT_Neighbour_Cell_Param_t, COMPACT_Neighbour_Cell_Param_Count),
4596CSN_DESCR_END (COMPACT_Info_t)
4597
4598
4599static const
4600CSN_DESCR_BEGIN(PSI3_AdditionR4_t)
4601 M_NEXT_EXIST (PSI3_AdditionR4_t, Exist_CCN_Support_Desc, 1),
4602 M_TYPE (PSI3_AdditionR4_t, CCN_Support_Desc, CCN_Support_Description_t),
4603CSN_DESCR_END (PSI3_AdditionR4_t)
4604
4605
4606static const
4607CSN_DESCR_BEGIN(PSI3_AdditionR99_t)
4608 M_FIXED (PSI3_AdditionR99_t, 2, 0x00),
4609 M_NEXT_EXIST (PSI3_AdditionR99_t, Exist_COMPACT_Info, 1),
4610 M_TYPE (PSI3_AdditionR99_t, COMPACT_Info, COMPACT_Info_t),
4611 M_FIXED (PSI3_AdditionR99_t, 1, 0x00),
4612 M_NEXT_EXIST (PSI3_AdditionR99_t, Exist_AdditionR4, 1),
4613 M_TYPE (PSI3_AdditionR99_t, AdditionR4, PSI3_AdditionR4_t),
4614CSN_DESCR_END (PSI3_AdditionR99_t)
4615
4616
4617static const
4618CSN_DESCR_BEGIN(PSI3_AdditionR98_t)
4619 M_TYPE (PSI3_AdditionR98_t, Scell_LSA_ID_Info, LSA_ID_Info_t),
4620
4621 M_NEXT_EXIST (PSI3_AdditionR98_t, Exist_LSA_Parameters, 1),
4622 M_TYPE (PSI3_AdditionR98_t, LSA_Parameters, LSA_Parameters_t),
4623
4624 M_NEXT_EXIST (PSI3_AdditionR98_t, Exist_AdditionR99, 1),
4625 M_TYPE (PSI3_AdditionR98_t, AdditionR99, PSI3_AdditionR99_t),
4626CSN_DESCR_END (PSI3_AdditionR98_t)
4627
4628
4629static const
4630CSN_DESCR_BEGIN(PSI3_t)
4631 M_UINT (PSI3_t, MESSAGE_TYPE, 6),
4632 M_UINT (PSI3_t, PAGE_MODE, 2),
4633 M_UINT (PSI3_t, CHANGE_MARK, 2),
4634 M_UINT (PSI3_t, BIS_COUNT, 4),
4635 M_TYPE (PSI3_t, Serving_Cell_params, Serving_Cell_params_t),
4636 M_TYPE (PSI3_t, General_Cell_Selection, Gen_Cell_Sel_t),
4637 M_TYPE (PSI3_t, NeighbourCellList, NeighbourCellList_t),
Pau Espin Pedrol034e32f2020-01-28 17:14:26 +01004638
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004639 M_NEXT_EXIST (PSI3_t, Exist_AdditionR98, 1),
4640 M_TYPE (PSI3_t, AdditionR98, PSI3_AdditionR98_t),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04004641
4642 M_PADDING_BITS(PSI3_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004643CSN_DESCR_END (PSI3_t)
4644/*< End Packet System Information Type 3 message content >*/
4645
4646
4647/*< Packet System Information Type 5 message content >*/
4648static const
4649CSN_DESCR_BEGIN(MeasurementParams_t)
4650 M_NEXT_EXIST (MeasurementParams_t, Exist_MULTI_BAND_REPORTING, 1),
4651 M_UINT (MeasurementParams_t, MULTI_BAND_REPORTING, 2),
4652
4653 M_NEXT_EXIST (MeasurementParams_t, Exist_SERVING_BAND_REPORTING, 1),
4654 M_UINT (MeasurementParams_t, SERVING_BAND_REPORTING, 2),
4655
4656 M_NEXT_EXIST (MeasurementParams_t, Exist_SCALE_ORD, 1),
4657 M_UINT (MeasurementParams_t, SCALE_ORD, 2),
4658
4659 M_NEXT_EXIST (MeasurementParams_t, Exist_OffsetThreshold900, 1),
4660 M_TYPE (MeasurementParams_t, OffsetThreshold900, OffsetThreshold_t),
4661
4662 M_NEXT_EXIST (MeasurementParams_t, Exist_OffsetThreshold1800, 1),
4663 M_TYPE (MeasurementParams_t, OffsetThreshold1800, OffsetThreshold_t),
4664
4665 M_NEXT_EXIST (MeasurementParams_t, Exist_OffsetThreshold400, 1),
4666 M_TYPE (MeasurementParams_t, OffsetThreshold400, OffsetThreshold_t),
4667
4668 M_NEXT_EXIST (MeasurementParams_t, Exist_OffsetThreshold1900, 1),
4669 M_TYPE (MeasurementParams_t, OffsetThreshold1900, OffsetThreshold_t),
4670
4671 M_NEXT_EXIST (MeasurementParams_t, Exist_OffsetThreshold850, 1),
4672 M_TYPE (MeasurementParams_t, OffsetThreshold850, OffsetThreshold_t),
4673CSN_DESCR_END (MeasurementParams_t)
4674
4675static const
4676CSN_DESCR_BEGIN(GPRSMeasurementParams3G_PSI5_t)
4677 M_NEXT_EXIST (GPRSMeasurementParams3G_PSI5_t, existRepParamsFDD, 2),
4678 M_UINT (GPRSMeasurementParams3G_PSI5_t, RepQuantFDD, 1),
4679 M_UINT (GPRSMeasurementParams3G_PSI5_t, MultiratReportingFDD, 2),
Pau Espin Pedrol034e32f2020-01-28 17:14:26 +01004680
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004681 M_NEXT_EXIST (GPRSMeasurementParams3G_PSI5_t, existReportingParamsFDD, 2),
4682 M_UINT (GPRSMeasurementParams3G_PSI5_t, ReportingOffsetFDD, 3),
4683 M_UINT (GPRSMeasurementParams3G_PSI5_t, ReportingThresholdFDD, 3),
Pau Espin Pedrol034e32f2020-01-28 17:14:26 +01004684
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004685 M_NEXT_EXIST (GPRSMeasurementParams3G_PSI5_t, existMultiratReportingTDD, 1),
4686 M_UINT (GPRSMeasurementParams3G_PSI5_t, MultiratReportingTDD, 2),
Pau Espin Pedrol034e32f2020-01-28 17:14:26 +01004687
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004688 M_NEXT_EXIST (GPRSMeasurementParams3G_PSI5_t, existOffsetThresholdTDD, 2),
4689 M_UINT (GPRSMeasurementParams3G_PSI5_t, ReportingOffsetTDD, 3),
4690 M_UINT (GPRSMeasurementParams3G_PSI5_t, ReportingThresholdTDD, 3),
4691CSN_DESCR_END (GPRSMeasurementParams3G_PSI5_t)
4692
4693static const
4694CSN_DESCR_BEGIN(ENH_Reporting_Parameters_t)
4695 M_UINT (ENH_Reporting_Parameters_t, REPORT_TYPE, 1),
4696 M_UINT (ENH_Reporting_Parameters_t, REPORTING_RATE, 1),
4697 M_UINT (ENH_Reporting_Parameters_t, INVALID_BSIC_REPORTING, 1),
4698
4699 M_NEXT_EXIST (ENH_Reporting_Parameters_t, Exist_NCC_PERMITTED, 1),
4700 M_UINT (ENH_Reporting_Parameters_t, NCC_PERMITTED, 8),
Pau Espin Pedrol034e32f2020-01-28 17:14:26 +01004701
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004702 M_NEXT_EXIST (ENH_Reporting_Parameters_t, Exist_GPRSMeasurementParams, 1),
4703 M_TYPE (ENH_Reporting_Parameters_t, GPRSMeasurementParams, MeasurementParams_t),
Pau Espin Pedrol034e32f2020-01-28 17:14:26 +01004704
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004705 M_NEXT_EXIST (ENH_Reporting_Parameters_t, Exist_GPRSMeasurementParams3G, 1),
4706 M_TYPE (ENH_Reporting_Parameters_t, GPRSMeasurementParams3G, GPRSMeasurementParams3G_PSI5_t),
4707CSN_DESCR_END (ENH_Reporting_Parameters_t)
4708
4709static const
4710CSN_DESCR_BEGIN(PSI5_AdditionsR7)
4711 M_NEXT_EXIST (PSI5_AdditionsR7, Exist_OffsetThreshold_700, 1),
4712 M_TYPE (PSI5_AdditionsR7, OffsetThreshold_700, OffsetThreshold_t),
4713
4714 M_NEXT_EXIST (PSI5_AdditionsR7, Exist_OffsetThreshold_810, 1),
4715 M_TYPE (PSI5_AdditionsR7, OffsetThreshold_810, OffsetThreshold_t),
4716CSN_DESCR_END (PSI5_AdditionsR7)
4717
4718static const
4719CSN_DESCR_BEGIN(PSI5_AdditionsR5)
4720 M_NEXT_EXIST (PSI5_AdditionsR5, Exist_GPRS_AdditionalMeasurementParams3G, 1),
4721 M_TYPE (PSI5_AdditionsR5, GPRS_AdditionalMeasurementParams3G, GPRS_AdditionalMeasurementParams3G_t),
Pau Espin Pedrol034e32f2020-01-28 17:14:26 +01004722
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004723 M_NEXT_EXIST (PSI5_AdditionsR5, Exist_AdditionsR7, 1),
4724 M_TYPE (PSI5_AdditionsR5, AdditionsR7, PSI5_AdditionsR7),
4725CSN_DESCR_END (PSI5_AdditionsR5)
4726
4727static const
4728CSN_DESCR_BEGIN(PSI5_AdditionsR99)
4729 M_NEXT_EXIST (PSI5_AdditionsR99, Exist_ENH_Reporting_Param, 1),
4730 M_TYPE (PSI5_AdditionsR99, ENH_Reporting_Param, ENH_Reporting_Parameters_t),
4731
4732 M_NEXT_EXIST (PSI5_AdditionsR99, Exist_AdditionsR5, 1),
4733 M_TYPE (PSI5_AdditionsR99, AdditionisR5, PSI5_AdditionsR5),
4734CSN_DESCR_END (PSI5_AdditionsR99)
4735
4736static const
4737CSN_DESCR_BEGIN(PSI5_t)
4738 M_UINT (PSI5_t, MESSAGE_TYPE, 6),
4739 M_UINT (PSI5_t, PAGE_MODE, 2),
4740 M_UINT (PSI5_t, CHANGE_MARK, 2),
4741 M_UINT (PSI5_t, INDEX, 3),
4742 M_UINT (PSI5_t, COUNT, 3),
4743
4744 M_NEXT_EXIST (PSI5_t, Eixst_NC_Meas_Param, 1),
4745 M_TYPE (PSI5_t, NC_Meas_Param, NC_Measurement_Parameters_t),
4746
4747 M_FIXED (PSI5_t, 1, 0x00),
4748
4749 M_NEXT_EXIST (PSI5_t, Exist_AdditionsR99, 1),
4750 M_TYPE (PSI5_t, AdditionsR99, PSI5_AdditionsR99),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04004751
4752 M_PADDING_BITS(PSI5_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004753CSN_DESCR_END (PSI5_t)
4754/*< End Packet System Information Type 5 message content >*/
4755
4756
4757/*< Packet System Information Type 13 message content >*/
4758static const
4759CSN_DESCR_BEGIN(PSI13_AdditionsR6)
4760 M_NEXT_EXIST (PSI13_AdditionsR6, Exist_LB_MS_TXPWR_MAX_CCH, 1),
4761 M_UINT (PSI13_AdditionsR6, LB_MS_TXPWR_MAX_CCH, 5),
4762 M_UINT (PSI13_AdditionsR6, SI2n_SUPPORT, 2),
4763CSN_DESCR_END (PSI13_AdditionsR6)
4764
4765static const
4766CSN_DESCR_BEGIN(PSI13_AdditionsR4)
4767 M_UINT (PSI13_AdditionsR4, SI_STATUS_IND, 1),
4768 M_NEXT_EXIST (PSI13_AdditionsR4, Exist_AdditionsR6, 1),
4769 M_TYPE (PSI13_AdditionsR4, AdditionsR6, PSI13_AdditionsR6),
4770CSN_DESCR_END (PSI13_AdditionsR4)
4771
4772static const
4773CSN_DESCR_BEGIN(PSI13_AdditionR99)
4774 M_UINT (PSI13_AdditionR99, SGSNR, 1),
4775 M_NEXT_EXIST (PSI13_AdditionR99, Exist_AdditionsR4, 1),
4776 M_TYPE (PSI13_AdditionR99, AdditionsR4, PSI13_AdditionsR4),
4777CSN_DESCR_END (PSI13_AdditionR99)
4778
4779static const
4780CSN_DESCR_BEGIN(PSI13_t)
4781 M_UINT (PSI13_t, MESSAGE_TYPE, 6),
4782 M_UINT (PSI13_t, PAGE_MODE, 2),
4783 M_UINT (PSI13_t, BCCH_CHANGE_MARK, 3),
4784 M_UINT (PSI13_t, SI_CHANGE_FIELD, 4),
Pau Espin Pedrol034e32f2020-01-28 17:14:26 +01004785
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004786 M_NEXT_EXIST (PSI13_t, Exist_MA, 2),
4787 M_UINT (PSI13_t, SI13_CHANGE_MARK, 2),
4788 M_TYPE (PSI13_t, GPRS_Mobile_Allocation, GPRS_Mobile_Allocation_t),
4789
4790 M_UNION (PSI13_t, 2),
4791 M_TYPE (PSI13_t, u.PBCCH_Not_present, PBCCH_Not_present_t),
4792 M_TYPE (PSI13_t, u.PBCCH_present, PBCCH_present_t),
4793
4794 M_NEXT_EXIST (PSI13_t, Exist_AdditionsR99, 1),
4795 M_TYPE (PSI13_t, AdditionsR99, PSI13_AdditionR99),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04004796
4797 M_PADDING_BITS(PSI13_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004798CSN_DESCR_END (PSI13_t)
4799/*< End Packet System Information Type 13 message content >*/
4800
4801
4802
4803//typedef char* MT_Strings_t;
4804
4805static const char* szMT_Downlink[] = {
4806 "Invalid Message Type", /* 0x00 */
4807 "PACKET_CELL_CHANGE_ORDER", /* 0x01 */
4808 "PACKET_DOWNLINK_ASSIGNMENT", /* 0x02 */
4809 "PACKET_MEASUREMENT_ORDER", /* 0x03 */
4810 "PACKET_POLLING_REQUEST", /* 0x04 */
4811 "PACKET_POWER_CONTROL_TIMING_ADVANCE", /* 0x05 */
4812 "PACKET_QUEUEING_NOTIFICATION", /* 0x06 */
4813 "PACKET_TIMESLOT_RECONFIGURE", /* 0x07 */
4814 "PACKET_TBF_RELEASE", /* 0x08 */
4815 "PACKET_UPLINK_ACK_NACK", /* 0x09 */
4816 "PACKET_UPLINK_ASSIGNMENT", /* 0x0A */
4817 "PACKET_CELL_CHANGE_CONTINUE", /* 0x0B */
4818 "PACKET_NEIGHBOUR_CELL_DATA", /* 0x0C */
4819 "PACKET_SERVING_CELL_DATA", /* 0x0D */
4820 "Invalid Message Type", /* 0x0E */
4821 "Invalid Message Type", /* 0x0F */
4822 "Invalid Message Type", /* 0x10 */
4823 "Invalid Message Type", /* 0x11 */
4824 "Invalid Message Type", /* 0x12 */
4825 "Invalid Message Type", /* 0x13 */
4826 "Invalid Message Type", /* 0x14 */
4827 "PACKET_HANDOVER_COMMAND", /* 0x15 */
4828 "PACKET_PHYSICAL_INFORMATION", /* 0x16 */
4829 "Invalid Message Type", /* 0x17 */
4830 "Invalid Message Type", /* 0x18 */
4831 "Invalid Message Type", /* 0x19 */
4832 "Invalid Message Type", /* 0x1A */
4833 "Invalid Message Type", /* 0x1B */
4834 "Invalid Message Type", /* 0x1C */
4835 "Invalid Message Type", /* 0x1D */
4836 "Invalid Message Type", /* 0x1E */
4837 "Invalid Message Type", /* 0x1F */
4838 "Invalid Message Type", /* 0x20 */
4839 "PACKET_ACCESS_REJECT", /* 0x21 */
4840 "PACKET_PAGING_REQUEST", /* 0x22 */
4841 "PACKET_PDCH_RELEASE", /* 0x23 */
4842 "PACKET_PRACH_PARAMETERS", /* 0x24 */
4843 "PACKET_DOWNLINK_DUMMY_CONTROL_BLOCK", /* 0x25 */
4844 "Invalid Message Type", /* 0x26 */
4845 "Invalid Message Type", /* 0x27 */
4846 "Invalid Message Type", /* 0x28 */
4847 "Invalid Message Type", /* 0x29 */
4848 "Invalid Message Type", /* 0x2A */
4849 "Invalid Message Type", /* 0x2B */
4850 "Invalid Message Type", /* 0x2C */
4851 "Invalid Message Type", /* 0x2D */
4852 "Invalid Message Type", /* 0x2E */
4853 "Invalid Message Type", /* 0x2F */
4854 "PACKET_SYSTEM_INFO_6", /* 0x30 */
4855 "PACKET_SYSTEM_INFO_1", /* 0x31 */
4856 "PACKET_SYSTEM_INFO_2", /* 0x32 */
4857 "PACKET_SYSTEM_INFO_3", /* 0x33 */
4858 "PACKET_SYSTEM_INFO_3_BIS", /* 0x34 */
4859 "PACKET_SYSTEM_INFO_4", /* 0x35 */
4860 "PACKET_SYSTEM_INFO_5", /* 0x36 */
4861 "PACKET_SYSTEM_INFO_13", /* 0x37 */
4862 "PACKET_SYSTEM_INFO_7", /* 0x38 */
4863 "PACKET_SYSTEM_INFO_8", /* 0x39 */
4864 "PACKET_SYSTEM_INFO_14", /* 0x3A */
4865 "Invalid Message Type", /* 0x3B */
4866 "PACKET_SYSTEM_INFO_3_TER", /* 0x3C */
4867 "PACKET_SYSTEM_INFO_3_QUATER", /* 0x3D */
4868 "PACKET_SYSTEM_INFO_15" /* 0x3E */
4869};
4870
4871static const char* szMT_Uplink[] = {
4872 "PACKET_CELL_CHANGE_FAILURE", /* 0x00 */
4873 "PACKET_CONTROL_ACKNOWLEDGEMENT", /* 0x01 */
4874 "PACKET_DOWNLINK_ACK_NACK", /* 0x02 */
4875 "PACKET_UPLINK_DUMMY_CONTROL_BLOCK", /* 0x03 */
4876 "PACKET_MEASUREMENT_REPORT", /* 0x04 */
4877 "PACKET_RESOURCE_REQUEST", /* 0x05 */
4878 "PACKET_MOBILE_TBF_STATUS", /* 0x06 */
4879 "PACKET_PSI_STATUS", /* 0x07 */
4880 "EGPRS_PACKET_DOWNLINK_ACK_NACK", /* 0x08 */
4881 "PACKET_PAUSE", /* 0x09 */
4882 "PACKET_ENHANCED_MEASUREMENT_REPORT", /* 0x0A */
4883 "ADDITIONAL_MS_RAC", /* 0x0B */
4884 "PACKET_CELL_CHANGE_NOTIFICATION", /* 0x0C */
4885 "PACKET_SI_STATUS", /* 0x0D */
4886};
4887
4888const char*
4889MT_DL_TextGet(guint8 mt)
4890{
4891 if (mt < ElementsOf(szMT_Downlink))
4892 {
4893 return(szMT_Downlink[mt]);
4894 }
4895 else
4896 {
4897 return("Unknown message type");
4898 }
4899}
4900
4901const char*
4902MT_UL_TextGet(guint8 mt)
4903{
4904 if (mt < ElementsOf(szMT_Uplink))
4905 {
4906 return(szMT_Uplink[mt]);
4907 }
4908 else
4909 {
4910 return("Unknown message type");
4911 }
4912}
4913
4914
4915/* SI1_RestOctet_t */
4916
4917static const
4918CSN_DESCR_BEGIN (SI1_RestOctet_t)
4919 M_NEXT_EXIST_LH(SI1_RestOctet_t, Exist_NCH_Position, 1),
4920 M_UINT (SI1_RestOctet_t, NCH_Position, 5),
4921
4922 M_UINT_LH (SI1_RestOctet_t, BandIndicator, 1),
4923CSN_DESCR_END (SI1_RestOctet_t)
4924
4925/* SI3_Rest_Octet_t */
4926static const
4927CSN_DESCR_BEGIN(Selection_Parameters_t)
4928 M_UINT (Selection_Parameters_t, CBQ, 1),
4929 M_UINT (Selection_Parameters_t, CELL_RESELECT_OFFSET, 6),
4930 M_UINT (Selection_Parameters_t, TEMPORARY_OFFSET, 3),
4931 M_UINT (Selection_Parameters_t, PENALTY_TIME, 5),
4932CSN_DESCR_END (Selection_Parameters_t)
4933
4934static const
4935CSN_DESCR_BEGIN (SI3_Rest_Octet_t)
4936 M_NEXT_EXIST_LH(SI3_Rest_Octet_t, Exist_Selection_Parameters, 1),
4937 M_TYPE (SI3_Rest_Octet_t, Selection_Parameters, Selection_Parameters_t),
4938
4939 M_NEXT_EXIST_LH(SI3_Rest_Octet_t, Exist_Power_Offset, 1),
4940 M_UINT (SI3_Rest_Octet_t, Power_Offset, 2),
4941
4942 M_UINT_LH (SI3_Rest_Octet_t, System_Information_2ter_Indicator, 1),
4943 M_UINT_LH (SI3_Rest_Octet_t, Early_Classmark_Sending_Control, 1),
4944
4945 M_NEXT_EXIST_LH(SI3_Rest_Octet_t, Exist_WHERE, 1),
4946 M_UINT (SI3_Rest_Octet_t, WHERE, 3),
4947
4948 M_NEXT_EXIST_LH(SI3_Rest_Octet_t, Exist_GPRS_Indicator, 2),
4949 M_UINT (SI3_Rest_Octet_t, RA_COLOUR, 3),
4950 M_UINT (SI3_Rest_Octet_t, SI13_POSITION, 1),
4951
4952 M_UINT_LH (SI3_Rest_Octet_t, ECS_Restriction3G, 1),
4953
4954 M_NEXT_EXIST_LH(SI3_Rest_Octet_t, ExistSI2quaterIndicator, 1),
4955 M_UINT (SI3_Rest_Octet_t, SI2quaterIndicator, 1),
4956CSN_DESCR_END (SI3_Rest_Octet_t)
4957
4958static const
4959CSN_DESCR_BEGIN (SI4_Rest_Octet_t)
4960 M_NEXT_EXIST_LH(SI4_Rest_Octet_t, Exist_Selection_Parameters, 1),
4961 M_TYPE (SI4_Rest_Octet_t, Selection_Parameters, Selection_Parameters_t),
4962
4963 M_NEXT_EXIST_LH(SI4_Rest_Octet_t, Exist_Power_Offset, 1),
4964 M_UINT (SI4_Rest_Octet_t, Power_Offset, 2),
4965
4966 M_NEXT_EXIST_LH(SI4_Rest_Octet_t, Exist_GPRS_Indicator, 2),
4967 M_UINT (SI4_Rest_Octet_t, RA_COLOUR, 3),
4968 M_UINT (SI4_Rest_Octet_t, SI13_POSITION, 1),
4969CSN_DESCR_END (SI4_Rest_Octet_t)
4970
4971/* SI6_RestOctet_t */
4972
4973static const
4974CSN_DESCR_BEGIN(PCH_and_NCH_Info_t)
4975 M_UINT (PCH_and_NCH_Info_t, PagingChannelRestructuring, 1),
4976 M_UINT (PCH_and_NCH_Info_t, NLN_SACCH, 2),
4977
4978 M_NEXT_EXIST (PCH_and_NCH_Info_t, Exist_CallPriority, 1),
4979 M_UINT (PCH_and_NCH_Info_t, CallPriority, 3),
4980
4981 M_UINT (PCH_and_NCH_Info_t, NLN_Status, 1),
4982CSN_DESCR_END (PCH_and_NCH_Info_t)
4983
4984static const
4985CSN_DESCR_BEGIN (SI6_RestOctet_t)
4986 M_NEXT_EXIST_LH(SI6_RestOctet_t, Exist_PCH_and_NCH_Info, 1),
4987 M_TYPE (SI6_RestOctet_t, PCH_and_NCH_Info, PCH_and_NCH_Info_t),
4988
4989 M_NEXT_EXIST_LH(SI6_RestOctet_t, Exist_VBS_VGCS_Options, 1),
4990 M_UINT (SI6_RestOctet_t, VBS_VGCS_Options, 2),
4991
4992 M_NEXT_EXIST_LH(SI6_RestOctet_t, Exist_DTM_Support, 2),
4993 M_UINT (SI6_RestOctet_t, RAC, 8),
4994 M_UINT (SI6_RestOctet_t, MAX_LAPDm, 3),
4995
4996 M_UINT_LH (SI6_RestOctet_t, BandIndicator, 1),
4997CSN_DESCR_END (SI6_RestOctet_t)
4998
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01004999/* Returns 0 on success, negative on error. */
5000int decode_gsm_rlcmac_uplink(bitvec * vector, RlcMacUplink_t * data)
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005001{
5002 csnStream_t ar;
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01005003 int ret;
Ivan Kluchnikov9b06ff02012-06-15 10:13:30 +04005004 unsigned readIndex = 0;
Alexander Couzensccde5c92017-02-04 03:10:08 +01005005 guint8 payload_type = bitvec_read_field(vector, &readIndex, 2);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005006
5007 if (payload_type == PAYLOAD_TYPE_DATA)
5008 {
Pau Espin Pedrolea9de4a2020-02-03 18:57:21 +01005009 LOGP(DRLCMACDATA, LOGL_NOTICE, "Payload Type: DATA (0), not implemented\n");
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01005010 return CSN_ERROR_GENERAL;
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005011 }
5012 else if (payload_type == PAYLOAD_TYPE_RESERVED)
5013 {
Pau Espin Pedrolea9de4a2020-02-03 18:57:21 +01005014 LOGP(DRLCMACDATA, LOGL_NOTICE, "Payload Type: RESERVED (3)\n");
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01005015 return CSN_ERROR_GENERAL;
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005016 }
Pau Espin Pedrolac2b8662020-02-03 18:58:24 +01005017
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04005018 data->NrOfBits = 23 * 8;
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005019 csnStreamInit(&ar, 0, data->NrOfBits);
5020 readIndex += 6;
Alexander Couzensccde5c92017-02-04 03:10:08 +01005021 data->u.MESSAGE_TYPE = bitvec_read_field(vector, &readIndex, 6);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005022 readIndex = 0;
Pau Espin Pedrolac2b8662020-02-03 18:58:24 +01005023
5024 /* recursive csnStreamDecoder call uses LOGPC everywhere, so we need to start the log somewhere... */
5025 LOGP(DCSN1, LOGL_INFO, "csnStreamDecoder (type=%d): ", data->u.MESSAGE_TYPE);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005026 switch (data->u.MESSAGE_TYPE)
5027 {
5028 case MT_PACKET_CELL_CHANGE_FAILURE:
5029 {
5030 /*
5031 * data is the pointer to the unpack struct that hold the unpack value
5032 * CSNDESCR is an array that holds the different element types
5033 * ar is the csn context holding the bitcount, offset and output
5034 */
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005035 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_Cell_Change_Failure_t), vector, &readIndex, &data->u.Packet_Cell_Change_Failure);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005036 break;
5037 }
5038 case MT_PACKET_CONTROL_ACK:
5039 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005040 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_Control_Acknowledgement_t), vector, &readIndex, &data->u.Packet_Control_Acknowledgement);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005041 break;
5042 }
5043 case MT_PACKET_DOWNLINK_ACK_NACK:
5044 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005045 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_Downlink_Ack_Nack_t), vector, &readIndex, &data->u.Packet_Downlink_Ack_Nack);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005046 break;
5047 }
5048 case MT_PACKET_UPLINK_DUMMY_CONTROL_BLOCK:
5049 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005050 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_Uplink_Dummy_Control_Block_t), vector, &readIndex, &data->u.Packet_Uplink_Dummy_Control_Block);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005051 break;
5052 }
5053 case MT_PACKET_MEASUREMENT_REPORT:
5054 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005055 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_Measurement_Report_t), vector, &readIndex, &data->u.Packet_Measurement_Report);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005056 break;
5057 }
5058 case MT_PACKET_RESOURCE_REQUEST:
5059 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005060 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_Resource_Request_t), vector, &readIndex, &data->u.Packet_Resource_Request);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005061 break;
5062 }
5063
5064 case MT_PACKET_MOBILE_TBF_STATUS:
5065 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005066 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_Mobile_TBF_Status_t), vector, &readIndex, &data->u.Packet_Mobile_TBF_Status);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005067 break;
5068 }
5069 case MT_PACKET_PSI_STATUS:
5070 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005071 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_PSI_Status_t), vector, &readIndex, &data->u.Packet_PSI_Status);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005072 break;
5073 }
5074 case MT_EGPRS_PACKET_DOWNLINK_ACK_NACK:
5075 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005076 ret = csnStreamDecoder(&ar, CSNDESCR(EGPRS_PD_AckNack_t), vector, &readIndex, &data->u.Egprs_Packet_Downlink_Ack_Nack);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005077 break;
5078 }
5079 case MT_PACKET_PAUSE:
5080 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005081 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_Pause_t), vector, &readIndex, &data->u.Packet_Pause);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005082 break;
5083 }
5084 case MT_PACKET_ENHANCED_MEASUREMENT_REPORT:
5085 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005086 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_Enh_Measurement_Report_t), vector, &readIndex, &data->u.Packet_Enh_Measurement_Report);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005087 break;
5088 }
5089 case MT_ADDITIONAL_MS_RAC:
5090 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005091 ret = csnStreamDecoder(&ar, CSNDESCR(Additional_MS_Rad_Access_Cap_t), vector, &readIndex, &data->u.Additional_MS_Rad_Access_Cap);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005092 break;
5093 }
5094 case MT_PACKET_CELL_CHANGE_NOTIFICATION:
5095 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005096 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_Cell_Change_Notification_t), vector, &readIndex, &data->u.Packet_Cell_Change_Notification);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005097 break;
5098 }
5099 case MT_PACKET_SI_STATUS:
5100 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005101 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_SI_Status_t), vector, &readIndex, &data->u.Packet_SI_Status);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005102 break;
5103 }
5104 default:
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01005105 ret = -1;
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005106 break;
5107 }
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01005108
Pau Espin Pedrolac2b8662020-02-03 18:58:24 +01005109 /* recursive csnStreamDecoder call uses LOGPC everywhere without trailing
5110 newline, so as a caller we are responisble for submitting it */
5111 LOGPC(DCSN1, LOGL_INFO, "\n");
5112
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01005113 if (ret > 0) {
5114 LOGP(DRLCMACDATA, LOGL_NOTICE, "Got %d remaining bits unhandled by decoder at the end of bitvec\n", ret);
5115 ret = 0;
5116 }
5117
5118 return ret;
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005119}
5120
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01005121/* Returns 0 on success, negative on error. */
5122int decode_gsm_rlcmac_downlink(bitvec * vector, RlcMacDownlink_t * data)
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005123{
5124 csnStream_t ar;
5125 /* See RLC/MAC downlink control block structure in TS 44.060 / 10.3.1 */
5126 gint bit_offset = 0;
5127 gint bit_length;
Ivan Kluchnikov9b06ff02012-06-15 10:13:30 +04005128 unsigned readIndex = 0;
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01005129 int ret;
5130
Alexander Couzensccde5c92017-02-04 03:10:08 +01005131 data->PAYLOAD_TYPE = bitvec_read_field(vector, &readIndex, 2);
5132 data->RRBP = bitvec_read_field(vector, &readIndex, 2);
5133 data->SP = bitvec_read_field(vector, &readIndex, 1);
5134 data->USF = bitvec_read_field(vector, &readIndex, 3);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005135
5136 if (data->PAYLOAD_TYPE == PAYLOAD_TYPE_DATA)
5137 {
Pau Espin Pedrolea9de4a2020-02-03 18:57:21 +01005138 LOGP(DRLCMACDATA, LOGL_NOTICE, "Payload Type: DATA (0), not implemented\n");
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01005139 return CSN_ERROR_GENERAL;
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005140 }
5141 else if (data->PAYLOAD_TYPE == PAYLOAD_TYPE_RESERVED)
5142 {
Pau Espin Pedrolea9de4a2020-02-03 18:57:21 +01005143 LOGP(DRLCMACDATA, LOGL_NOTICE, "Payload Type: RESERVED (3)\n");
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01005144 return CSN_ERROR_GENERAL;
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005145 }
5146 /* We can decode the message */
5147 else
5148 {
5149 /* First print the message type and create a tree item */
5150 bit_offset = 8;
5151 if (data->PAYLOAD_TYPE == PAYLOAD_TYPE_CTRL_OPT_OCTET)
5152 {
Alexander Couzensccde5c92017-02-04 03:10:08 +01005153 data->RBSN = bitvec_read_field(vector, &readIndex, 1);
5154 data->RTI = bitvec_read_field(vector, &readIndex, 5);
5155 data->FS = bitvec_read_field(vector, &readIndex, 1);
5156 data->AC = bitvec_read_field(vector, &readIndex, 1);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005157 bit_offset += 8;
5158 if (data->AC == 1)
5159 {
Alexander Couzensccde5c92017-02-04 03:10:08 +01005160 data->PR = bitvec_read_field(vector, &readIndex, 2);
5161 data->TFI = bitvec_read_field(vector, &readIndex, 5);
5162 data->D = bitvec_read_field(vector, &readIndex, 1);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005163 bit_offset += 8;
5164 }
5165 if ((data->RBSN == 1) && (data->FS == 0))
5166 {
Alexander Couzensccde5c92017-02-04 03:10:08 +01005167 data->RBSNe = bitvec_read_field(vector, &readIndex, 3);
5168 data->FSe = bitvec_read_field(vector, &readIndex, 1);
5169 data->spare = bitvec_read_field(vector, &readIndex, 4);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005170 bit_offset += 8;
5171 }
5172 }
Alexander Couzensccde5c92017-02-04 03:10:08 +01005173 data->u.MESSAGE_TYPE = bitvec_read_field(vector, &readIndex, 6);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005174 }
5175
5176 /* Initialize the contexts */
5177 bit_length = 23*8 - bit_offset;
5178 data->NrOfBits = bit_length;
5179 readIndex = bit_offset;
5180
5181 csnStreamInit(&ar, bit_offset, bit_length);
5182
Pau Espin Pedrolac2b8662020-02-03 18:58:24 +01005183 /* recursive csnStreamDecoder call uses LOGPC everywhere, so we need to start the log somewhere... */
5184 LOGP(DCSN1, LOGL_INFO, "csnStreamDecoder (type=%d): ", data->u.MESSAGE_TYPE);
5185
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005186 switch (data->u.MESSAGE_TYPE)
5187 {
5188 case MT_PACKET_ACCESS_REJECT:
5189 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005190 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_Access_Reject_t), vector, &readIndex, &data->u.Packet_Access_Reject);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005191 break;
5192 }
5193 case MT_PACKET_CELL_CHANGE_ORDER:
5194 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005195 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_Cell_Change_Order_t), vector, &readIndex, &data->u.Packet_Cell_Change_Order);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005196 break;
5197 }
5198 case MT_PACKET_CELL_CHANGE_CONTINUE:
5199 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005200 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_Cell_Change_Continue_t), vector, &readIndex, &data->u.Packet_Cell_Change_Continue);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005201 break;
5202 }
5203 case MT_PACKET_DOWNLINK_ASSIGNMENT:
5204 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005205 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_Downlink_Assignment_t), vector, &readIndex, &data->u.Packet_Downlink_Assignment);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005206 break;
5207 }
5208 case MT_PACKET_MEASUREMENT_ORDER:
5209 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005210 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_Measurement_Order_t), vector, &readIndex, &data->u.Packet_Measurement_Order);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005211 break;
5212 }
5213 case MT_PACKET_NEIGHBOUR_CELL_DATA:
5214 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005215 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_Neighbour_Cell_Data_t), vector, &readIndex, &data->u.Packet_Neighbour_Cell_Data);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005216 break;
5217 }
5218 case MT_PACKET_SERVING_CELL_DATA:
5219 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005220 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_Serving_Cell_Data_t), vector, &readIndex, &data->u.Packet_Serving_Cell_Data);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005221 break;
5222 }
5223 case MT_PACKET_PAGING_REQUEST:
5224 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005225 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_Paging_Request_t), vector, &readIndex, &data->u.Packet_Paging_Request);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005226 break;
5227 }
5228 case MT_PACKET_PDCH_RELEASE:
5229 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005230 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_PDCH_Release_t), vector, &readIndex, &data->u.Packet_PDCH_Release);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005231 break;
5232 }
5233 case MT_PACKET_POLLING_REQ:
5234 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005235 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_Polling_Request_t), vector, &readIndex, &data->u.Packet_Polling_Request);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005236 break;
5237 }
5238 case MT_PACKET_POWER_CONTROL_TIMING_ADVANCE:
5239 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005240 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_Power_Control_Timing_Advance_t), vector, &readIndex, &data->u.Packet_Power_Control_Timing_Advance);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005241 break;
5242 }
5243 case MT_PACKET_PRACH_PARAMETERS:
5244 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005245 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_PRACH_Parameters_t), vector, &readIndex, &data->u.Packet_PRACH_Parameters);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005246 break;
5247 }
5248 case MT_PACKET_QUEUEING_NOTIFICATION:
5249 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005250 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_Queueing_Notification_t), vector, &readIndex, &data->u.Packet_Queueing_Notification);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005251 break;
5252 }
5253 case MT_PACKET_TIMESLOT_RECONFIGURE:
5254 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005255 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_Timeslot_Reconfigure_t), vector, &readIndex, &data->u.Packet_Timeslot_Reconfigure);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005256 break;
5257 }
5258 case MT_PACKET_TBF_RELEASE:
5259 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005260 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_TBF_Release_t), vector, &readIndex, &data->u.Packet_TBF_Release);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005261 break;
5262 }
5263 case MT_PACKET_UPLINK_ACK_NACK:
5264 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005265 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_Uplink_Ack_Nack_t), vector, &readIndex, &data->u.Packet_Uplink_Ack_Nack);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005266 break;
5267 }
5268 case MT_PACKET_UPLINK_ASSIGNMENT:
5269 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005270 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_Uplink_Assignment_t), vector, &readIndex, &data->u.Packet_Uplink_Assignment);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005271 break;
5272 }
5273 case MT_PACKET_HANDOVER_COMMAND:
5274 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005275 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_Handover_Command_t), vector, &readIndex, &data->u.Packet_Handover_Command);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005276 break;
5277 }
5278 case MT_PACKET_PHYSICAL_INFORMATION:
5279 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005280 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_PhysicalInformation_t), vector, &readIndex, &data->u.Packet_Handover_Command);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005281 break;
5282 }
5283 case MT_PACKET_DOWNLINK_DUMMY_CONTROL_BLOCK:
5284 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005285 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_Downlink_Dummy_Control_Block_t), vector, &readIndex, &data->u.Packet_Downlink_Dummy_Control_Block);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005286 break;
5287 }
5288 case MT_PACKET_SYSTEM_INFO_1:
5289 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005290 ret = csnStreamDecoder(&ar, CSNDESCR(PSI1_t), vector, &readIndex, &data->u.PSI1);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005291 break;
5292 }
5293 case MT_PACKET_SYSTEM_INFO_2:
5294 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005295 ret = csnStreamDecoder(&ar, CSNDESCR(PSI2_t), vector, &readIndex, &data->u.PSI2);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005296 break;
5297 }
5298 case MT_PACKET_SYSTEM_INFO_3:
5299 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005300 ret = csnStreamDecoder(&ar, CSNDESCR(PSI3_t), vector, &readIndex, &data->u.PSI3);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005301 break;
5302 }
5303 case MT_PACKET_SYSTEM_INFO_5:
5304 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005305 ret = csnStreamDecoder(&ar, CSNDESCR(PSI5_t), vector, &readIndex, &data->u.PSI5);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005306 break;
5307 }
5308 case MT_PACKET_SYSTEM_INFO_13:
5309 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005310 ret = csnStreamDecoder(&ar, CSNDESCR(PSI13_t), vector, &readIndex, &data->u.PSI13);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005311 break;
5312 }
5313 default:
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01005314 ret = CSN_ERROR_GENERAL;
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005315 break;
5316 }
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01005317
Pau Espin Pedrolac2b8662020-02-03 18:58:24 +01005318 /* recursive csnStreamDecoder call uses LOGPC everywhere without trailing
5319 newline, so as a caller we are responisble for submitting it */
5320 LOGPC(DCSN1, LOGL_INFO, "\n");
5321
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01005322 if (ret > 0) {
5323 LOGP(DRLCMACDATA, LOGL_NOTICE, "Got %d remaining bits unhandled by decoder at the end of bitvec\n", ret);
5324 ret = 0;
5325 }
5326
5327 return ret;
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005328}
5329
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01005330/* Returns 0 on success, negative on error. */
5331int encode_gsm_rlcmac_uplink(bitvec * vector, RlcMacUplink_t * data)
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005332{
5333 csnStream_t ar;
Ivan Kluchnikov9b06ff02012-06-15 10:13:30 +04005334 unsigned writeIndex = 0;
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01005335 int ret;
5336
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04005337 data->NrOfBits = 23 * 8;
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005338 csnStreamInit(&ar, 0, data->NrOfBits);
5339 writeIndex = 0;
Pau Espin Pedrolac2b8662020-02-03 18:58:24 +01005340
5341 /* recursive csnStreamEncoder call uses LOGPC everywhere, so we need to start the log somewhere... */
5342 LOGP(DCSN1, LOGL_INFO, "csnStreamEncoder (type=%d): ", data->u.MESSAGE_TYPE);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005343 switch (data->u.MESSAGE_TYPE)
5344 {
5345 case MT_PACKET_CELL_CHANGE_FAILURE:
5346 {
5347 /*
5348 * data is the pointer to the unpack struct that hold the unpack value
5349 * CSNDESCR is an array that holds the different element types
5350 * ar is the csn context holding the bitcount, offset and output
5351 */
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005352 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_Cell_Change_Failure_t), vector, &writeIndex, &data->u.Packet_Cell_Change_Failure);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005353 break;
5354 }
5355 case MT_PACKET_CONTROL_ACK:
5356 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005357 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_Control_Acknowledgement_t), vector, &writeIndex, &data->u.Packet_Control_Acknowledgement);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005358 break;
5359 }
5360 case MT_PACKET_DOWNLINK_ACK_NACK:
5361 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005362 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_Downlink_Ack_Nack_t), vector, &writeIndex, &data->u.Packet_Downlink_Ack_Nack);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005363 break;
5364 }
5365 case MT_PACKET_UPLINK_DUMMY_CONTROL_BLOCK:
5366 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005367 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_Uplink_Dummy_Control_Block_t), vector, &writeIndex, &data->u.Packet_Uplink_Dummy_Control_Block);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005368 break;
5369 }
5370 case MT_PACKET_MEASUREMENT_REPORT:
5371 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005372 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_Measurement_Report_t), vector, &writeIndex, &data->u.Packet_Measurement_Report);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005373 break;
5374 }
5375 case MT_PACKET_RESOURCE_REQUEST:
5376 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005377 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_Resource_Request_t), vector, &writeIndex, &data->u.Packet_Resource_Request);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005378 break;
5379 }
5380
5381 case MT_PACKET_MOBILE_TBF_STATUS:
5382 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005383 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_Mobile_TBF_Status_t), vector, &writeIndex, &data->u.Packet_Mobile_TBF_Status);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005384 break;
5385 }
5386 case MT_PACKET_PSI_STATUS:
5387 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005388 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_PSI_Status_t), vector, &writeIndex, &data->u.Packet_PSI_Status);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005389 break;
5390 }
5391 case MT_EGPRS_PACKET_DOWNLINK_ACK_NACK:
5392 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005393 ret = csnStreamEncoder(&ar, CSNDESCR(EGPRS_PD_AckNack_t), vector, &writeIndex, &data->u.Egprs_Packet_Downlink_Ack_Nack);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005394 break;
5395 }
5396 case MT_PACKET_PAUSE:
5397 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005398 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_Pause_t), vector, &writeIndex, &data->u.Packet_Pause);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005399 break;
5400 }
5401 case MT_PACKET_ENHANCED_MEASUREMENT_REPORT:
5402 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005403 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_Enh_Measurement_Report_t), vector, &writeIndex, &data->u.Packet_Enh_Measurement_Report);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005404 break;
5405 }
5406 case MT_ADDITIONAL_MS_RAC:
5407 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005408 ret = csnStreamEncoder(&ar, CSNDESCR(Additional_MS_Rad_Access_Cap_t), vector, &writeIndex, &data->u.Additional_MS_Rad_Access_Cap);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005409 break;
5410 }
5411 case MT_PACKET_CELL_CHANGE_NOTIFICATION:
5412 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005413 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_Cell_Change_Notification_t), vector, &writeIndex, &data->u.Packet_Cell_Change_Notification);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005414 break;
5415 }
5416 case MT_PACKET_SI_STATUS:
5417 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005418 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_SI_Status_t), vector, &writeIndex, &data->u.Packet_SI_Status);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005419 break;
5420 }
5421 default:
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01005422 ret = CSN_ERROR_GENERAL;
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005423 break;
5424 }
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01005425
Pau Espin Pedrolac2b8662020-02-03 18:58:24 +01005426 /* recursive csnStreamDecoder call uses LOGPC everywhere without trailing
5427 newline, so as a caller we are responisble for submitting it */
5428 LOGPC(DCSN1, LOGL_INFO, "\n");
5429
Vadim Yanitskiy773cb742020-03-06 08:26:16 +07005430 if (ret > 0 || ret == CSN_ERROR_NEED_MORE_BITS_TO_UNPACK) {
5431 LOGP(DRLCMACDATA, LOGL_ERROR, "Failed to encode an Uplink block: not enough bits "
5432 "in the output buffer (rc=%d)\n", ret);
5433 ret = CSN_ERROR_NEED_MORE_BITS_TO_UNPACK;
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01005434 }
5435
5436 return ret;
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005437}
5438
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01005439/* Returns 0 on success, negative on error. */
5440int encode_gsm_rlcmac_downlink(bitvec * vector, RlcMacDownlink_t * data)
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005441{
5442 csnStream_t ar;
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01005443 int ret;
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005444 /* See RLC/MAC downlink control block structure in TS 44.060 / 10.3.1 */
5445 gint bit_offset = 0;
5446 gint bit_length;
Ivan Kluchnikov9b06ff02012-06-15 10:13:30 +04005447 unsigned writeIndex = 0;
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005448
5449 if (data->PAYLOAD_TYPE == PAYLOAD_TYPE_DATA)
5450 {
Pau Espin Pedrolea9de4a2020-02-03 18:57:21 +01005451 LOGP(DRLCMACDATA, LOGL_NOTICE, "Payload Type: DATA (0), not implemented\n");
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01005452 return CSN_ERROR_GENERAL;
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005453 }
5454 else if (data->PAYLOAD_TYPE == PAYLOAD_TYPE_RESERVED)
5455 {
Pau Espin Pedrolea9de4a2020-02-03 18:57:21 +01005456 LOGP(DRLCMACDATA, LOGL_NOTICE, "Payload Type: RESERVED (3)\n");
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01005457 return CSN_ERROR_GENERAL;
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005458 }
5459 /* We can decode the message */
5460 else
5461 {
5462 /* First print the message type and create a tree item */
Alexander Couzensccde5c92017-02-04 03:10:08 +01005463 bitvec_write_field(vector, &writeIndex, data->PAYLOAD_TYPE, 2);
5464 bitvec_write_field(vector, &writeIndex, data->RRBP, 2);
5465 bitvec_write_field(vector, &writeIndex, data->SP, 1);
5466 bitvec_write_field(vector, &writeIndex, data->USF, 3);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005467 bit_offset = 8;
5468 if (data->PAYLOAD_TYPE == PAYLOAD_TYPE_CTRL_OPT_OCTET)
5469 {
Alexander Couzensccde5c92017-02-04 03:10:08 +01005470 bitvec_write_field(vector, &writeIndex, data->RBSN, 1);
5471 bitvec_write_field(vector, &writeIndex, data->RTI, 5);
5472 bitvec_write_field(vector, &writeIndex, data->FS, 1);
5473 bitvec_write_field(vector, &writeIndex, data->AC, 1);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005474 bit_offset += 8;
5475 if (data->AC == 1)
5476 {
Alexander Couzensccde5c92017-02-04 03:10:08 +01005477 bitvec_write_field(vector, &writeIndex, data->PR, 2);
5478 bitvec_write_field(vector, &writeIndex, data->TFI, 5);
5479 bitvec_write_field(vector, &writeIndex, data->D, 1);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005480 bit_offset += 8;
5481 }
5482 if ((data->RBSN == 1) && (data->FS == 0))
5483 {
Alexander Couzensccde5c92017-02-04 03:10:08 +01005484 bitvec_write_field(vector, &writeIndex, data->RBSNe, 3);
5485 bitvec_write_field(vector, &writeIndex, data->FSe, 1);
5486 bitvec_write_field(vector, &writeIndex, data->spare, 4);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005487 bit_offset += 8;
5488 }
5489 }
5490 }
5491
5492 /* Initialize the contexts */
5493 bit_length = 23*8 - bit_offset;
5494 data->NrOfBits = bit_length;
5495
5496 csnStreamInit(&ar, bit_offset, bit_length);
5497
Pau Espin Pedrolac2b8662020-02-03 18:58:24 +01005498
5499 /* recursive csnStreamEncoder call uses LOGPC everywhere, so we need to start the log somewhere... */
5500 LOGP(DCSN1, LOGL_INFO, "csnStreamEncoder (type=%d): ", data->u.MESSAGE_TYPE);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005501 switch (data->u.MESSAGE_TYPE)
5502 {
5503 case MT_PACKET_ACCESS_REJECT:
5504 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005505 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_Access_Reject_t), vector, &writeIndex, &data->u.Packet_Access_Reject);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005506 break;
5507 }
5508 case MT_PACKET_CELL_CHANGE_ORDER:
5509 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005510 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_Cell_Change_Order_t), vector, &writeIndex, &data->u.Packet_Cell_Change_Order);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005511 break;
5512 }
5513 case MT_PACKET_CELL_CHANGE_CONTINUE:
5514 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005515 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_Cell_Change_Continue_t), vector, &writeIndex, &data->u.Packet_Cell_Change_Continue);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005516 break;
5517 }
5518 case MT_PACKET_DOWNLINK_ASSIGNMENT:
5519 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005520 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_Downlink_Assignment_t), vector, &writeIndex, &data->u.Packet_Downlink_Assignment);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005521 break;
5522 }
5523 case MT_PACKET_MEASUREMENT_ORDER:
5524 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005525 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_Measurement_Order_t), vector, &writeIndex, &data->u.Packet_Measurement_Order);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005526 break;
5527 }
5528 case MT_PACKET_NEIGHBOUR_CELL_DATA:
5529 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005530 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_Neighbour_Cell_Data_t), vector, &writeIndex, &data->u.Packet_Neighbour_Cell_Data);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005531 break;
5532 }
5533 case MT_PACKET_SERVING_CELL_DATA:
5534 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005535 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_Serving_Cell_Data_t), vector, &writeIndex, &data->u.Packet_Serving_Cell_Data);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005536 break;
5537 }
5538 case MT_PACKET_PAGING_REQUEST:
5539 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005540 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_Paging_Request_t), vector, &writeIndex, &data->u.Packet_Paging_Request);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005541 break;
5542 }
5543 case MT_PACKET_PDCH_RELEASE:
5544 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005545 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_PDCH_Release_t), vector, &writeIndex, &data->u.Packet_PDCH_Release);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005546 break;
5547 }
5548 case MT_PACKET_POLLING_REQ:
5549 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005550 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_Polling_Request_t), vector, &writeIndex, &data->u.Packet_Polling_Request);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005551 break;
5552 }
5553 case MT_PACKET_POWER_CONTROL_TIMING_ADVANCE:
5554 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005555 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_Power_Control_Timing_Advance_t), vector, &writeIndex, &data->u.Packet_Power_Control_Timing_Advance);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005556 break;
5557 }
5558 case MT_PACKET_PRACH_PARAMETERS:
5559 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005560 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_PRACH_Parameters_t), vector, &writeIndex, &data->u.Packet_PRACH_Parameters);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005561 break;
5562 }
5563 case MT_PACKET_QUEUEING_NOTIFICATION:
5564 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005565 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_Queueing_Notification_t), vector, &writeIndex, &data->u.Packet_Queueing_Notification);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005566 break;
5567 }
5568 case MT_PACKET_TIMESLOT_RECONFIGURE:
5569 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005570 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_Timeslot_Reconfigure_t), vector, &writeIndex, &data->u.Packet_Timeslot_Reconfigure);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005571 break;
5572 }
5573 case MT_PACKET_TBF_RELEASE:
5574 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005575 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_TBF_Release_t), vector, &writeIndex, &data->u.Packet_TBF_Release);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005576 break;
5577 }
5578 case MT_PACKET_UPLINK_ACK_NACK:
5579 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005580 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_Uplink_Ack_Nack_t), vector, &writeIndex, &data->u.Packet_Uplink_Ack_Nack);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005581 break;
5582 }
5583 case MT_PACKET_UPLINK_ASSIGNMENT:
5584 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005585 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_Uplink_Assignment_t), vector, &writeIndex, &data->u.Packet_Uplink_Assignment);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005586 break;
5587 }
5588 case MT_PACKET_HANDOVER_COMMAND:
5589 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005590 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_Handover_Command_t), vector, &writeIndex, &data->u.Packet_Handover_Command);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005591 break;
5592 }
5593 case MT_PACKET_PHYSICAL_INFORMATION:
5594 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005595 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_PhysicalInformation_t), vector, &writeIndex, &data->u.Packet_Handover_Command);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005596 break;
5597 }
5598 case MT_PACKET_DOWNLINK_DUMMY_CONTROL_BLOCK:
5599 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005600 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_Downlink_Dummy_Control_Block_t), vector, &writeIndex, &data->u.Packet_Downlink_Dummy_Control_Block);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005601 break;
5602 }
5603 case MT_PACKET_SYSTEM_INFO_1:
5604 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005605 ret = csnStreamEncoder(&ar, CSNDESCR(PSI1_t), vector, &writeIndex, &data->u.PSI1);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005606 break;
5607 }
5608 case MT_PACKET_SYSTEM_INFO_2:
5609 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005610 ret = csnStreamEncoder(&ar, CSNDESCR(PSI2_t), vector, &writeIndex, &data->u.PSI2);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005611 break;
5612 }
5613 case MT_PACKET_SYSTEM_INFO_3:
5614 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005615 ret = csnStreamEncoder(&ar, CSNDESCR(PSI3_t), vector, &writeIndex, &data->u.PSI3);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005616 break;
5617 }
5618 case MT_PACKET_SYSTEM_INFO_5:
5619 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005620 ret = csnStreamEncoder(&ar, CSNDESCR(PSI5_t), vector, &writeIndex, &data->u.PSI5);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005621 break;
5622 }
5623 case MT_PACKET_SYSTEM_INFO_13:
5624 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005625 ret = csnStreamEncoder(&ar, CSNDESCR(PSI13_t), vector, &writeIndex, &data->u.PSI13);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005626 break;
5627 }
5628 default:
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01005629 ret = -1;
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005630 break;
5631 }
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01005632
Pau Espin Pedrolac2b8662020-02-03 18:58:24 +01005633 /* recursive csnStreamDecoder call uses LOGPC everywhere without trailing
5634 newline, so as a caller we are responisble for submitting it */
5635 LOGPC(DCSN1, LOGL_INFO, "\n");
5636
Vadim Yanitskiy773cb742020-03-06 08:26:16 +07005637 if (ret > 0 || ret == CSN_ERROR_NEED_MORE_BITS_TO_UNPACK) {
5638 LOGP(DRLCMACDATA, LOGL_ERROR, "Failed to encode a Downlink block: not enough bits "
5639 "in the output buffer (rc=%d)\n", ret);
5640 ret = CSN_ERROR_NEED_MORE_BITS_TO_UNPACK;
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01005641 }
5642
5643 return ret;
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005644}
Ivan Kluchnikovd5f01332012-02-05 01:41:25 +04005645
Ivan Kluchnikov835f91e2012-04-30 18:00:36 +04005646void decode_gsm_rlcmac_uplink_data(bitvec * vector, RlcMacUplinkDataBlock_t * data)
Ivan Kluchnikovd5f01332012-02-05 01:41:25 +04005647{
Ivan Kluchnikov9b06ff02012-06-15 10:13:30 +04005648 unsigned readIndex = 0;
Ivan Kluchnikovd5f01332012-02-05 01:41:25 +04005649 //unsigned dataLen = 0;
Alexander Couzensccde5c92017-02-04 03:10:08 +01005650 guint8 payload_type = bitvec_read_field(vector, &readIndex, 2);
Ivan Kluchnikovd5f01332012-02-05 01:41:25 +04005651 if (payload_type == PAYLOAD_TYPE_DATA)
5652 {
5653 readIndex = 0;
5654 // MAC header
Alexander Couzensccde5c92017-02-04 03:10:08 +01005655 data->PAYLOAD_TYPE = bitvec_read_field(vector, &readIndex, 2);
5656 data->CV = bitvec_read_field(vector, &readIndex, 4);
5657 data->SI = bitvec_read_field(vector, &readIndex, 1);
5658 data->R = bitvec_read_field(vector, &readIndex, 1);
Ivan Kluchnikova9f1ff22012-05-24 22:25:06 +04005659 LOGPC(DRLCMACDATA, LOGL_NOTICE, "PAYLOAD_TYPE = %u ", (unsigned)(data->PAYLOAD_TYPE));
5660 LOGPC(DRLCMACDATA, LOGL_NOTICE, "CV = %u ", (unsigned)(data->CV));
5661 LOGPC(DRLCMACDATA, LOGL_NOTICE, "SI = %u ", (unsigned)(data->SI));
5662 LOGPC(DRLCMACDATA, LOGL_NOTICE, "R = %u ", (unsigned)(data->R));
Ivan Kluchnikovd5f01332012-02-05 01:41:25 +04005663 // Octet 1
Alexander Couzensccde5c92017-02-04 03:10:08 +01005664 data->spare = bitvec_read_field(vector, &readIndex, 1);
5665 data->PI = bitvec_read_field(vector, &readIndex, 1);
5666 data->TFI = bitvec_read_field(vector, &readIndex, 5);
5667 data->TI = bitvec_read_field(vector, &readIndex, 1);
Ivan Kluchnikova9f1ff22012-05-24 22:25:06 +04005668 LOGPC(DRLCMACDATA, LOGL_NOTICE, "spare = %u ", (unsigned)(data->spare));
5669 LOGPC(DRLCMACDATA, LOGL_NOTICE, "PI = %u ", (unsigned)(data->PI));
5670 LOGPC(DRLCMACDATA, LOGL_NOTICE, "TFI = %u ", (unsigned)(data->TFI));
5671 LOGPC(DRLCMACDATA, LOGL_NOTICE, "TI = %u ", (unsigned)(data->TI));
Ivan Kluchnikovd5f01332012-02-05 01:41:25 +04005672
5673 // Octet 2
Alexander Couzensccde5c92017-02-04 03:10:08 +01005674 data->BSN = bitvec_read_field(vector, &readIndex, 7);
5675 data->E_1 = bitvec_read_field(vector, &readIndex, 1);
Ivan Kluchnikova9f1ff22012-05-24 22:25:06 +04005676 LOGPC(DRLCMACDATA, LOGL_NOTICE, "BSN = %u ", (unsigned)(data->BSN));
5677 LOGPC(DRLCMACDATA, LOGL_NOTICE, "E_1 = %u ", (unsigned)(data->E_1));
5678
Ivan Kluchnikovd5f01332012-02-05 01:41:25 +04005679
5680 if(data->E_1 == 0) // Extension octet follows immediately
5681 {
5682 // Octet 3 (optional)
5683 unsigned i = 0;
5684 do
5685 {
Alexander Couzensccde5c92017-02-04 03:10:08 +01005686 data->LENGTH_INDICATOR[i] = bitvec_read_field(vector, &readIndex, 6);
5687 data->M[i] = bitvec_read_field(vector, &readIndex, 1);
5688 data->E[i] = bitvec_read_field(vector, &readIndex, 1);
Ivan Kluchnikova9f1ff22012-05-24 22:25:06 +04005689 LOGPC(DRLCMACDATA, LOGL_NOTICE, "LENGTH_INDICATOR[%u] = %u ", i, (unsigned)(data->LENGTH_INDICATOR[i]));
5690 LOGPC(DRLCMACDATA, LOGL_NOTICE, "M[%u] = %u ", i, (unsigned)(data->M[i]));
5691 LOGPC(DRLCMACDATA, LOGL_NOTICE, "E[%u] = %u ", i, (unsigned)(data->E[i]));
Ivan Kluchnikovd5f01332012-02-05 01:41:25 +04005692 i++;
5693 } while((data->M[i-1] == 1)&&(data->E[i-1] == 0));
5694 }
5695 if(data->TI == 1) // TLLI field is present
5696 {
Alexander Couzensccde5c92017-02-04 03:10:08 +01005697 data->TLLI = bitvec_read_field(vector, &readIndex, 32);
Ivan Kluchnikova9f1ff22012-05-24 22:25:06 +04005698 LOGPC(DRLCMACDATA, LOGL_NOTICE, "TLLI = %08x ", data->TLLI);
Ivan Kluchnikovd5f01332012-02-05 01:41:25 +04005699 if (data->PI == 1) // PFI is present if TI field indicates presence of TLLI
5700 {
Alexander Couzensccde5c92017-02-04 03:10:08 +01005701 data->PFI = bitvec_read_field(vector, &readIndex, 7);
5702 data->E_2 = bitvec_read_field(vector, &readIndex, 1);
Ivan Kluchnikova9f1ff22012-05-24 22:25:06 +04005703 LOGPC(DRLCMACDATA, LOGL_NOTICE, "PFI = %u ", (unsigned)(data->PFI));
5704 LOGPC(DRLCMACDATA, LOGL_NOTICE, "E_2 = %u ", (unsigned)(data->E_2));
Ivan Kluchnikovd5f01332012-02-05 01:41:25 +04005705 }
5706 }
5707 unsigned dataLen = 23 - readIndex/8;
Ivan Kluchnikova9f1ff22012-05-24 22:25:06 +04005708 LOGPC(DRLCMACDATA, LOGL_NOTICE, "DATA[%u] = ", dataLen);
Ivan Kluchnikov1b517342013-12-30 14:26:06 +04005709 assert(dataLen <= 20);
Ivan Kluchnikovd5f01332012-02-05 01:41:25 +04005710 for (unsigned i = 0; i < dataLen; i++)
5711 {
Alexander Couzensccde5c92017-02-04 03:10:08 +01005712 data->RLC_DATA[i] = bitvec_read_field(vector, &readIndex, 8);
Ivan Kluchnikova9f1ff22012-05-24 22:25:06 +04005713 LOGPC(DRLCMACDATA, LOGL_NOTICE, "%02x", (unsigned)(data->RLC_DATA[i]));
Ivan Kluchnikovd5f01332012-02-05 01:41:25 +04005714 }
Ivan Kluchnikova9f1ff22012-05-24 22:25:06 +04005715 LOGPC(DRLCMACDATA, LOGL_NOTICE, "\n");
Ivan Kluchnikovd5f01332012-02-05 01:41:25 +04005716 }
5717 else
5718 {
Pau Espin Pedrolea9de4a2020-02-03 18:57:21 +01005719 LOGP(DRLCMACDATA, LOGL_NOTICE, "Payload Type: RESERVED (3)\n");
Ivan Kluchnikovd5f01332012-02-05 01:41:25 +04005720 return;
5721 }
5722}
Ivan Kluchnikov92ac6372012-02-20 15:04:25 +04005723
Ivan Kluchnikov835f91e2012-04-30 18:00:36 +04005724void encode_gsm_rlcmac_downlink_data(bitvec * vector, RlcMacDownlinkDataBlock_t * data)
Ivan Kluchnikov92ac6372012-02-20 15:04:25 +04005725{
Ivan Kluchnikov9b06ff02012-06-15 10:13:30 +04005726 unsigned writeIndex = 0;
Ivan Kluchnikov92ac6372012-02-20 15:04:25 +04005727
5728 if (data->PAYLOAD_TYPE == PAYLOAD_TYPE_DATA)
5729 {
5730 // MAC header
Alexander Couzensccde5c92017-02-04 03:10:08 +01005731 bitvec_write_field(vector, &writeIndex, data->PAYLOAD_TYPE, 2);
5732 bitvec_write_field(vector, &writeIndex, data->RRBP, 2);
5733 bitvec_write_field(vector, &writeIndex, data->SP, 1);
5734 bitvec_write_field(vector, &writeIndex, data->USF, 3);
Ivan Kluchnikova9f1ff22012-05-24 22:25:06 +04005735 LOGPC(DRLCMACDATA, LOGL_NOTICE, "PAYLOAD_TYPE = %u ", (unsigned)(data->PAYLOAD_TYPE));
5736 LOGPC(DRLCMACDATA, LOGL_NOTICE, "RRBP = %u ", (unsigned)(data->RRBP));
5737 LOGPC(DRLCMACDATA, LOGL_NOTICE, "SP = %u ", (unsigned)(data->SP));
5738 LOGPC(DRLCMACDATA, LOGL_NOTICE, "USF = %u ", (unsigned)(data->USF));
Pau Espin Pedrol034e32f2020-01-28 17:14:26 +01005739
Ivan Kluchnikov92ac6372012-02-20 15:04:25 +04005740 // Octet 1
Alexander Couzensccde5c92017-02-04 03:10:08 +01005741 bitvec_write_field(vector, &writeIndex, data->PR, 2);
5742 bitvec_write_field(vector, &writeIndex, data->TFI, 5);
5743 bitvec_write_field(vector, &writeIndex, data->FBI, 1);
Ivan Kluchnikova9f1ff22012-05-24 22:25:06 +04005744 LOGPC(DRLCMACDATA, LOGL_NOTICE, "PR = %u ", (unsigned)(data->PR));
5745 LOGPC(DRLCMACDATA, LOGL_NOTICE, "TFI = %u ", (unsigned)(data->TFI));
5746 LOGPC(DRLCMACDATA, LOGL_NOTICE, "FBI = %u ", (unsigned)(data->FBI));
5747
Ivan Kluchnikov92ac6372012-02-20 15:04:25 +04005748 // Octet 2
Alexander Couzensccde5c92017-02-04 03:10:08 +01005749 bitvec_write_field(vector, &writeIndex, data->BSN, 7);
5750 bitvec_write_field(vector, &writeIndex, data->E_1, 1);
Ivan Kluchnikova9f1ff22012-05-24 22:25:06 +04005751 LOGPC(DRLCMACDATA, LOGL_NOTICE, "BSN = %u ", (unsigned)(data->BSN));
5752 LOGPC(DRLCMACDATA, LOGL_NOTICE, "E_1 = %u ", (unsigned)(data->E_1));
5753
Ivan Kluchnikov92ac6372012-02-20 15:04:25 +04005754 // Octet 3 (optional)
5755 if(data->E_1 == 0)
5756 {
5757 unsigned i = 0;
5758 do
5759 {
Alexander Couzensccde5c92017-02-04 03:10:08 +01005760 bitvec_write_field(vector, &writeIndex, data->LENGTH_INDICATOR[i], 6);
5761 bitvec_write_field(vector, &writeIndex, data->M[i], 1);
5762 bitvec_write_field(vector, &writeIndex, data->E[i], 1);
Ivan Kluchnikova9f1ff22012-05-24 22:25:06 +04005763 LOGPC(DRLCMACDATA, LOGL_NOTICE, "LENGTH_INDICATOR[%u] = %u ", i, (unsigned)(data->LENGTH_INDICATOR[i]));
5764 LOGPC(DRLCMACDATA, LOGL_NOTICE, "M[%u] = %u ", i, (unsigned)(data->M[i]));
5765 LOGPC(DRLCMACDATA, LOGL_NOTICE, "E[%u] = %u ", i, (unsigned)(data->E[i]));
Ivan Kluchnikov92ac6372012-02-20 15:04:25 +04005766 i++;
5767 }
5768 while ((data->M[i-1] == 1) && (data->E[i-1] == 0));
5769 }
5770 unsigned dataNumOctets = 23 - writeIndex/8;
Ivan Kluchnikova9f1ff22012-05-24 22:25:06 +04005771 LOGPC(DRLCMACDATA, LOGL_NOTICE, "DATA[%u] = ", dataNumOctets);
Ivan Kluchnikov1b517342013-12-30 14:26:06 +04005772 assert(dataNumOctets <= 20);
Ivan Kluchnikov92ac6372012-02-20 15:04:25 +04005773 for (unsigned i = 0; i < dataNumOctets; i++)
5774 {
Alexander Couzensccde5c92017-02-04 03:10:08 +01005775 bitvec_write_field(vector, &writeIndex, data->RLC_DATA[i], 8);
Ivan Kluchnikova9f1ff22012-05-24 22:25:06 +04005776 LOGPC(DRLCMACDATA, LOGL_NOTICE, "%02x", (unsigned)(data->RLC_DATA[i]));
Ivan Kluchnikov92ac6372012-02-20 15:04:25 +04005777 }
Ivan Kluchnikova9f1ff22012-05-24 22:25:06 +04005778 LOGPC(DRLCMACDATA, LOGL_NOTICE, "\n");
Ivan Kluchnikov92ac6372012-02-20 15:04:25 +04005779 }
5780}
Jacob Erlbeck0df80be2016-01-20 12:14:55 +01005781
Pau Espin Pedrolcdbc5db2020-01-23 21:00:19 +01005782int decode_gsm_ra_cap(bitvec * vector, MS_Radio_Access_capability_t *data)
Jacob Erlbeck0df80be2016-01-20 12:14:55 +01005783{
5784 csnStream_t ar;
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01005785 int ret;
Jacob Erlbeck0df80be2016-01-20 12:14:55 +01005786 unsigned readIndex = 0;
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01005787
Jacob Erlbeck0df80be2016-01-20 12:14:55 +01005788 csnStreamInit(&ar, 0, 8 * vector->data_len);
Pau Espin Pedrolac2b8662020-02-03 18:58:24 +01005789
5790 /* recursive csnStreamEncoder call uses LOGPC everywhere, so we need to start the log somewhere... */
Vadim Yanitskiye60d9c72020-02-18 05:30:57 +07005791 LOGP(DCSN1, LOGL_INFO, "csnStreamDecoder (RAcap): ");
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005792 ret = csnStreamDecoder(&ar, CSNDESCR(MS_Radio_Access_capability_t), vector, &readIndex, data);
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01005793
Pau Espin Pedrolac2b8662020-02-03 18:58:24 +01005794 /* recursive csnStreamDecoder call uses LOGPC everywhere without trailing
5795 newline, so as a caller we are responisble for submitting it */
5796 LOGPC(DCSN1, LOGL_INFO, "\n");
5797
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01005798 if (ret > 0) {
5799 LOGP(DRLCMACDATA, LOGL_NOTICE, "Got %d remaining bits unhandled by decoder at the end of bitvec\n", ret);
5800 ret = 0;
5801 }
5802 return ret;
Jacob Erlbeck0df80be2016-01-20 12:14:55 +01005803}
Vadim Yanitskiyb47e53b2020-02-20 04:33:50 +07005804
5805/* This function is not actually used by osmo-pcu itself, and only needed for
5806 * the RLCMAC unit test. Having it here is better than making the internal
5807 * CSN.1 definitions (in particular, MS_Radio_Access_capability_t) non-static. */
5808int encode_gsm_ra_cap(bitvec *vector, MS_Radio_Access_capability_t *data)
5809{
5810 unsigned writeIndex = 0;
5811 csnStream_t ar;
5812 int ret;
5813
5814 csnStreamInit(&ar, 0, vector->data_len * 8);
5815
5816 /* recursive csnStreamEncoder call uses LOGPC everywhere, so we need to start the log somewhere... */
5817 LOGP(DCSN1, LOGL_INFO, "csnStreamEncoder (RAcap): ");
5818 ret = csnStreamEncoder(&ar, CSNDESCR(MS_Radio_Access_capability_t), vector, &writeIndex, data);
5819 LOGPC(DCSN1, LOGL_INFO, "\n");
5820
Vadim Yanitskiy773cb742020-03-06 08:26:16 +07005821 if (ret > 0 || ret == CSN_ERROR_NEED_MORE_BITS_TO_UNPACK) {
5822 LOGP(DRLCMACDATA, LOGL_ERROR, "Failed to encode MS RA Capability IE: not enough bits "
5823 "in the output buffer (rc=%d)\n", ret);
5824 ret = CSN_ERROR_NEED_MORE_BITS_TO_UNPACK;
Vadim Yanitskiyb47e53b2020-02-20 04:33:50 +07005825 }
5826
5827 return ret;
5828}