blob: a2aae90c29df929fa860c0cb22b104ff6fc8c5fb [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
Pau Espin Pedrol20848c32020-03-23 17:13:20 +010032extern "C" {
33#include <osmocom/core/utils.h>
34}
35
Ivan Kluchnikov487a1412011-12-21 13:17:53 +030036#include "gsm_rlcmac.h"
37/* Initialize the protocol and registered fields
38*/
39#include <iostream>
40#include <cstdlib>
Ivan Kluchnikov1b517342013-12-30 14:26:06 +040041#include <assert.h>
Ivan Kluchnikova9f1ff22012-05-24 22:25:06 +040042#include <gprs_debug.h>
Ivan Kluchnikov487a1412011-12-21 13:17:53 +030043using namespace std;
44
45/* Payload type as defined in TS 44.060 / 10.4.7 */
46#define PAYLOAD_TYPE_DATA 0
47#define PAYLOAD_TYPE_CTRL_NO_OPT_OCTET 1
48#define PAYLOAD_TYPE_CTRL_OPT_OCTET 2
49#define PAYLOAD_TYPE_RESERVED 3
50
51/* CSN1 structures */
52/*(not all parts of CSN_DESCR structure are always initialized.)*/
53static const
54CSN_DESCR_BEGIN(PLMN_t)
55 M_UINT (PLMN_t, MCC2, 4),
56 M_UINT (PLMN_t, MCC1, 4),
57 M_UINT (PLMN_t, MNC3, 4),
58 M_UINT (PLMN_t, MCC3, 4),
59 M_UINT (PLMN_t, MNC2, 4),
60 M_UINT (PLMN_t, MNC1, 4),
61CSN_DESCR_END (PLMN_t)
62
63static const
64CSN_DESCR_BEGIN(StartingTime_t)
65 M_UINT (StartingTime_t, N32, 5),
66 M_UINT (StartingTime_t, N51, 6),
67 M_UINT (StartingTime_t, N26, 5),
68CSN_DESCR_END (StartingTime_t)
69
70/*< Global TFI IE >*/
71static const
72CSN_DESCR_BEGIN(Global_TFI_t)
73 M_UNION (Global_TFI_t, 2),
74 M_UINT (Global_TFI_t, u.UPLINK_TFI, 5),
75 M_UINT (Global_TFI_t, u.DOWNLINK_TFI, 5),
76CSN_DESCR_END (Global_TFI_t)
77
78/*< Starting Frame Number Description IE >*/
79static const
80CSN_DESCR_BEGIN(Starting_Frame_Number_t)
81 M_UNION (Starting_Frame_Number_t, 2),
82 M_TYPE (Starting_Frame_Number_t, u.StartingTime, StartingTime_t),
83 M_UINT (Starting_Frame_Number_t, u.k, 13),
84CSN_DESCR_END(Starting_Frame_Number_t)
85
86/*< Ack/Nack Description IE >*/
87static const
88CSN_DESCR_BEGIN(Ack_Nack_Description_t)
89 M_UINT (Ack_Nack_Description_t, FINAL_ACK_INDICATION, 1),
90 M_UINT (Ack_Nack_Description_t, STARTING_SEQUENCE_NUMBER, 7),
91 M_BITMAP (Ack_Nack_Description_t, RECEIVED_BLOCK_BITMAP, 64),
92CSN_DESCR_END (Ack_Nack_Description_t)
93
94/*< Packet Timing Advance IE >*/
95static const
96CSN_DESCR_BEGIN(Packet_Timing_Advance_t)
97 M_NEXT_EXIST (Packet_Timing_Advance_t, Exist_TIMING_ADVANCE_VALUE, 1),
98 M_UINT (Packet_Timing_Advance_t, TIMING_ADVANCE_VALUE, 6),
99
100 M_NEXT_EXIST (Packet_Timing_Advance_t, Exist_IndexAndtimeSlot, 2),
101 M_UINT (Packet_Timing_Advance_t, TIMING_ADVANCE_INDEX, 4),
102 M_UINT (Packet_Timing_Advance_t, TIMING_ADVANCE_TIMESLOT_NUMBER, 3),
103CSN_DESCR_END (Packet_Timing_Advance_t)
104
105/*< Power Control Parameters IE >*/
106static const
107CSN_DESCR_BEGIN(GPRS_Power_Control_Parameters_t)
108 M_UINT (GPRS_Power_Control_Parameters_t, ALPHA, 4),
109 M_UINT (GPRS_Power_Control_Parameters_t, T_AVG_W, 5),
110 M_UINT (GPRS_Power_Control_Parameters_t, T_AVG_T, 5),
Anders Broman8ea3cbe2020-01-28 17:36:33 +0100111 M_UINT (GPRS_Power_Control_Parameters_t, PC_MEAS_CHAN, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300112 M_UINT (GPRS_Power_Control_Parameters_t, N_AVG_I, 4),
113CSN_DESCR_END (GPRS_Power_Control_Parameters_t)
114
115/*< Global Power Control Parameters IE >*/
116static const
117CSN_DESCR_BEGIN(Global_Power_Control_Parameters_t)
118 M_UINT (Global_Power_Control_Parameters_t, ALPHA, 4),
119 M_UINT (Global_Power_Control_Parameters_t, T_AVG_W, 5),
120 M_UINT (Global_Power_Control_Parameters_t, T_AVG_T, 5),
121 M_UINT (Global_Power_Control_Parameters_t, Pb, 4),
122 M_UINT (Global_Power_Control_Parameters_t, PC_MEAS_CHAN, 1),
123 M_UINT (Global_Power_Control_Parameters_t, INT_MEAS_CHANNEL_LIST_AVAIL, 1),
124 M_UINT (Global_Power_Control_Parameters_t, N_AVG_I, 4),
125CSN_DESCR_END (Global_Power_Control_Parameters_t)
126
127/*< Global Packet Timing Advance IE >*/
128static const
129CSN_DESCR_BEGIN(Global_Packet_Timing_Advance_t)
130 M_NEXT_EXIST (Global_Packet_Timing_Advance_t, Exist_TIMING_ADVANCE_VALUE, 1),
131 M_UINT (Global_Packet_Timing_Advance_t, TIMING_ADVANCE_VALUE, 6),
132
133 M_NEXT_EXIST (Global_Packet_Timing_Advance_t, Exist_UPLINK_TIMING_ADVANCE, 2),
134 M_UINT (Global_Packet_Timing_Advance_t, UPLINK_TIMING_ADVANCE_INDEX, 4),
135 M_UINT (Global_Packet_Timing_Advance_t, UPLINK_TIMING_ADVANCE_TIMESLOT_NUMBER, 3),
136
137 M_NEXT_EXIST (Global_Packet_Timing_Advance_t, Exist_DOWNLINK_TIMING_ADVANCE, 2),
138 M_UINT (Global_Packet_Timing_Advance_t, DOWNLINK_TIMING_ADVANCE_INDEX, 4),
139 M_UINT (Global_Packet_Timing_Advance_t, DOWNLINK_TIMING_ADVANCE_TIMESLOT_NUMBER, 3),
140CSN_DESCR_END (Global_Packet_Timing_Advance_t)
141
142/*< Channel Quality Report struct >*/
143static const
144CSN_DESCR_BEGIN(Channel_Quality_Report_t)
145 M_UINT (Channel_Quality_Report_t, C_VALUE, 6),
146 M_UINT (Channel_Quality_Report_t, RXQUAL, 3),
147 M_UINT (Channel_Quality_Report_t, SIGN_VAR, 6),
148
149 M_NEXT_EXIST (Channel_Quality_Report_t, Slot[0].Exist, 1),
150 M_UINT (Channel_Quality_Report_t, Slot[0].I_LEVEL_TN, 4),
151
152 M_NEXT_EXIST (Channel_Quality_Report_t, Slot[1].Exist, 1),
153 M_UINT (Channel_Quality_Report_t, Slot[1].I_LEVEL_TN, 4),
154
155 M_NEXT_EXIST (Channel_Quality_Report_t, Slot[2].Exist, 1),
156 M_UINT (Channel_Quality_Report_t, Slot[2].I_LEVEL_TN, 4),
157
158 M_NEXT_EXIST (Channel_Quality_Report_t, Slot[3].Exist, 1),
159 M_UINT (Channel_Quality_Report_t, Slot[3].I_LEVEL_TN, 4),
160
161 M_NEXT_EXIST (Channel_Quality_Report_t, Slot[4].Exist, 1),
162 M_UINT (Channel_Quality_Report_t, Slot[4].I_LEVEL_TN, 4),
163
164 M_NEXT_EXIST (Channel_Quality_Report_t, Slot[5].Exist, 1),
165 M_UINT (Channel_Quality_Report_t, Slot[5].I_LEVEL_TN, 4),
166
167 M_NEXT_EXIST (Channel_Quality_Report_t, Slot[6].Exist, 1),
168 M_UINT (Channel_Quality_Report_t, Slot[6].I_LEVEL_TN, 4),
169
170 M_NEXT_EXIST (Channel_Quality_Report_t, Slot[7].Exist, 1),
171 M_UINT (Channel_Quality_Report_t, Slot[7].I_LEVEL_TN, 4),
172CSN_DESCR_END (Channel_Quality_Report_t)
173
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400174/*< EGPRS Ack/Nack Description struct >*/
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300175static const
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400176CSN_DESCR_BEGIN (EGPRS_AckNack_Desc_t)
177 M_UINT (EGPRS_AckNack_Desc_t, FINAL_ACK_INDICATION, 1),
178 M_UINT (EGPRS_AckNack_Desc_t, BEGINNING_OF_WINDOW, 1),
179 M_UINT (EGPRS_AckNack_Desc_t, END_OF_WINDOW, 1),
180 M_UINT (EGPRS_AckNack_Desc_t, STARTING_SEQUENCE_NUMBER, 11),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300181
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400182 M_NEXT_EXIST (EGPRS_AckNack_Desc_t, Exist_CRBB, 3),
183 M_UINT (EGPRS_AckNack_Desc_t, CRBB_LENGTH, 7),
184 M_UINT (EGPRS_AckNack_Desc_t, CRBB_STARTING_COLOR_CODE, 1),
185 M_LEFT_VAR_BMP (EGPRS_AckNack_Desc_t, CRBB, CRBB_LENGTH, 0),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300186
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400187 M_LEFT_VAR_BMP_1(EGPRS_AckNack_Desc_t, URBB, URBB_LENGTH, 0),
188CSN_DESCR_END (EGPRS_AckNack_Desc_t)
189
190/*< EGPRS Ack/Nack Description IE >*/
Vadim Yanitskiy39a65052020-01-25 01:24:59 +0700191gint16 Egprs_Ack_Nack_Desc_w_len_Dissector(csnStream_t* ar, bitvec *vector, unsigned *readIndex, void* data)
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400192{
193 if (ar->direction == 0)
194 {
195 return csnStreamEncoder(ar, CSNDESCR(EGPRS_AckNack_Desc_t), vector, readIndex, data);
196 }
197 else
198 {
199 return csnStreamDecoder(ar, CSNDESCR(EGPRS_AckNack_Desc_t), vector, readIndex, data);
200 }
201}
202
203/* this intermediate structure is only required because M_SERIALIZE cannot be used as a member of M_UNION */
204static const
205CSN_DESCR_BEGIN(EGPRS_AckNack_w_len_t)
206 M_SERIALIZE (EGPRS_AckNack_w_len_t, Desc, 8, Egprs_Ack_Nack_Desc_w_len_Dissector),
207CSN_DESCR_END (EGPRS_AckNack_w_len_t)
208
209static const
210CSN_DESCR_BEGIN(EGPRS_AckNack_t)
211 M_UNION (EGPRS_AckNack_t, 2),
212 M_TYPE (EGPRS_AckNack_t, Desc, EGPRS_AckNack_Desc_t),
213 M_TYPE (EGPRS_AckNack_t, Desc, EGPRS_AckNack_w_len_t),
214CSN_DESCR_END (EGPRS_AckNack_t)
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300215
216/*<P1 Rest Octets>*/
217/*<P2 Rest Octets>*/
218static const
219CSN_DESCR_BEGIN(MobileAllocationIE_t)
220 M_UINT (MobileAllocationIE_t, Length, 8),
221 M_VAR_ARRAY (MobileAllocationIE_t, MA, Length, 0),
222CSN_DESCR_END (MobileAllocationIE_t)
223
224static const
225CSN_DESCR_BEGIN(SingleRFChannel_t)
226 M_UINT (SingleRFChannel_t, spare, 2),
227 M_UINT (SingleRFChannel_t, ARFCN, 10),
228CSN_DESCR_END (SingleRFChannel_t)
229
230static const
231CSN_DESCR_BEGIN(RFHoppingChannel_t)
232 M_UINT (RFHoppingChannel_t, MAIO, 6),
233 M_UINT (RFHoppingChannel_t, HSN, 6),
234CSN_DESCR_END (RFHoppingChannel_t)
235
236static const
237CSN_DESCR_BEGIN(MobileAllocation_or_Frequency_Short_List_t)
238 M_UNION (MobileAllocation_or_Frequency_Short_List_t, 2),
239 M_BITMAP (MobileAllocation_or_Frequency_Short_List_t, u.Frequency_Short_List, 64),
240 M_TYPE (MobileAllocation_or_Frequency_Short_List_t, u.MA, MobileAllocationIE_t),
241CSN_DESCR_END (MobileAllocation_or_Frequency_Short_List_t)
242
243static const
244CSN_DESCR_BEGIN(Channel_Description_t)
245 M_UINT (Channel_Description_t, Channel_type_and_TDMA_offset, 5),
246 M_UINT (Channel_Description_t, TN, 3),
247 M_UINT (Channel_Description_t, TSC, 3),
248
249 M_UNION (Channel_Description_t, 2),
250 M_TYPE (Channel_Description_t, u.SingleRFChannel, SingleRFChannel_t),
251 M_TYPE (Channel_Description_t, u.RFHoppingChannel, RFHoppingChannel_t),
252CSN_DESCR_END(Channel_Description_t)
253
254static const
255CSN_DESCR_BEGIN(Group_Channel_Description_t)
256 M_TYPE (Group_Channel_Description_t, Channel_Description, Channel_Description_t),
257
258 M_NEXT_EXIST (Group_Channel_Description_t, Exist_Hopping, 1),
259 M_TYPE (Group_Channel_Description_t, MA_or_Frequency_Short_List, MobileAllocation_or_Frequency_Short_List_t),
260CSN_DESCR_END (Group_Channel_Description_t)
261
262static const
263CSN_DESCR_BEGIN(Group_Call_Reference_t)
264 M_UINT (Group_Call_Reference_t, value, 27),
Anders Broman8ea3cbe2020-01-28 17:36:33 +0100265 M_UINT (Group_Call_Reference_t, SF, 1),
266 M_UINT (Group_Call_Reference_t, AF, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300267 M_UINT (Group_Call_Reference_t, call_priority, 3),
268 M_UINT (Group_Call_Reference_t, Ciphering_information, 4),
269CSN_DESCR_END (Group_Call_Reference_t)
270
271static const
272CSN_DESCR_BEGIN(Group_Call_information_t)
273 M_TYPE (Group_Call_information_t, Group_Call_Reference, Group_Call_Reference_t),
274
275 M_NEXT_EXIST (Group_Call_information_t, Exist_Group_Channel_Description, 1),
276 M_TYPE (Group_Call_information_t, Group_Channel_Description, Group_Channel_Description_t),
277CSN_DESCR_END (Group_Call_information_t)
278
279static const
280CSN_DESCR_BEGIN (P1_Rest_Octets_t)
281 M_NEXT_EXIST_LH(P1_Rest_Octets_t, Exist_NLN_PCH_and_NLN_status, 2),
282 M_UINT (P1_Rest_Octets_t, NLN_PCH, 2),
283 M_UINT (P1_Rest_Octets_t, NLN_status, 1),
284
285 M_NEXT_EXIST_LH(P1_Rest_Octets_t, Exist_Priority1, 1),
286 M_UINT (P1_Rest_Octets_t, Priority1, 3),
287
288 M_NEXT_EXIST_LH(P1_Rest_Octets_t, Exist_Priority2, 1),
289 M_UINT (P1_Rest_Octets_t, Priority2, 3),
290
291 M_NEXT_EXIST_LH(P1_Rest_Octets_t, Exist_Group_Call_information, 1),
292 M_TYPE (P1_Rest_Octets_t, Group_Call_information, Group_Call_information_t),
293
294 M_UINT_LH (P1_Rest_Octets_t, Packet_Page_Indication_1, 1),
295 M_UINT_LH (P1_Rest_Octets_t, Packet_Page_Indication_2, 1),
296CSN_DESCR_END (P1_Rest_Octets_t)
297
298static const
299CSN_DESCR_BEGIN (P2_Rest_Octets_t)
300 M_NEXT_EXIST_LH(P2_Rest_Octets_t, Exist_CN3, 1),
301 M_UINT (P2_Rest_Octets_t, CN3, 2),
302
303 M_NEXT_EXIST_LH(P2_Rest_Octets_t, Exist_NLN_and_status, 2),
304 M_UINT (P2_Rest_Octets_t, NLN, 2),
305 M_UINT (P2_Rest_Octets_t, NLN_status, 1),
306
307 M_NEXT_EXIST_LH(P2_Rest_Octets_t, Exist_Priority1, 1),
308 M_UINT (P2_Rest_Octets_t, Priority1, 3),
309
310 M_NEXT_EXIST_LH(P2_Rest_Octets_t, Exist_Priority2, 1),
311 M_UINT (P2_Rest_Octets_t, Priority2, 3),
312
313 M_NEXT_EXIST_LH(P2_Rest_Octets_t, Exist_Priority3, 1),
314 M_UINT (P2_Rest_Octets_t, Priority3, 3),
315
316 M_UINT_LH (P2_Rest_Octets_t, Packet_Page_Indication_3, 1),
317CSN_DESCR_END (P2_Rest_Octets_t)
318
319
320/* <IA Rest Octets>
321 * Note!!
322 * - first two bits skipped and frequencyparameters skipped
323 * - additions for R99 and EGPRS added
324 */
325static const
326CSN_DESCR_BEGIN(DynamicAllocation_t)
327 M_UINT (DynamicAllocation_t, USF, 3),
328 M_UINT (DynamicAllocation_t, USF_GRANULARITY, 1),
329
330 M_NEXT_EXIST (DynamicAllocation_t, Exist_P0_PR_MODE, 2),
331 M_UINT (DynamicAllocation_t, P0, 4),
332 M_UINT (DynamicAllocation_t, PR_MODE, 1),
333CSN_DESCR_END (DynamicAllocation_t)
334
335static const
336CSN_DESCR_BEGIN(EGPRS_TwoPhaseAccess_t)
337 M_NEXT_EXIST (EGPRS_TwoPhaseAccess_t, Exist_ALPHA, 1),
338 M_UINT (EGPRS_TwoPhaseAccess_t, ALPHA, 4),
339
340 M_UINT (EGPRS_TwoPhaseAccess_t, GAMMA, 5),
341 M_TYPE (EGPRS_TwoPhaseAccess_t, TBF_STARTING_TIME, StartingTime_t),
342 M_UINT (EGPRS_TwoPhaseAccess_t, NR_OF_RADIO_BLOCKS_ALLOCATED, 2),
343
344 M_NEXT_EXIST (EGPRS_TwoPhaseAccess_t, Exist_P0_BTS_PWR_CTRL_PR_MODE, 3),
345 M_UINT (EGPRS_TwoPhaseAccess_t, P0, 4),
346 M_UINT (EGPRS_TwoPhaseAccess_t, BTS_PWR_CTRL_MODE, 1),
347 M_UINT (EGPRS_TwoPhaseAccess_t, PR_MODE, 1),
348CSN_DESCR_END (EGPRS_TwoPhaseAccess_t)
349
350static const
351CSN_DESCR_BEGIN(EGPRS_OnePhaseAccess_t)
352 M_UINT (EGPRS_OnePhaseAccess_t, TFI_ASSIGNMENT, 5),
353 M_UINT (EGPRS_OnePhaseAccess_t, POLLING, 1),
354
355 M_UNION (EGPRS_OnePhaseAccess_t, 2),
356 M_TYPE (EGPRS_OnePhaseAccess_t, Allocation.DynamicAllocation, DynamicAllocation_t),
357 CSN_ERROR (EGPRS_OnePhaseAccess_t, "1 <Fixed Allocation>", CSN_ERROR_STREAM_NOT_SUPPORTED),
358
359 M_UINT (EGPRS_OnePhaseAccess_t, EGPRS_CHANNEL_CODING_COMMAND, 4),
360 M_UINT (EGPRS_OnePhaseAccess_t, TLLI_BLOCK_CHANNEL_CODING, 1),
361
362 M_NEXT_EXIST (EGPRS_OnePhaseAccess_t, Exist_BEP_PERIOD2, 1),
363 M_UINT (EGPRS_OnePhaseAccess_t, BEP_PERIOD2, 4),
364
365 M_UINT (EGPRS_OnePhaseAccess_t, RESEGMENT, 1),
366 M_UINT (EGPRS_OnePhaseAccess_t, EGPRS_WindowSize, 5),
367
368 M_NEXT_EXIST (EGPRS_OnePhaseAccess_t, Exist_ALPHA, 1),
369 M_UINT (EGPRS_OnePhaseAccess_t, ALPHA, 4),
370
371 M_UINT (EGPRS_OnePhaseAccess_t, GAMMA, 5),
372
373 M_NEXT_EXIST (EGPRS_OnePhaseAccess_t, Exist_TIMING_ADVANCE_INDEX, 1),
374 M_UINT (EGPRS_OnePhaseAccess_t, TIMING_ADVANCE_INDEX, 4),
375
376 M_NEXT_EXIST (EGPRS_OnePhaseAccess_t, Exist_TBF_STARTING_TIME, 1),
377 M_TYPE (EGPRS_OnePhaseAccess_t, TBF_STARTING_TIME, StartingTime_t),
378CSN_DESCR_END (EGPRS_OnePhaseAccess_t)
379
380static const
381CSN_DESCR_BEGIN(IA_EGPRS_00_t)
382 M_UINT (IA_EGPRS_00_t, ExtendedRA, 5),
383
384 M_REC_ARRAY (IA_EGPRS_00_t, AccessTechnologyType, NrOfAccessTechnologies, 4),
385
386 M_UNION (IA_EGPRS_00_t, 2),
387 M_TYPE (IA_EGPRS_00_t, Access.TwoPhaseAccess, EGPRS_TwoPhaseAccess_t),
388 M_TYPE (IA_EGPRS_00_t, Access.OnePhaseAccess, EGPRS_OnePhaseAccess_t),
389CSN_DESCR_END (IA_EGPRS_00_t)
390
391static const
392CSN_ChoiceElement_t IA_EGPRS_Choice[] =
393{
Pau Espin Pedrol7cce8252020-01-24 16:41:14 +0100394 {2, 0x00, 0, M_TYPE (IA_EGPRS_t, u.IA_EGPRS_PUA, IA_EGPRS_00_t)},
395 {2, 0x01, 0, CSN_ERROR(IA_EGPRS_t, "01 <IA_EGPRS>", CSN_ERROR_STREAM_NOT_SUPPORTED)},
396 {1, 0x01, 0, CSN_ERROR(IA_EGPRS_t, "1 <IA_EGPRS>", CSN_ERROR_STREAM_NOT_SUPPORTED)}
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300397};
398
399/* Please observe the double usage of UnionType element.
400 * First, it is used to store the second bit of LL/LH identification of EGPRS contents.
401 * Thereafter, UnionType will be used to store the index to detected choice.
402 */
403static const
404CSN_DESCR_BEGIN(IA_EGPRS_t)
405 M_UINT (IA_EGPRS_t, UnionType , 1 ),
406 M_CHOICE (IA_EGPRS_t, UnionType, IA_EGPRS_Choice, ElementsOf(IA_EGPRS_Choice)),
407CSN_DESCR_END (IA_EGPRS_t)
408
409static const
410CSN_DESCR_BEGIN(IA_FreqParamsBeforeTime_t)
411 M_UINT (IA_FreqParamsBeforeTime_t, Length, 6),
412 M_UINT (IA_FreqParamsBeforeTime_t, MAIO, 6),
413 M_VAR_ARRAY (IA_FreqParamsBeforeTime_t, MobileAllocation, Length, 8),
414CSN_DESCR_END (IA_FreqParamsBeforeTime_t)
415
416static const
417CSN_DESCR_BEGIN (GPRS_SingleBlockAllocation_t)
418 M_NEXT_EXIST (GPRS_SingleBlockAllocation_t, Exist_ALPHA, 1),
419 M_UINT (GPRS_SingleBlockAllocation_t, ALPHA, 4),
420
421 M_UINT (GPRS_SingleBlockAllocation_t, GAMMA, 5),
422 M_FIXED (GPRS_SingleBlockAllocation_t, 2, 0x01),
423 M_TYPE (GPRS_SingleBlockAllocation_t, TBF_STARTING_TIME, StartingTime_t), /*bit(16)*/
424
425 M_NEXT_EXIST_LH(GPRS_SingleBlockAllocation_t, Exist_P0_BTS_PWR_CTRL_PR_MODE, 3),
426 M_UINT (GPRS_SingleBlockAllocation_t, P0, 4),
427 M_UINT (GPRS_SingleBlockAllocation_t, BTS_PWR_CTRL_MODE, 1),
428 M_UINT (GPRS_SingleBlockAllocation_t, PR_MODE, 1),
429CSN_DESCR_END (GPRS_SingleBlockAllocation_t)
430
431static const
432CSN_DESCR_BEGIN (GPRS_DynamicOrFixedAllocation_t)
433 M_UINT (GPRS_DynamicOrFixedAllocation_t, TFI_ASSIGNMENT, 5),
434 M_UINT (GPRS_DynamicOrFixedAllocation_t, POLLING, 1),
435
436 M_UNION (GPRS_DynamicOrFixedAllocation_t, 2),
437 M_TYPE (GPRS_DynamicOrFixedAllocation_t, Allocation.DynamicAllocation, DynamicAllocation_t),
438 CSN_ERROR (GPRS_DynamicOrFixedAllocation_t, "1 <Fixed Allocation>", CSN_ERROR_STREAM_NOT_SUPPORTED),
439
440 M_UINT (GPRS_DynamicOrFixedAllocation_t, CHANNEL_CODING_COMMAND, 2),
441 M_UINT (GPRS_DynamicOrFixedAllocation_t, TLLI_BLOCK_CHANNEL_CODING, 1),
442
443 M_NEXT_EXIST (GPRS_DynamicOrFixedAllocation_t, Exist_ALPHA, 1),
444 M_UINT (GPRS_DynamicOrFixedAllocation_t, ALPHA, 4),
445
446 M_UINT (GPRS_DynamicOrFixedAllocation_t, GAMMA, 5),
447
448 M_NEXT_EXIST (GPRS_DynamicOrFixedAllocation_t, Exist_TIMING_ADVANCE_INDEX, 1),
449 M_UINT (GPRS_DynamicOrFixedAllocation_t, TIMING_ADVANCE_INDEX, 4),
450
451 M_NEXT_EXIST (GPRS_DynamicOrFixedAllocation_t, Exist_TBF_STARTING_TIME, 1),
452 M_TYPE (GPRS_DynamicOrFixedAllocation_t, TBF_STARTING_TIME, StartingTime_t),
453CSN_DESCR_END (GPRS_DynamicOrFixedAllocation_t)
454
455static const
456CSN_DESCR_BEGIN(PU_IA_AdditionsR99_t)
457 M_NEXT_EXIST (PU_IA_AdditionsR99_t, Exist_ExtendedRA, 1),
458 M_UINT (PU_IA_AdditionsR99_t, ExtendedRA, 5),
459CSN_DESCR_END (PU_IA_AdditionsR99_t)
460
461static const
462CSN_DESCR_BEGIN (Packet_Uplink_ImmAssignment_t)
463 M_UNION (Packet_Uplink_ImmAssignment_t, 2),
464 M_TYPE (Packet_Uplink_ImmAssignment_t, Access.SingleBlockAllocation, GPRS_SingleBlockAllocation_t),
465 M_TYPE (Packet_Uplink_ImmAssignment_t, Access.DynamicOrFixedAllocation, GPRS_DynamicOrFixedAllocation_t),
466
467 M_NEXT_EXIST_OR_NULL_LH(Packet_Uplink_ImmAssignment_t, Exist_AdditionsR99, 1),
468 M_TYPE (Packet_Uplink_ImmAssignment_t, AdditionsR99, PU_IA_AdditionsR99_t),
469CSN_DESCR_END (Packet_Uplink_ImmAssignment_t)
470
471static const
472CSN_DESCR_BEGIN(PD_IA_AdditionsR99_t)
473 M_UINT (PD_IA_AdditionsR99_t, EGPRS_WindowSize, 5),
474 M_UINT (PD_IA_AdditionsR99_t, LINK_QUALITY_MEASUREMENT_MODE, 2),
475
476 M_NEXT_EXIST (PD_IA_AdditionsR99_t, Exist_BEP_PERIOD2, 1),
477 M_UINT (PD_IA_AdditionsR99_t, BEP_PERIOD2, 4),
478CSN_DESCR_END (PD_IA_AdditionsR99_t)
479
480static const
481CSN_DESCR_BEGIN(Packet_Downlink_ImmAssignment_t)
482 M_UINT (Packet_Downlink_ImmAssignment_t, TLLI, 32),
483
484 M_NEXT_EXIST (Packet_Downlink_ImmAssignment_t, Exist_TFI_to_TA_VALID, 6 + 1),
485 M_UINT (Packet_Downlink_ImmAssignment_t, TFI_ASSIGNMENT, 5),
486 M_UINT (Packet_Downlink_ImmAssignment_t, RLC_MODE, 1),
487 M_NEXT_EXIST (Packet_Downlink_ImmAssignment_t, Exist_ALPHA, 1),
488 M_UINT (Packet_Downlink_ImmAssignment_t, ALPHA, 4),
489 M_UINT (Packet_Downlink_ImmAssignment_t, GAMMA, 5),
490 M_UINT (Packet_Downlink_ImmAssignment_t, POLLING, 1),
491 M_UINT (Packet_Downlink_ImmAssignment_t, TA_VALID, 1),
492
493 M_NEXT_EXIST (Packet_Downlink_ImmAssignment_t, Exist_TIMING_ADVANCE_INDEX, 1),
494 M_UINT (Packet_Downlink_ImmAssignment_t, TIMING_ADVANCE_INDEX, 4),
495
496 M_NEXT_EXIST (Packet_Downlink_ImmAssignment_t, Exist_TBF_STARTING_TIME, 1),
497 M_TYPE (Packet_Downlink_ImmAssignment_t, TBF_STARTING_TIME, StartingTime_t),
498
499 M_NEXT_EXIST (Packet_Downlink_ImmAssignment_t, Exist_P0_PR_MODE, 3),
500 M_UINT (Packet_Downlink_ImmAssignment_t, P0, 4),
501 M_UINT (Packet_Downlink_ImmAssignment_t, BTS_PWR_CTRL_MODE, 1),
502 M_UINT (Packet_Downlink_ImmAssignment_t, PR_MODE, 1),
503
504 M_NEXT_EXIST_OR_NULL_LH(Packet_Downlink_ImmAssignment_t, Exist_AdditionsR99, 1),
505 M_TYPE (Packet_Downlink_ImmAssignment_t, AdditionsR99, PD_IA_AdditionsR99_t),
506CSN_DESCR_END (Packet_Downlink_ImmAssignment_t)
507
508static const
509CSN_DESCR_BEGIN (Second_Part_Packet_Assignment_t)
510 M_NEXT_EXIST_OR_NULL_LH(Second_Part_Packet_Assignment_t, Exist_SecondPart, 2),
511 M_NEXT_EXIST (Second_Part_Packet_Assignment_t, Exist_ExtendedRA, 1),
512 M_UINT (Second_Part_Packet_Assignment_t, ExtendedRA, 5),
513CSN_DESCR_END (Second_Part_Packet_Assignment_t)
514
515static const
516CSN_DESCR_BEGIN(IA_PacketAssignment_UL_DL_t)
517 M_UNION (IA_PacketAssignment_UL_DL_t, 2),
518 M_TYPE (IA_PacketAssignment_UL_DL_t, ul_dl.Packet_Uplink_ImmAssignment, Packet_Uplink_ImmAssignment_t),
519 M_TYPE (IA_PacketAssignment_UL_DL_t, ul_dl.Packet_Downlink_ImmAssignment, Packet_Downlink_ImmAssignment_t),
520CSN_DESCR_END (IA_PacketAssignment_UL_DL_t)
521
522static const
523CSN_DESCR_BEGIN(IA_PacketAssignment_t)
524 M_UNION (IA_PacketAssignment_t, 2),
525 M_TYPE (IA_PacketAssignment_t, u.UplinkDownlinkAssignment, IA_PacketAssignment_UL_DL_t),
526 M_TYPE (IA_PacketAssignment_t, u.UplinkDownlinkAssignment, Second_Part_Packet_Assignment_t),
527CSN_DESCR_END (IA_PacketAssignment_t)
528
529/* <Packet Polling Request> */
530static const
531CSN_ChoiceElement_t PacketPollingID[] =
532{
Pau Espin Pedrol7cce8252020-01-24 16:41:14 +0100533 {1, 0, 0, M_TYPE(PacketPollingID_t, u.Global_TFI, Global_TFI_t)},
534 {2, 0x02, 0, M_UINT(PacketPollingID_t, u.TLLI, 32)},
535 {3, 0x06, 0, M_UINT(PacketPollingID_t, u.TQI, 16)},
536/*{3, 0x07 , 0, M_TYPE(PacketUplinkID_t, u.Packet_Request_Reference, Packet_Request_Reference_t)},*/
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300537};
538
539static const
540CSN_DESCR_BEGIN(PacketPollingID_t)
541 M_CHOICE (PacketPollingID_t, UnionType, PacketPollingID, ElementsOf(PacketPollingID)),
542CSN_DESCR_END (PacketPollingID_t)
543
544static const
545CSN_DESCR_BEGIN(Packet_Polling_Request_t)
546 M_UINT (Packet_Polling_Request_t, MESSAGE_TYPE, 6),
547 M_UINT (Packet_Polling_Request_t, PAGE_MODE, 2),
548 M_TYPE (Packet_Polling_Request_t, ID, PacketPollingID_t),
Anders Broman8ea3cbe2020-01-28 17:36:33 +0100549 M_UINT (Packet_Polling_Request_t, TYPE_OF_ACK, 1),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400550 M_PADDING_BITS(Packet_Polling_Request_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300551CSN_DESCR_END (Packet_Polling_Request_t)
552
553static const
554CSN_DESCR_BEGIN(MobileAllocation_t)
555 M_UINT_OFFSET(MobileAllocation_t, MA_BitLength, 6, 1),
556 M_VAR_BITMAP (MobileAllocation_t, MA_BITMAP, MA_BitLength, 0),
557CSN_DESCR_END (MobileAllocation_t)
558
559static const
560CSN_DESCR_BEGIN(ARFCN_index_list_t)
561 M_REC_ARRAY (ARFCN_index_list_t, ARFCN_INDEX, ElementsOf_ARFCN_INDEX, 6),
562CSN_DESCR_END (ARFCN_index_list_t)
563
564static const
565CSN_DESCR_BEGIN(GPRS_Mobile_Allocation_t)
566 M_UINT (GPRS_Mobile_Allocation_t, HSN, 6),
567 M_REC_ARRAY (GPRS_Mobile_Allocation_t, RFL_NUMBER, ElementsOf_RFL_NUMBER, 4),
568 M_UNION (GPRS_Mobile_Allocation_t, 2),
569 M_TYPE (GPRS_Mobile_Allocation_t, u.MA, MobileAllocation_t),
570 M_TYPE (GPRS_Mobile_Allocation_t, u.ARFCN_index_list, ARFCN_index_list_t),
571CSN_DESCR_END (GPRS_Mobile_Allocation_t)
572
573/*< SI 13 Rest Octets >*/
574static const
575CSN_DESCR_BEGIN (Extension_Bits_t)
576 M_UINT_OFFSET (Extension_Bits_t, extension_length, 6, 1),
577 M_LEFT_VAR_BMP(Extension_Bits_t, Extension_Info, extension_length, 0),
578CSN_DESCR_END (Extension_Bits_t)
579
580static const
581CSN_DESCR_BEGIN(GPRS_Cell_Options_t)
582 M_UINT (GPRS_Cell_Options_t, NMO, 2),
Pascal Quantin29248d62020-01-28 17:13:17 +0100583 M_UINT (GPRS_Cell_Options_t, T3168, 3),
584 M_UINT (GPRS_Cell_Options_t, T3192, 3),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300585 M_UINT (GPRS_Cell_Options_t, DRX_TIMER_MAX, 3),
Anders Broman8ea3cbe2020-01-28 17:36:33 +0100586 M_UINT (GPRS_Cell_Options_t, ACCESS_BURST_TYPE, 1),
587 M_UINT (GPRS_Cell_Options_t, CONTROL_ACK_TYPE, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300588 M_UINT (GPRS_Cell_Options_t, BS_CV_MAX, 4),
589
590 M_NEXT_EXIST (GPRS_Cell_Options_t, Exist_PAN, 3),
591 M_UINT (GPRS_Cell_Options_t, PAN_DEC, 3),
592 M_UINT (GPRS_Cell_Options_t, PAN_INC, 3),
593 M_UINT (GPRS_Cell_Options_t, PAN_MAX, 3),
594
595 M_NEXT_EXIST (GPRS_Cell_Options_t, Exist_Extension_Bits, 1),
596 M_TYPE (GPRS_Cell_Options_t, Extension_Bits, Extension_Bits_t),
597CSN_DESCR_END (GPRS_Cell_Options_t)
598
599static const
600CSN_DESCR_BEGIN(PBCCH_Not_present_t)
601 M_UINT (PBCCH_Not_present_t, RAC, 8),
Anders Broman8ea3cbe2020-01-28 17:36:33 +0100602 M_UINT (PBCCH_Not_present_t, SPGC_CCCH_SUP, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300603 M_UINT (PBCCH_Not_present_t, PRIORITY_ACCESS_THR, 3),
604 M_UINT (PBCCH_Not_present_t, NETWORK_CONTROL_ORDER, 2),
605 M_TYPE (PBCCH_Not_present_t, GPRS_Cell_Options, GPRS_Cell_Options_t),
606 M_TYPE (PBCCH_Not_present_t, GPRS_Power_Control_Parameters, GPRS_Power_Control_Parameters_t),
607CSN_DESCR_END (PBCCH_Not_present_t)
608
609static const
610CSN_ChoiceElement_t SI13_PBCCH_Description_Channel[] =
611{/* this one is used in SI13*/
Pau Espin Pedrol7cce8252020-01-24 16:41:14 +0100612 {2, 0x00, 0, M_NULL(PBCCH_Description_t, u.dummy, 0)},/*Default to BCCH carrier*/
613 {2, 0x01, 0, M_UINT(PBCCH_Description_t, u.ARFCN, 10)},
614 {1, 0x01, 0, M_UINT(PBCCH_Description_t, u.MAIO, 6)},
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300615};
616
617static const
618CSN_DESCR_BEGIN(PBCCH_Description_t)/*SI13*/
619 M_UINT (PBCCH_Description_t, Pb, 4),
620 M_UINT (PBCCH_Description_t, TSC, 3),
621 M_UINT (PBCCH_Description_t, TN, 3),
622
623 M_CHOICE (PBCCH_Description_t, UnionType, SI13_PBCCH_Description_Channel, ElementsOf(SI13_PBCCH_Description_Channel)),
624CSN_DESCR_END (PBCCH_Description_t)
625
626static const
627CSN_DESCR_BEGIN(PBCCH_present_t)
628 M_UINT (PBCCH_present_t, PSI1_REPEAT_PERIOD, 4),
629 M_TYPE (PBCCH_present_t, PBCCH_Description, PBCCH_Description_t),
630CSN_DESCR_END (PBCCH_present_t)
631
632static const
633CSN_DESCR_BEGIN(SI13_AdditionsR6)
634 M_NEXT_EXIST (SI13_AdditionsR6, Exist_LB_MS_TXPWR_MAX_CCH, 1),
635 M_UINT (SI13_AdditionsR6, LB_MS_TXPWR_MAX_CCH, 5),
636 M_UINT (SI13_AdditionsR6, SI2n_SUPPORT, 2),
637CSN_DESCR_END (SI13_AdditionsR6)
638
639static const
640CSN_DESCR_BEGIN(SI13_AdditionsR4)
641 M_UINT (SI13_AdditionsR4, SI_STATUS_IND, 1),
642 M_NEXT_EXIST_OR_NULL_LH (SI13_AdditionsR4, Exist_AdditionsR6, 1),
643 M_TYPE (SI13_AdditionsR4, AdditionsR6, SI13_AdditionsR6),
644CSN_DESCR_END (SI13_AdditionsR4)
645
646static const
647CSN_DESCR_BEGIN(SI13_AdditionR99)
648 M_UINT (SI13_AdditionR99, SGSNR, 1),
649 M_NEXT_EXIST_OR_NULL_LH (SI13_AdditionR99, Exist_AdditionsR4, 1),
650 M_TYPE (SI13_AdditionR99, AdditionsR4, SI13_AdditionsR4),
651CSN_DESCR_END (SI13_AdditionR99)
652
653static const
654CSN_DESCR_BEGIN (SI_13_t)
655 M_THIS_EXIST_LH (SI_13_t),
656
657 M_UINT (SI_13_t, BCCH_CHANGE_MARK, 3),
658 M_UINT (SI_13_t, SI_CHANGE_FIELD, 4),
659
660 M_NEXT_EXIST (SI_13_t, Exist_MA, 2),
661 M_UINT (SI_13_t, SI13_CHANGE_MARK, 2),
662 M_TYPE (SI_13_t, GPRS_Mobile_Allocation, GPRS_Mobile_Allocation_t),
663
664 M_UNION (SI_13_t, 2),
665 M_TYPE (SI_13_t, u.PBCCH_Not_present, PBCCH_Not_present_t),
666 M_TYPE (SI_13_t, u.PBCCH_present, PBCCH_present_t),
667
668 M_NEXT_EXIST_OR_NULL_LH(SI_13_t, Exist_AdditionsR99, 1),
669 M_TYPE (SI_13_t, AdditionsR99, SI13_AdditionR99),
670CSN_DESCR_END (SI_13_t)
671
672/************************************************************/
673/* TS 44.060 messages */
674/************************************************************/
675
676/*< Packet TBF Release message content >*/
677static const
678CSN_DESCR_BEGIN(Packet_TBF_Release_t)
679 M_UINT (Packet_TBF_Release_t, MESSAGE_TYPE, 6),
680 M_UINT (Packet_TBF_Release_t, PAGE_MODE, 2),
681 M_FIXED (Packet_TBF_Release_t, 1, 0x00),
682 M_TYPE (Packet_TBF_Release_t, Global_TFI, Global_TFI_t),
Anders Broman8ea3cbe2020-01-28 17:36:33 +0100683 M_UINT (Packet_TBF_Release_t, UPLINK_RELEASE, 1),
684 M_UINT (Packet_TBF_Release_t, DOWNLINK_RELEASE, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300685 M_UINT (Packet_TBF_Release_t, TBF_RELEASE_CAUSE, 4),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400686 M_PADDING_BITS(Packet_TBF_Release_t ),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300687CSN_DESCR_END (Packet_TBF_Release_t)
688
689/*< Packet Control Acknowledgement message content >*/
690
691static const
692CSN_DESCR_BEGIN (Packet_Control_Acknowledgement_AdditionsR6_t)
693 M_NEXT_EXIST (Packet_Control_Acknowledgement_AdditionsR6_t, Exist_CTRL_ACK_Extension, 1),
694 M_UINT (Packet_Control_Acknowledgement_AdditionsR6_t, CTRL_ACK_Extension, 9),
695CSN_DESCR_END (Packet_Control_Acknowledgement_AdditionsR6_t)
696
697static const
698CSN_DESCR_BEGIN (Packet_Control_Acknowledgement_AdditionsR5_t)
699 M_NEXT_EXIST (Packet_Control_Acknowledgement_AdditionsR5_t, Exist_TN_RRBP, 1),
700 M_UINT (Packet_Control_Acknowledgement_AdditionsR5_t, TN_RRBP, 3),
701 M_NEXT_EXIST (Packet_Control_Acknowledgement_AdditionsR5_t, Exist_G_RNTI_Extension, 1),
702 M_UINT (Packet_Control_Acknowledgement_AdditionsR5_t, G_RNTI_Extension, 4),
703
704 M_NEXT_EXIST_OR_NULL (Packet_Control_Acknowledgement_AdditionsR5_t, Exist_AdditionsR6, 1),
705 M_TYPE (Packet_Control_Acknowledgement_AdditionsR5_t, AdditionsR6, Packet_Control_Acknowledgement_AdditionsR6_t),
706CSN_DESCR_END (Packet_Control_Acknowledgement_AdditionsR5_t)
707
708static const
709CSN_DESCR_BEGIN (Packet_Control_Acknowledgement_t)
710 M_UINT (Packet_Control_Acknowledgement_t, PayloadType, 2),
711 M_UINT (Packet_Control_Acknowledgement_t, spare, 5),
712 M_BIT (Packet_Control_Acknowledgement_t, R),
713
714 M_UINT (Packet_Control_Acknowledgement_t, MESSAGE_TYPE, 6),
715 M_UINT (Packet_Control_Acknowledgement_t, TLLI, 32),
716 M_UINT (Packet_Control_Acknowledgement_t, CTRL_ACK, 2),
717 M_NEXT_EXIST_OR_NULL (Packet_Control_Acknowledgement_t, Exist_AdditionsR5, 1),
718 M_TYPE (Packet_Control_Acknowledgement_t, AdditionsR5, Packet_Control_Acknowledgement_AdditionsR5_t),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400719 M_PADDING_BITS (Packet_Control_Acknowledgement_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300720CSN_DESCR_END (Packet_Control_Acknowledgement_t)
721
722/*< Packet Downlink Dummy Control Block message content >*/
723static const
724CSN_DESCR_BEGIN(Packet_Downlink_Dummy_Control_Block_t)
725 M_UINT (Packet_Downlink_Dummy_Control_Block_t, MESSAGE_TYPE, 6),
726 M_UINT (Packet_Downlink_Dummy_Control_Block_t, PAGE_MODE, 2),
727
728 M_NEXT_EXIST (Packet_Downlink_Dummy_Control_Block_t, Exist_PERSISTENCE_LEVEL, 1),
729 M_UINT_ARRAY (Packet_Downlink_Dummy_Control_Block_t, PERSISTENCE_LEVEL, 4, 4),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400730 M_PADDING_BITS(Packet_Downlink_Dummy_Control_Block_t ),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300731CSN_DESCR_END (Packet_Downlink_Dummy_Control_Block_t)
732
733/*< Packet Uplink Dummy Control Block message content >*/
734static const
735CSN_DESCR_BEGIN(Packet_Uplink_Dummy_Control_Block_t)
736 M_UINT (Packet_Uplink_Dummy_Control_Block_t, PayloadType, 2),
737 M_UINT (Packet_Uplink_Dummy_Control_Block_t, spare, 5),
738 M_BIT (Packet_Uplink_Dummy_Control_Block_t, R),
739
740 M_UINT (Packet_Uplink_Dummy_Control_Block_t, MESSAGE_TYPE, 6),
741 M_UINT (Packet_Uplink_Dummy_Control_Block_t, TLLI, 32),
742/*M_FIXED (Packet_Uplink_Dummy_Control_Block_t, 1, 0),*/
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400743 M_PADDING_BITS(Packet_Uplink_Dummy_Control_Block_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300744CSN_DESCR_END (Packet_Uplink_Dummy_Control_Block_t)
745
746static const
747CSN_DESCR_BEGIN(Receive_N_PDU_Number_t)
748 M_UINT (Receive_N_PDU_Number_t, nsapi, 4),
749 M_UINT (Receive_N_PDU_Number_t, value, 8),
750CSN_DESCR_END (Receive_N_PDU_Number_t)
751
Vadim Yanitskiy39a65052020-01-25 01:24:59 +0700752gint16 Receive_N_PDU_Number_list_Dissector(csnStream_t* ar, bitvec *vector, unsigned *readIndex, void* data)
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300753{
754 if (ar->direction == 0)
755 {
756 return csnStreamEncoder(ar, CSNDESCR(Receive_N_PDU_Number_t), vector, readIndex, data);
757 }
758 else
759 {
760 return csnStreamDecoder(ar, CSNDESCR(Receive_N_PDU_Number_t), vector, readIndex, data);
761 }
762}
763
764static const
765CSN_DESCR_BEGIN(Receive_N_PDU_Number_list_t)
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400766 M_SERIALIZE (Receive_N_PDU_Number_list_t, IEI, 7, Receive_N_PDU_Number_list_Dissector),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300767 M_VAR_TARRAY (Receive_N_PDU_Number_list_t, Receive_N_PDU_Number, Receive_N_PDU_Number_t, Count_Receive_N_PDU_Number),
768CSN_DESCR_END (Receive_N_PDU_Number_list_t)
769
770/*< MS Radio Access capability IE >*/
771static const
772CSN_DESCR_BEGIN (DTM_EGPRS_t)
773 M_NEXT_EXIST (DTM_EGPRS_t, Exist_DTM_EGPRS_multislot_class, 1),
774 M_UINT (DTM_EGPRS_t, DTM_EGPRS_multislot_class, 2),
775CSN_DESCR_END (DTM_EGPRS_t)
776
777static const
778CSN_DESCR_BEGIN (DTM_EGPRS_HighMultislotClass_t)
779 M_NEXT_EXIST (DTM_EGPRS_HighMultislotClass_t, Exist_DTM_EGPRS_HighMultislotClass, 1),
780 M_UINT (DTM_EGPRS_HighMultislotClass_t, DTM_EGPRS_HighMultislotClass, 3),
781CSN_DESCR_END (DTM_EGPRS_HighMultislotClass_t)
782
783static const
Vincent Helfre1145fd22020-01-28 18:27:49 +0100784CSN_DESCR_BEGIN (DownlinkDualCarrierCapability_r7_t)
785 M_NEXT_EXIST (DownlinkDualCarrierCapability_r7_t, MultislotCapabilityReductionForDL_DualCarrier, 1),
786 M_UINT (DownlinkDualCarrierCapability_r7_t, DL_DualCarrierForDTM, 3),
787CSN_DESCR_END (DownlinkDualCarrierCapability_r7_t)
788
789static const
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300790CSN_DESCR_BEGIN (Multislot_capability_t)
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400791 M_NEXT_EXIST_OR_NULL(Multislot_capability_t, Exist_HSCSD_multislot_class, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300792 M_UINT (Multislot_capability_t, HSCSD_multislot_class, 5),
793
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400794 M_NEXT_EXIST_OR_NULL(Multislot_capability_t, Exist_GPRS_multislot_class, 2),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300795 M_UINT (Multislot_capability_t, GPRS_multislot_class, 5),
796 M_UINT (Multislot_capability_t, GPRS_Extended_Dynamic_Allocation_Capability, 1),
797
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400798 M_NEXT_EXIST_OR_NULL(Multislot_capability_t, Exist_SM, 2),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300799 M_UINT (Multislot_capability_t, SMS_VALUE, 4),
800 M_UINT (Multislot_capability_t, SM_VALUE, 4),
801
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400802 M_NEXT_EXIST_OR_NULL(Multislot_capability_t, Exist_ECSD_multislot_class, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300803 M_UINT (Multislot_capability_t, ECSD_multislot_class, 5),
804
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400805 M_NEXT_EXIST_OR_NULL(Multislot_capability_t, Exist_EGPRS_multislot_class, 2),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300806 M_UINT (Multislot_capability_t, EGPRS_multislot_class, 5),
807 M_UINT (Multislot_capability_t, EGPRS_Extended_Dynamic_Allocation_Capability, 1),
808
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400809 M_NEXT_EXIST_OR_NULL(Multislot_capability_t, Exist_DTM_GPRS_multislot_class, 3),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300810 M_UINT (Multislot_capability_t, DTM_GPRS_multislot_class, 2),
811 M_UINT (Multislot_capability_t, Single_Slot_DTM, 1),
812 M_TYPE (Multislot_capability_t, DTM_EGPRS_Params, DTM_EGPRS_t),
813CSN_DESCR_END (Multislot_capability_t)
814
815static const
816CSN_DESCR_BEGIN (Content_t)
817 M_UINT (Content_t, RF_Power_Capability, 3),
818
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400819 M_NEXT_EXIST_OR_NULL(Content_t, Exist_A5_bits, 1),
820 M_UINT_OR_NULL (Content_t, A5_bits, 7),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300821
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400822 M_UINT_OR_NULL (Content_t, ES_IND, 1),
823 M_UINT_OR_NULL (Content_t, PS, 1),
824 M_UINT_OR_NULL (Content_t, VGCS, 1),
825 M_UINT_OR_NULL (Content_t, VBS, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300826
827 M_NEXT_EXIST_OR_NULL(Content_t, Exist_Multislot_capability, 1),
828 M_TYPE (Content_t, Multislot_capability, Multislot_capability_t),
829
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400830 M_NEXT_EXIST_OR_NULL(Content_t, Exist_Eight_PSK_Power_Capability, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300831 M_UINT (Content_t, Eight_PSK_Power_Capability, 2),
832
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400833 M_UINT_OR_NULL (Content_t, COMPACT_Interference_Measurement_Capability, 1),
834 M_UINT_OR_NULL (Content_t, Revision_Level_Indicator, 1),
835 M_UINT_OR_NULL (Content_t, UMTS_FDD_Radio_Access_Technology_Capability, 1),
836 M_UINT_OR_NULL (Content_t, UMTS_384_TDD_Radio_Access_Technology_Capability, 1),
837 M_UINT_OR_NULL (Content_t, CDMA2000_Radio_Access_Technology_Capability, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300838
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400839 M_UINT_OR_NULL (Content_t, UMTS_128_TDD_Radio_Access_Technology_Capability, 1),
840 M_UINT_OR_NULL (Content_t, GERAN_Feature_Package_1, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300841
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400842 M_NEXT_EXIST_OR_NULL(Content_t, Exist_Extended_DTM_multislot_class, 2),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300843 M_UINT (Content_t, Extended_DTM_GPRS_multislot_class, 2),
844 M_UINT (Content_t, Extended_DTM_EGPRS_multislot_class, 2),
845
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400846 M_UINT_OR_NULL (Content_t, Modulation_based_multislot_class_support, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300847
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400848 M_NEXT_EXIST_OR_NULL(Content_t, Exist_HighMultislotCapability, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300849 M_UINT (Content_t, HighMultislotCapability, 2),
850
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400851 M_NEXT_EXIST_OR_NULL(Content_t, Exist_GERAN_lu_ModeCapability, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300852 M_UINT (Content_t, GERAN_lu_ModeCapability, 4),
853
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400854 M_UINT_OR_NULL (Content_t, GMSK_MultislotPowerProfile, 2),
855 M_UINT_OR_NULL (Content_t, EightPSK_MultislotProfile, 2),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300856
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400857 M_UINT_OR_NULL (Content_t, MultipleTBF_Capability, 1),
858 M_UINT_OR_NULL (Content_t, DownlinkAdvancedReceiverPerformance, 2),
859 M_UINT_OR_NULL (Content_t, ExtendedRLC_MAC_ControlMessageSegmentionsCapability, 1),
860 M_UINT_OR_NULL (Content_t, DTM_EnhancementsCapability, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300861
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400862 M_NEXT_EXIST_OR_NULL(Content_t, Exist_DTM_GPRS_HighMultislotClass, 2),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300863 M_UINT (Content_t, DTM_GPRS_HighMultislotClass, 3),
864 M_TYPE (Content_t, DTM_EGPRS_HighMultislotClass, DTM_EGPRS_HighMultislotClass_t),
865
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400866 M_UINT_OR_NULL (Content_t, PS_HandoverCapability, 1),
Vincent Helfre1145fd22020-01-28 18:27:49 +0100867
868 /* additions in release 7 */
869 M_UINT_OR_NULL (Content_t, DTM_Handover_Capability, 1),
870 M_NEXT_EXIST_OR_NULL(Content_t, Exist_DownlinkDualCarrierCapability_r7, 1),
871 M_TYPE (Content_t, DownlinkDualCarrierCapability_r7, DownlinkDualCarrierCapability_r7_t),
872
873 M_UINT_OR_NULL (Content_t, FlexibleTimeslotAssignment, 1),
874 M_UINT_OR_NULL (Content_t, GAN_PS_HandoverCapability, 1),
875 M_UINT_OR_NULL (Content_t, RLC_Non_persistentMode, 1),
876 M_UINT_OR_NULL (Content_t, ReducedLatencyCapability, 1),
877 M_UINT_OR_NULL (Content_t, UplinkEGPRS2, 2),
878 M_UINT_OR_NULL (Content_t, DownlinkEGPRS2, 2),
879
880 /* additions in release 8 */
881 M_UINT_OR_NULL (Content_t, EUTRA_FDD_Support, 1),
882 M_UINT_OR_NULL (Content_t, EUTRA_TDD_Support, 1),
883 M_UINT_OR_NULL (Content_t, GERAN_To_EUTRAN_supportInGERAN_PTM, 2),
884 M_UINT_OR_NULL (Content_t, PriorityBasedReselectionSupport, 1),
885
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300886CSN_DESCR_END (Content_t)
887
Vadim Yanitskiy39a65052020-01-25 01:24:59 +0700888gint16 Content_Dissector(csnStream_t* ar, bitvec *vector, unsigned *readIndex, void* data)
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300889{
890 if (ar->direction == 0)
891 {
892 return csnStreamEncoder(ar, CSNDESCR(Content_t), vector, readIndex, data);
893 }
894 else
895 {
896 return csnStreamDecoder(ar, CSNDESCR(Content_t), vector, readIndex, data);
897 }
898}
899
900static const
901CSN_DESCR_BEGIN (Additional_access_technologies_struct_t)
902 M_UINT (Additional_access_technologies_struct_t, Access_Technology_Type, 4),
903 M_UINT (Additional_access_technologies_struct_t, GMSK_Power_class, 3),
904 M_UINT (Additional_access_technologies_struct_t, Eight_PSK_Power_class, 2),
905CSN_DESCR_END (Additional_access_technologies_struct_t)
906
907static const
908CSN_DESCR_BEGIN (Additional_access_technologies_t)
Pau Espin Pedrol81b40cb2020-03-23 15:23:51 +0100909 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 +0300910CSN_DESCR_END (Additional_access_technologies_t)
911
Vadim Yanitskiy39a65052020-01-25 01:24:59 +0700912gint16 Additional_access_technologies_Dissector(csnStream_t* ar, bitvec* vector, unsigned *readIndex, void* data)
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300913{
914 if (ar->direction == 0)
915 {
916 return csnStreamEncoder(ar, CSNDESCR(Additional_access_technologies_t), vector, readIndex, data);
917 }
918 else
919 {
920 return csnStreamDecoder(ar, CSNDESCR(Additional_access_technologies_t), vector, readIndex, data);
921 }
922}
923
924static const
925CSN_ChoiceElement_t MS_RA_capability_value_Choice[] =
926{
Pau Espin Pedrol7cce8252020-01-24 16:41:14 +0100927 {4, AccTech_GSMP, 0, M_SERIALIZE (MS_RA_capability_value_t, u.Content, 7, Content_Dissector)}, /* Long Form */
928 {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 +0100929 {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 +0100930 {4, AccTech_GSM1800, 0, M_SERIALIZE (MS_RA_capability_value_t, u.Content, 7, Content_Dissector)}, /* Long Form */
931 {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 +0100932 {4, AccTech_GSM450, 0, M_SERIALIZE (MS_RA_capability_value_t, u.Content, 7, Content_Dissector)}, /* Long Form */
933 {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 +0100934 {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 +0100935 {4, AccTech_GSM750, 0, M_SERIALIZE (MS_RA_capability_value_t, u.Content, 7, Content_Dissector)}, /* Long Form */
936 {4, AccTech_GSMT830, 0, M_SERIALIZE (MS_RA_capability_value_t, u.Content, 7, Content_Dissector)}, /* Long Form */
937 {4, AccTech_GSMT410, 0, M_SERIALIZE (MS_RA_capability_value_t, u.Content, 7, Content_Dissector)}, /* Long Form */
938 {4, AccTech_GSMT900, 0, M_SERIALIZE (MS_RA_capability_value_t, u.Content, 7, Content_Dissector)}, /* Long Form */
939 {4, AccTech_GSM710, 0, M_SERIALIZE (MS_RA_capability_value_t, u.Content, 7, Content_Dissector)}, /* Long Form */
940 {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 +0100941 {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 +0300942};
943
944static const
945CSN_DESCR_BEGIN(MS_RA_capability_value_t)
946 M_CHOICE (MS_RA_capability_value_t, IndexOfAccTech, MS_RA_capability_value_Choice, ElementsOf(MS_RA_capability_value_Choice)),
947CSN_DESCR_END (MS_RA_capability_value_t)
948
949static const
950CSN_DESCR_BEGIN (MS_Radio_Access_capability_t)
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),
Pau Espin Pedrole50ce6e2020-03-23 18:49:16 +0100952 M_PADDING_BITS(MS_Radio_Access_capability_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300953CSN_DESCR_END (MS_Radio_Access_capability_t)
954
Pau Espin Pedrole50ce6e2020-03-23 18:49:16 +0100955/* TS44.060 section 12.30 "MS Radio Access Capability 2". Same as above but without spare bits */
956static const
957CSN_DESCR_BEGIN (MS_Radio_Access_capability2_t)
958 M_REC_TARRAY_1(MS_Radio_Access_capability_t, MS_RA_capability_value, MS_RA_capability_value_t, Count_MS_RA_capability_value),
959CSN_DESCR_END (MS_Radio_Access_capability2_t)
960
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300961/*< MS Classmark 3 IE >*/
962static const
963CSN_DESCR_BEGIN(ARC_t)
964 M_UINT (ARC_t, A5_Bits, 4),
965 M_UINT (ARC_t, Arc2_Spare, 4),
966 M_UINT (ARC_t, Arc1, 4),
967CSN_DESCR_END (ARC_t)
968
969static const
970CSN_ChoiceElement_t MultibandChoice[] =
971{
Pau Espin Pedrol7cce8252020-01-24 16:41:14 +0100972 {3, 0x00, 0, M_UINT(Multiband_t, u.A5_Bits, 4)},
973 {3, 0x05, 0, M_TYPE(Multiband_t, u.ARC, ARC_t)},
974 {3, 0x06, 0, M_TYPE(Multiband_t, u.ARC, ARC_t)},
975 {3, 0x01, 0, M_TYPE(Multiband_t, u.ARC, ARC_t)},
976 {3, 0x02, 0, M_TYPE(Multiband_t, u.ARC, ARC_t)},
977 {3, 0x04, 0, M_TYPE(Multiband_t, u.ARC, ARC_t)},
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300978};
979
980static const
981CSN_DESCR_BEGIN(Multiband_t)
982 M_CHOICE (Multiband_t, Multiband, MultibandChoice, ElementsOf(MultibandChoice)),
983CSN_DESCR_END (Multiband_t)
984
985static const
986CSN_DESCR_BEGIN(EDGE_RF_Pwr_t)
987 M_NEXT_EXIST (EDGE_RF_Pwr_t, ExistEDGE_RF_PwrCap1, 1),
988 M_UINT (EDGE_RF_Pwr_t, EDGE_RF_PwrCap1, 2),
989
990 M_NEXT_EXIST (EDGE_RF_Pwr_t, ExistEDGE_RF_PwrCap2, 1),
991 M_UINT (EDGE_RF_Pwr_t, EDGE_RF_PwrCap2, 2),
992CSN_DESCR_END (EDGE_RF_Pwr_t)
993
994static const
995CSN_DESCR_BEGIN(MS_Class3_Unpacked_t)
996 M_UINT (MS_Class3_Unpacked_t, Spare1, 1),
997 M_TYPE (MS_Class3_Unpacked_t, Multiband, Multiband_t),
998
999 M_NEXT_EXIST (MS_Class3_Unpacked_t, Exist_R_Support, 1),
1000 M_UINT (MS_Class3_Unpacked_t, R_GSM_Arc, 3),
1001
1002 M_NEXT_EXIST (MS_Class3_Unpacked_t, Exist_MultiSlotCapability, 1),
1003 M_UINT (MS_Class3_Unpacked_t, MultiSlotClass, 5),
1004
1005 M_UINT (MS_Class3_Unpacked_t, UCS2, 1),
1006 M_UINT (MS_Class3_Unpacked_t, ExtendedMeasurementCapability, 1),
1007
1008 M_NEXT_EXIST (MS_Class3_Unpacked_t, Exist_MS_MeasurementCapability, 2),
1009 M_UINT (MS_Class3_Unpacked_t, SMS_VALUE, 4),
1010 M_UINT (MS_Class3_Unpacked_t, SM_VALUE, 4),
1011
1012 M_NEXT_EXIST (MS_Class3_Unpacked_t, Exist_MS_PositioningMethodCapability, 1),
1013 M_UINT (MS_Class3_Unpacked_t, MS_PositioningMethod, 5),
1014
1015 M_NEXT_EXIST (MS_Class3_Unpacked_t, Exist_EDGE_MultiSlotCapability, 1),
1016 M_UINT (MS_Class3_Unpacked_t, EDGE_MultiSlotClass, 5),
1017
1018 M_NEXT_EXIST (MS_Class3_Unpacked_t, Exist_EDGE_Struct, 2),
1019 M_UINT (MS_Class3_Unpacked_t, ModulationCapability, 1),
1020 M_TYPE (MS_Class3_Unpacked_t, EDGE_RF_PwrCaps, EDGE_RF_Pwr_t),
1021
1022 M_NEXT_EXIST (MS_Class3_Unpacked_t, Exist_GSM400_Info, 2),
1023 M_UINT (MS_Class3_Unpacked_t, GSM400_Bands, 2),
1024 M_UINT (MS_Class3_Unpacked_t, GSM400_Arc, 4),
1025
1026 M_NEXT_EXIST (MS_Class3_Unpacked_t, Exist_GSM850_Arc, 1),
1027 M_UINT (MS_Class3_Unpacked_t, GSM850_Arc, 4),
1028
1029 M_NEXT_EXIST (MS_Class3_Unpacked_t, Exist_PCS1900_Arc, 1),
1030 M_UINT (MS_Class3_Unpacked_t, PCS1900_Arc, 4),
1031
1032 M_UINT (MS_Class3_Unpacked_t, UMTS_FDD_Radio_Access_Technology_Capability, 1),
1033 M_UINT (MS_Class3_Unpacked_t, UMTS_384_TDD_Radio_Access_Technology_Capability, 1),
1034 M_UINT (MS_Class3_Unpacked_t, CDMA2000_Radio_Access_Technology_Capability, 1),
1035
1036 M_NEXT_EXIST (MS_Class3_Unpacked_t, Exist_DTM_GPRS_multislot_class, 3),
1037 M_UINT (MS_Class3_Unpacked_t, DTM_GPRS_multislot_class, 2),
1038 M_UINT (MS_Class3_Unpacked_t, Single_Slot_DTM, 1),
1039 M_TYPE (MS_Class3_Unpacked_t, DTM_EGPRS_Params, DTM_EGPRS_t),
1040
1041 M_NEXT_EXIST (MS_Class3_Unpacked_t, Exist_SingleBandSupport, 1),
1042 M_UINT (MS_Class3_Unpacked_t, GSM_Band, 4),
1043
1044 M_NEXT_EXIST (MS_Class3_Unpacked_t, Exist_GSM_700_Associated_Radio_Capability, 1),
1045 M_UINT (MS_Class3_Unpacked_t, GSM_700_Associated_Radio_Capability, 4),
1046
1047 M_UINT (MS_Class3_Unpacked_t, UMTS_128_TDD_Radio_Access_Technology_Capability, 1),
1048 M_UINT (MS_Class3_Unpacked_t, GERAN_Feature_Package_1, 1),
1049
1050 M_NEXT_EXIST (MS_Class3_Unpacked_t, Exist_Extended_DTM_multislot_class, 2),
1051 M_UINT (MS_Class3_Unpacked_t, Extended_DTM_GPRS_multislot_class, 2),
1052 M_UINT (MS_Class3_Unpacked_t, Extended_DTM_EGPRS_multislot_class, 2),
1053
1054 M_NEXT_EXIST (MS_Class3_Unpacked_t, Exist_HighMultislotCapability, 1),
1055 M_UINT (MS_Class3_Unpacked_t, HighMultislotCapability, 2),
1056
1057 M_NEXT_EXIST (MS_Class3_Unpacked_t, Exist_GERAN_lu_ModeCapability, 1),
1058 M_UINT (MS_Class3_Unpacked_t, GERAN_lu_ModeCapability, 4),
1059
1060 M_UINT (MS_Class3_Unpacked_t, GERAN_FeaturePackage_2, 1),
1061
1062 M_UINT (MS_Class3_Unpacked_t, GMSK_MultislotPowerProfile, 2),
1063 M_UINT (MS_Class3_Unpacked_t, EightPSK_MultislotProfile, 2),
1064
1065 M_NEXT_EXIST (MS_Class3_Unpacked_t, Exist_TGSM_400_Bands, 2),
1066 M_UINT (MS_Class3_Unpacked_t, TGSM_400_BandsSupported, 2),
1067 M_UINT (MS_Class3_Unpacked_t, TGSM_400_AssociatedRadioCapability, 4),
1068
1069 M_NEXT_EXIST (MS_Class3_Unpacked_t, Exist_TGSM_900_AssociatedRadioCapability, 1),
1070 M_UINT (MS_Class3_Unpacked_t, TGSM_900_AssociatedRadioCapability, 4),
1071
1072 M_UINT (MS_Class3_Unpacked_t, DownlinkAdvancedReceiverPerformance, 2),
1073 M_UINT (MS_Class3_Unpacked_t, DTM_EnhancementsCapability, 1),
1074
1075 M_NEXT_EXIST (MS_Class3_Unpacked_t, Exist_DTM_GPRS_HighMultislotClass, 3),
1076 M_UINT (MS_Class3_Unpacked_t, DTM_GPRS_HighMultislotClass, 3),
1077 M_UINT (MS_Class3_Unpacked_t, OffsetRequired, 1),
1078 M_TYPE (MS_Class3_Unpacked_t, DTM_EGPRS_HighMultislotClass, DTM_EGPRS_HighMultislotClass_t),
1079
1080 M_UINT (MS_Class3_Unpacked_t, RepeatedSACCH_Capability, 1),
1081 M_UINT (MS_Class3_Unpacked_t, Spare2, 1),
1082CSN_DESCR_END (MS_Class3_Unpacked_t)
1083
1084static const
1085CSN_DESCR_BEGIN(Channel_Request_Description_t)
1086 M_UINT (Channel_Request_Description_t, PEAK_THROUGHPUT_CLASS, 4),
1087 M_UINT (Channel_Request_Description_t, RADIO_PRIORITY, 2),
Anders Broman8ea3cbe2020-01-28 17:36:33 +01001088 M_UINT (Channel_Request_Description_t, RLC_MODE, 1),
1089 M_UINT (Channel_Request_Description_t, LLC_PDU_TYPE, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001090 M_UINT (Channel_Request_Description_t, RLC_OCTET_COUNT, 16),
1091CSN_DESCR_END (Channel_Request_Description_t)
1092
1093/* < Packet Resource Request message content > */
1094static const
1095CSN_ChoiceElement_t PacketResourceRequestID[] =
1096{
Pau Espin Pedrol7cce8252020-01-24 16:41:14 +01001097 {1, 0, 0, M_TYPE(PacketResourceRequestID_t, u.Global_TFI, Global_TFI_t)},
1098 {1, 0x01, 0, M_UINT(PacketResourceRequestID_t, u.TLLI, 32)},
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001099};
1100
1101static const
1102CSN_DESCR_BEGIN(PacketResourceRequestID_t)
1103 M_CHOICE (PacketResourceRequestID_t, UnionType, PacketResourceRequestID, ElementsOf(PacketResourceRequestID)),
1104CSN_DESCR_END (PacketResourceRequestID_t)
1105
1106static const
1107CSN_DESCR_BEGIN(BEP_MeasurementReport_t)
1108 M_NEXT_EXIST (BEP_MeasurementReport_t, Exist, 3),
1109 M_UNION (BEP_MeasurementReport_t, 2),
1110 M_UINT (BEP_MeasurementReport_t, u.MEAN_BEP_GMSK, 4),
1111 M_UINT (BEP_MeasurementReport_t, u.MEAN_BEP_8PSK, 4),
1112CSN_DESCR_END (BEP_MeasurementReport_t)
1113
1114static const
1115CSN_DESCR_BEGIN(InterferenceMeasurementReport_t)
1116 M_NEXT_EXIST (InterferenceMeasurementReport_t, Exist, 1),
1117 M_UINT (InterferenceMeasurementReport_t, I_LEVEL, 4),
1118CSN_DESCR_END (InterferenceMeasurementReport_t)
1119
1120static const
1121CSN_DESCR_BEGIN(EGPRS_TimeslotLinkQualityMeasurements_t)
1122 M_NEXT_EXIST (EGPRS_TimeslotLinkQualityMeasurements_t, Exist_BEP_MEASUREMENTS, 1),
1123 M_TYPE_ARRAY (EGPRS_TimeslotLinkQualityMeasurements_t, BEP_MEASUREMENTS, BEP_MeasurementReport_t, 8),
1124
1125 M_NEXT_EXIST (EGPRS_TimeslotLinkQualityMeasurements_t, Exist_INTERFERENCE_MEASUREMENTS, 1),
1126 M_TYPE_ARRAY (EGPRS_TimeslotLinkQualityMeasurements_t, INTERFERENCE_MEASUREMENTS, InterferenceMeasurementReport_t, 8),
1127CSN_DESCR_END (EGPRS_TimeslotLinkQualityMeasurements_t)
1128
1129static const
1130CSN_DESCR_BEGIN(EGPRS_BEP_LinkQualityMeasurements_t)
1131 M_NEXT_EXIST (EGPRS_BEP_LinkQualityMeasurements_t, Exist_MEAN_CV_BEP_GMSK, 2),
1132 M_UINT (EGPRS_BEP_LinkQualityMeasurements_t, MEAN_BEP_GMSK, 5),
1133 M_UINT (EGPRS_BEP_LinkQualityMeasurements_t, CV_BEP_GMSK, 3),
1134
1135 M_NEXT_EXIST (EGPRS_BEP_LinkQualityMeasurements_t, Exist_MEAN_CV_BEP_8PSK, 2),
1136 M_UINT (EGPRS_BEP_LinkQualityMeasurements_t, MEAN_BEP_8PSK, 5),
1137 M_UINT (EGPRS_BEP_LinkQualityMeasurements_t, CV_BEP_8PSK, 3),
1138CSN_DESCR_END (EGPRS_BEP_LinkQualityMeasurements_t)
1139
1140static const
AndersBroman2d075be2020-01-28 19:01:50 +01001141CSN_DESCR_BEGIN(IU_Mode_Channel_Request_Desk_t)
1142
1143 M_UINT (IU_Mode_Channel_Request_Desk_t, RB_ID, 5),
1144 M_UINT (IU_Mode_Channel_Request_Desk_t, RADIO_PRIORITY, 2),
1145
1146 M_NEXT_EXIST (IU_Mode_Channel_Request_Desk_t, Exist_RLC_BLOCK_COUNT, 1),
1147 M_UINT (IU_Mode_Channel_Request_Desk_t, RLC_BLOCK_COUNT, 8),
1148
Pascal Quantinfa5f91c2020-01-28 19:11:37 +01001149 /* Don't use M_REC_TARRAY as we don't support multiple TBFs
1150 M_NEXT_EXIST (IU_Mode_Channel_Request_Desk_t, Exist_Iu_Mode_ChRequestDesk, 1),
1151 M_TYPE (IU_Mode_Channel_Request_Desk1, IU_Mode_Channel_Request_Desk_t),*/
1152 M_UINT (IU_Mode_Channel_Request_Desk_t, Exist_Iu_Mode_ChRequestDesk, 1),
AndersBroman2d075be2020-01-28 19:01:50 +01001153
1154CSN_DESCR_END (IU_Mode_Channel_Request_Desk_t)
1155
1156static const
1157CSN_DESCR_BEGIN(IU_Mode_Channel_Request_Desk_RNTI_t)
1158
1159 M_NEXT_EXIST (IU_Mode_Channel_Request_Desk_RNTI_t, Exist_G_RNTI_Extension, 1),
1160 M_UINT (IU_Mode_Channel_Request_Desk_RNTI_t, G_RNTI_Extension, 4),
1161
1162 M_TYPE (IU_Mode_Channel_Request_Desk_RNTI_t, IU_Mode_Channel_Request_Desk, IU_Mode_Channel_Request_Desk_t),
1163
1164CSN_DESCR_END (IU_Mode_Channel_Request_Desk_RNTI_t)
1165
1166
1167static const
1168CSN_DESCR_BEGIN(Ext_Channel_Request_desc_t)
1169
1170 M_UINT (Ext_Channel_Request_desc_t, PFI, 7),
1171 M_UINT (Ext_Channel_Request_desc_t, RADIO_PRIORITY, 2),
1172 M_UINT (Ext_Channel_Request_desc_t, RLC_Mode, 1),
1173
1174 M_NEXT_EXIST (Ext_Channel_Request_desc_t, Exist_LCC_PDU, 1),
1175 M_UINT (Ext_Channel_Request_desc_t, LCC_PDU, 1),
1176
Pascal Quantinfb656822020-01-28 19:13:20 +01001177 /* Don't use M_REC_TARRAY as we don't support multiple TBFs
1178 M_NEXT_EXIST (Ext_Channel_Request_desc_t, Exist_Ext_Channel_Request_desc, 1),
1179 M_TYPE (Ext_Channel_Request_desc_t, Ext_Channel_Request_desc, Ext_Channel_Request_desc_t),*/
1180 M_UINT (Ext_Channel_Request_desc_t, Exist_Ext_Channel_Request_desc, 1),
AndersBroman2d075be2020-01-28 19:01:50 +01001181
1182CSN_DESCR_END (Ext_Channel_Request_desc_t)
1183
1184static const
1185CSN_DESCR_BEGIN(EGPRS_BEP_LinkQualityMeasurements_type2_t)
1186
1187 M_NEXT_EXIST (EGPRS_BEP_LinkQualityMeasurements_type2_t, Exist_GMSK_MEAN_BEP, 1),
1188 M_UINT (EGPRS_BEP_LinkQualityMeasurements_type2_t, GMSK_MEAN_BEP, 5),
1189 M_UINT (EGPRS_BEP_LinkQualityMeasurements_type2_t, GMSK_CV_BEP, 3),
1190
1191 M_NEXT_EXIST (EGPRS_BEP_LinkQualityMeasurements_type2_t, Exist_8PSK_MEAN_BEP, 1),
1192 M_UINT (EGPRS_BEP_LinkQualityMeasurements_type2_t, p8PSK_MEAN_BEP, 5),
1193 M_UINT (EGPRS_BEP_LinkQualityMeasurements_type2_t, p8PSK_CV_BEP, 3),
1194
1195 M_NEXT_EXIST (EGPRS_BEP_LinkQualityMeasurements_type2_t, Exist_QPSK_MEAN_BEP, 1),
1196 M_UINT (EGPRS_BEP_LinkQualityMeasurements_type2_t, QPSK_MEAN_BEP, 5),
1197 M_UINT (EGPRS_BEP_LinkQualityMeasurements_type2_t, QPSK_CV_BEP, 3),
1198
1199 M_NEXT_EXIST (EGPRS_BEP_LinkQualityMeasurements_type2_t, Exist_16QAM_NSR_MEAN_BEP, 1),
1200 M_UINT (EGPRS_BEP_LinkQualityMeasurements_type2_t, p16QAM_NSR_MEAN_BEP, 5),
1201 M_UINT (EGPRS_BEP_LinkQualityMeasurements_type2_t, p16QAM_NSR_CV_BEP, 3),
1202
1203 M_NEXT_EXIST (EGPRS_BEP_LinkQualityMeasurements_type2_t, Exist_32QAM_NSR_MEAN_BEP, 1),
1204 M_UINT (EGPRS_BEP_LinkQualityMeasurements_type2_t, p32QAM_NSR_MEAN_BEP, 5),
1205 M_UINT (EGPRS_BEP_LinkQualityMeasurements_type2_t, p32QAM_NSR_CV_BEP, 3),
1206
1207 M_NEXT_EXIST (EGPRS_BEP_LinkQualityMeasurements_type2_t, Exist_16QAM_HSR_MEAN_BEP, 1),
1208 M_UINT (EGPRS_BEP_LinkQualityMeasurements_type2_t, p16QAM_HSR_MEAN_BEP, 5),
1209 M_UINT (EGPRS_BEP_LinkQualityMeasurements_type2_t, p16QAM_HSR_CV_BEP, 3),
1210
1211 M_NEXT_EXIST (EGPRS_BEP_LinkQualityMeasurements_type2_t, Exist_32QAM_HSR_MEAN_BEP, 1),
1212 M_UINT (EGPRS_BEP_LinkQualityMeasurements_type2_t, p32QAM_HSR_MEAN_BEP, 5),
1213 M_UINT (EGPRS_BEP_LinkQualityMeasurements_type2_t, p32QAM_HSR_CV_BEP, 3),
1214
1215CSN_DESCR_END (EGPRS_BEP_LinkQualityMeasurements_type2_t)
1216
1217static const
1218CSN_DESCR_BEGIN(BEP_MeasurementReport_type2_t)
1219 M_NEXT_EXIST (BEP_MeasurementReport_type2_t, Exist, 1),
1220 M_UINT (BEP_MeasurementReport_type2_t, REPORTED_MODULATION, 2),
1221 M_UINT (BEP_MeasurementReport_type2_t, MEAN_BEP_TN, 4),
1222CSN_DESCR_END (BEP_MeasurementReport_type2_t)
1223
1224static const
1225CSN_DESCR_BEGIN(InterferenceMeasurementReport_type2_t)
1226 M_NEXT_EXIST (InterferenceMeasurementReport_type2_t, Exist, 1),
1227 M_UINT (InterferenceMeasurementReport_type2_t, I_LEVEL, 4),
1228CSN_DESCR_END (InterferenceMeasurementReport_type2_t)
1229static const
1230CSN_DESCR_BEGIN(EGPRS_TimeslotLinkQualityMeasurements_type2_t)
1231 M_NEXT_EXIST (EGPRS_TimeslotLinkQualityMeasurements_type2_t, Exist_BEP_MEASUREMENTS, 1),
1232 M_TYPE_ARRAY (EGPRS_TimeslotLinkQualityMeasurements_type2_t, BEP_MEASUREMENTS, BEP_MeasurementReport_type2_t, 8),
1233
1234 M_NEXT_EXIST (EGPRS_TimeslotLinkQualityMeasurements_type2_t, Exist_INTERFERENCE_MEASUREMENTS, 1),
1235 M_TYPE_ARRAY (EGPRS_TimeslotLinkQualityMeasurements_type2_t, INTERFERENCE_MEASUREMENTS, InterferenceMeasurementReport_type2_t, 8),
1236CSN_DESCR_END (EGPRS_TimeslotLinkQualityMeasurements_type2_t)
1237
1238static const
1239CSN_DESCR_BEGIN(PRR_AdditionsR12_t)
1240
1241 M_NEXT_EXIST (PRR_AdditionsR12_t, Exist_Downlink_eTFI, 1),
1242 M_UINT (PRR_AdditionsR12_t, DOWNLINK_ETFI, 3),
1243
1244CSN_DESCR_END (PRR_AdditionsR12_t)
1245
1246static const
1247CSN_DESCR_BEGIN(PRR_AdditionsR10_t)
1248 M_UINT (PRR_AdditionsR10_t, LOW_ACCESS_PRIORITY_SIGNALLING, 1),
1249
1250 M_NEXT_EXIST_OR_NULL(PRR_AdditionsR10_t, Exist_AdditionsR12, 1),
1251 M_TYPE (PRR_AdditionsR10_t, AdditionsR12, PRR_AdditionsR12_t),
1252
1253CSN_DESCR_END (PRR_AdditionsR10_t)
1254
1255static const
1256CSN_DESCR_BEGIN(PRR_AdditionsR7_t)
1257 M_UINT (PRR_AdditionsR7_t, EARLY_TBF_ESTABLISHMENT, 1),
1258
1259 M_NEXT_EXIST (PRR_AdditionsR7_t, Exist_EGPRS_BEP_LinkQualityMeasurements_type2, 1),
1260 M_TYPE (PRR_AdditionsR7_t, EGPRS_BEP_LinkQualityMeasurements_type2, EGPRS_BEP_LinkQualityMeasurements_type2_t),
1261
1262 M_NEXT_EXIST (PRR_AdditionsR7_t, Exist_EGPRS_TimeslotLinkQualityMeasurements_type2, 1),
1263 M_TYPE (PRR_AdditionsR7_t, EGPRS_TimeslotLinkQualityMeasurements_type2, EGPRS_TimeslotLinkQualityMeasurements_type2_t),
1264
1265 M_NEXT_EXIST_OR_NULL(PRR_AdditionsR7_t, Exist_AdditionsR10, 1),
1266 M_TYPE (PRR_AdditionsR7_t, AdditionsR10, PRR_AdditionsR10_t),
1267
1268CSN_DESCR_END (PRR_AdditionsR7_t)
1269
1270static const
1271CSN_DESCR_BEGIN(PRR_AdditionsR6_t)
1272 M_NEXT_EXIST (PRR_AdditionsR6_t, Exist_Ext_Channel_Request_desc, 1),
1273 M_TYPE (PRR_AdditionsR6_t, Ext_Channel_Request_desc, Ext_Channel_Request_desc_t),
1274
1275 M_NEXT_EXIST_OR_NULL(PRR_AdditionsR6_t, Exist_AdditionsR7, 1),
1276 M_TYPE (PRR_AdditionsR6_t, AdditionsR7, PRR_AdditionsR7_t),
1277
1278CSN_DESCR_END (PRR_AdditionsR6_t)
1279
1280static const
1281CSN_DESCR_BEGIN(PRR_AdditionsR5_t)
1282 M_NEXT_EXIST (PRR_AdditionsR5_t, Exist_Iu_Mode_ChRequestDesk, 1),
1283 M_TYPE (PRR_AdditionsR5_t, IU_Mode_Channel_Request_Desk_RNTI, IU_Mode_Channel_Request_Desk_RNTI_t),
1284
1285 M_NEXT_EXIST (PRR_AdditionsR5_t, Exist_HFN_LSB, 1),
1286 M_UINT (PRR_AdditionsR5_t, HFN_LSb, 7),
1287
1288 M_NEXT_EXIST_OR_NULL(PRR_AdditionsR5_t, Exist_AdditionsR6, 1),
1289 M_TYPE (PRR_AdditionsR5_t, AdditionsR6, PRR_AdditionsR6_t),
1290CSN_DESCR_END (PRR_AdditionsR5_t)
1291
1292static const
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001293CSN_DESCR_BEGIN(PRR_AdditionsR99_t)
1294 M_NEXT_EXIST (PRR_AdditionsR99_t, Exist_EGPRS_BEP_LinkQualityMeasurements, 1),
1295 M_TYPE (PRR_AdditionsR99_t, EGPRS_BEP_LinkQualityMeasurements, EGPRS_BEP_LinkQualityMeasurements_t),
1296
1297 M_NEXT_EXIST (PRR_AdditionsR99_t, Exist_EGPRS_TimeslotLinkQualityMeasurements, 1),
1298 M_TYPE (PRR_AdditionsR99_t, EGPRS_TimeslotLinkQualityMeasurements, EGPRS_TimeslotLinkQualityMeasurements_t),
1299
1300 M_NEXT_EXIST (PRR_AdditionsR99_t, Exist_PFI, 1),
1301 M_UINT (PRR_AdditionsR99_t, PFI, 7),
1302
1303 M_UINT (PRR_AdditionsR99_t, MS_RAC_AdditionalInformationAvailable, 1),
1304 M_UINT (PRR_AdditionsR99_t, RetransmissionOfPRR, 1),
AndersBroman2d075be2020-01-28 19:01:50 +01001305
1306 M_NEXT_EXIST_OR_NULL(PRR_AdditionsR99_t, Exist_AdditionsR5, 1),
1307 M_TYPE (PRR_AdditionsR99_t, AdditionsR5, PRR_AdditionsR5_t),
1308
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001309CSN_DESCR_END (PRR_AdditionsR99_t)
1310
1311static const
1312CSN_DESCR_BEGIN (Packet_Resource_Request_t)
1313 /* Mac header */
1314 M_UINT (Packet_Resource_Request_t, PayloadType, 2),
1315 M_UINT (Packet_Resource_Request_t, spare, 5),
1316 M_UINT (Packet_Resource_Request_t, R, 1),
1317 M_UINT (Packet_Resource_Request_t, MESSAGE_TYPE, 6),
1318 /* Mac header */
1319
1320 M_NEXT_EXIST (Packet_Resource_Request_t, Exist_ACCESS_TYPE, 1),
1321 M_UINT (Packet_Resource_Request_t, ACCESS_TYPE, 2),
1322
1323 M_TYPE (Packet_Resource_Request_t, ID, PacketResourceRequestID_t),
1324
Pau Espin Pedrole50ce6e2020-03-23 18:49:16 +01001325 M_NEXT_EXIST (Packet_Resource_Request_t, Exist_MS_Radio_Access_capability2, 1),
1326 M_TYPE (Packet_Resource_Request_t, MS_Radio_Access_capability2, MS_Radio_Access_capability2_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001327
1328 M_TYPE (Packet_Resource_Request_t, Channel_Request_Description, Channel_Request_Description_t),
1329
1330 M_NEXT_EXIST (Packet_Resource_Request_t, Exist_CHANGE_MARK, 1),
1331 M_UINT (Packet_Resource_Request_t, CHANGE_MARK, 2),
1332
1333 M_UINT (Packet_Resource_Request_t, C_VALUE, 6),
1334
1335 M_NEXT_EXIST (Packet_Resource_Request_t, Exist_SIGN_VAR, 1),
1336 M_UINT (Packet_Resource_Request_t, SIGN_VAR, 6),
1337
Pau Espin Pedrol0daf9132020-02-23 16:11:28 +07001338 M_TYPE_ARRAY (Packet_Resource_Request_t, I_LEVEL_TN, InterferenceMeasurementReport_t, 8),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001339
1340 M_NEXT_EXIST_OR_NULL(Packet_Resource_Request_t, Exist_AdditionsR99, 1),
1341 M_TYPE (Packet_Resource_Request_t, AdditionsR99, PRR_AdditionsR99_t),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04001342 M_PADDING_BITS (Packet_Resource_Request_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001343CSN_DESCR_END (Packet_Resource_Request_t)
1344
1345/*< Packet Mobile TBF Status message content > */
1346static const
1347CSN_DESCR_BEGIN(Packet_Mobile_TBF_Status_t)
1348 /* Mac header */
1349 M_UINT (Packet_Mobile_TBF_Status_t, PayloadType, 2),
1350 M_UINT (Packet_Mobile_TBF_Status_t, spare, 5),
1351 M_UINT (Packet_Mobile_TBF_Status_t, R, 1),
1352 M_UINT (Packet_Mobile_TBF_Status_t, MESSAGE_TYPE, 6),
1353 /* Mac header */
1354
1355 M_TYPE (Packet_Mobile_TBF_Status_t, Global_TFI, Global_TFI_t),
1356 M_UINT (Packet_Mobile_TBF_Status_t, TBF_CAUSE, 3),
1357
1358 M_NEXT_EXIST (Packet_Mobile_TBF_Status_t, Exist_STATUS_MESSAGE_TYPE, 1),
1359 M_UINT (Packet_Mobile_TBF_Status_t, STATUS_MESSAGE_TYPE, 6),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04001360 M_PADDING_BITS(Packet_Mobile_TBF_Status_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001361CSN_DESCR_END (Packet_Mobile_TBF_Status_t)
1362
1363/*< Packet PSI Status message content > */
1364static const
1365CSN_DESCR_BEGIN(PSI_Message_t)
1366 M_UINT (PSI_Message_t, PSI_MESSAGE_TYPE, 6),
1367 M_UINT (PSI_Message_t, PSIX_CHANGE_MARK, 2),
1368 M_NEXT_EXIST (PSI_Message_t, Exist_PSIX_COUNT_and_Instance_Bitmap, 2),
1369 M_FIXED (PSI_Message_t, 4, 0), /* Placeholder for PSIX_COUNT (4 bits) */
1370 M_FIXED (PSI_Message_t, 1, 0), /* Placeholder for Instance bitmap (1 bit) */
1371CSN_DESCR_END (PSI_Message_t)
1372
1373static const
1374CSN_DESCR_BEGIN(PSI_Message_List_t)
Pau Espin Pedrol81b40cb2020-03-23 15:23:51 +01001375 M_REC_TARRAY (PSI_Message_List_t, PSI_Message, PSI_Message_t, Count_PSI_Message),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001376 M_FIXED (PSI_Message_List_t, 1, 0x00),
1377 M_UINT (PSI_Message_List_t, ADDITIONAL_MSG_TYPE, 1),
1378CSN_DESCR_END (PSI_Message_List_t)
1379
1380static const
1381CSN_DESCR_BEGIN(Unknown_PSI_Message_List_t)
1382 M_FIXED (Unknown_PSI_Message_List_t, 1, 0x00),
1383 M_UINT (Unknown_PSI_Message_List_t, ADDITIONAL_MSG_TYPE, 1),
1384CSN_DESCR_END (Unknown_PSI_Message_List_t)
1385
1386static const
1387CSN_DESCR_BEGIN(Packet_PSI_Status_t)
1388 /* Mac header */
1389 M_UINT (Packet_PSI_Status_t, PayloadType, 2),
1390 M_UINT (Packet_PSI_Status_t, spare, 5),
1391 M_UINT (Packet_PSI_Status_t, R, 1),
1392 M_UINT (Packet_PSI_Status_t, MESSAGE_TYPE, 6),
1393 /* Mac header */
1394
1395 M_TYPE (Packet_PSI_Status_t, Global_TFI, Global_TFI_t),
1396 M_UINT (Packet_PSI_Status_t, PBCCH_CHANGE_MARK, 3),
1397 M_TYPE (Packet_PSI_Status_t, PSI_Message_List, PSI_Message_List_t),
1398 M_TYPE (Packet_PSI_Status_t, Unknown_PSI_Message_List, Unknown_PSI_Message_List_t),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04001399 M_PADDING_BITS(Packet_PSI_Status_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001400CSN_DESCR_END (Packet_PSI_Status_t)
1401
1402/* < Packet SI Status message content > */
1403
1404static const
1405CSN_DESCR_BEGIN(SI_Message_t)
1406 M_UINT (SI_Message_t, SI_MESSAGE_TYPE, 8),
1407 M_UINT (SI_Message_t, MESS_REC, 2),
1408CSN_DESCR_END (SI_Message_t)
1409
1410static const
1411CSN_DESCR_BEGIN(SI_Message_List_t)
Pau Espin Pedrol81b40cb2020-03-23 15:23:51 +01001412 M_REC_TARRAY (SI_Message_List_t, SI_Message, SI_Message_t, Count_SI_Message),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001413 M_FIXED (SI_Message_List_t, 1, 0x00),
1414 M_UINT (SI_Message_List_t, ADDITIONAL_MSG_TYPE, 1),
1415CSN_DESCR_END (SI_Message_List_t)
1416
1417static const
1418CSN_DESCR_BEGIN(Unknown_SI_Message_List_t)
1419 M_FIXED (Unknown_SI_Message_List_t, 1, 0x00),
1420 M_UINT (Unknown_SI_Message_List_t, ADDITIONAL_MSG_TYPE, 1),
1421CSN_DESCR_END (Unknown_SI_Message_List_t)
1422
1423static const
1424CSN_DESCR_BEGIN(Packet_SI_Status_t)
1425 /* Mac header */
1426 M_UINT (Packet_SI_Status_t, PayloadType, 2),
1427 M_UINT (Packet_SI_Status_t, spare, 5),
1428 M_UINT (Packet_SI_Status_t, R, 1),
1429 M_UINT (Packet_SI_Status_t, MESSAGE_TYPE, 6),
1430 /* Mac header */
1431
1432 M_TYPE (Packet_SI_Status_t, Global_TFI, Global_TFI_t),
1433 M_UINT (Packet_SI_Status_t, BCCH_CHANGE_MARK, 3),
1434 M_TYPE (Packet_SI_Status_t, SI_Message_List, SI_Message_List_t),
1435 M_TYPE (Packet_SI_Status_t, Unknown_SI_Message_List, Unknown_SI_Message_List_t),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04001436 M_PADDING_BITS(Packet_SI_Status_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001437CSN_DESCR_END (Packet_SI_Status_t)
1438
1439/* < Packet Downlink Ack/Nack message content > */
1440static const
1441CSN_DESCR_BEGIN(PD_AckNack_AdditionsR99_t)
1442 M_NEXT_EXIST (PD_AckNack_AdditionsR99_t, Exist_PFI, 1),
1443 M_UINT (PD_AckNack_AdditionsR99_t, PFI, 7),
1444CSN_DESCR_END (PD_AckNack_AdditionsR99_t)
1445
1446static const
1447CSN_DESCR_BEGIN (Packet_Downlink_Ack_Nack_t)
1448 M_UINT (Packet_Downlink_Ack_Nack_t, PayloadType, 2),
1449 M_UINT (Packet_Downlink_Ack_Nack_t, spare, 5),
1450 M_BIT (Packet_Downlink_Ack_Nack_t, R),
1451 M_UINT (Packet_Downlink_Ack_Nack_t, MESSAGE_TYPE, 6),
1452 M_UINT (Packet_Downlink_Ack_Nack_t, DOWNLINK_TFI, 5),
1453 M_TYPE (Packet_Downlink_Ack_Nack_t, Ack_Nack_Description, Ack_Nack_Description_t),
1454
1455 M_NEXT_EXIST (Packet_Downlink_Ack_Nack_t, Exist_Channel_Request_Description, 1),
1456 M_TYPE (Packet_Downlink_Ack_Nack_t, Channel_Request_Description, Channel_Request_Description_t),
1457
1458 M_TYPE (Packet_Downlink_Ack_Nack_t, Channel_Quality_Report, Channel_Quality_Report_t),
1459
1460 M_NEXT_EXIST_OR_NULL(Packet_Downlink_Ack_Nack_t, Exist_AdditionsR99, 1),
1461 M_TYPE (Packet_Downlink_Ack_Nack_t, AdditionsR99, PD_AckNack_AdditionsR99_t),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04001462 M_PADDING_BITS (Packet_Downlink_Ack_Nack_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001463CSN_DESCR_END (Packet_Downlink_Ack_Nack_t)
1464
1465
1466/*< EGPRS Packet Downlink Ack/Nack message content > */
1467static const
1468CSN_DESCR_BEGIN(EGPRS_ChannelQualityReport_t)
1469 M_TYPE (EGPRS_ChannelQualityReport_t, EGPRS_BEP_LinkQualityMeasurements, EGPRS_BEP_LinkQualityMeasurements_t),
1470 M_UINT (EGPRS_ChannelQualityReport_t, C_VALUE, 6),
1471 M_TYPE (EGPRS_ChannelQualityReport_t, EGPRS_TimeslotLinkQualityMeasurements, EGPRS_TimeslotLinkQualityMeasurements_t),
1472CSN_DESCR_END (EGPRS_ChannelQualityReport_t)
1473
1474static const
1475CSN_DESCR_BEGIN(EGPRS_PD_AckNack_t)
1476/* M_CALLBACK (EGPRS_PD_AckNack_t, (void*)21, IsSupported, IsSupported), */
1477 M_UINT (EGPRS_PD_AckNack_t, PayloadType, 2),
1478 M_UINT (EGPRS_PD_AckNack_t, spare, 5),
1479 M_BIT (EGPRS_PD_AckNack_t, R),
1480
1481 M_UINT (EGPRS_PD_AckNack_t, MESSAGE_TYPE, 6),
1482 M_UINT (EGPRS_PD_AckNack_t, DOWNLINK_TFI, 5),
1483 M_UINT (EGPRS_PD_AckNack_t, MS_OUT_OF_MEMORY, 1),
1484
1485 M_NEXT_EXIST (EGPRS_PD_AckNack_t, Exist_EGPRS_ChannelQualityReport, 1),
1486 M_TYPE (EGPRS_PD_AckNack_t, EGPRS_ChannelQualityReport, EGPRS_ChannelQualityReport_t),
1487
1488 M_NEXT_EXIST (EGPRS_PD_AckNack_t, Exist_ChannelRequestDescription, 1),
1489 M_TYPE (EGPRS_PD_AckNack_t, ChannelRequestDescription, Channel_Request_Description_t),
1490
1491 M_NEXT_EXIST (EGPRS_PD_AckNack_t, Exist_PFI, 1),
1492 M_UINT (EGPRS_PD_AckNack_t, PFI, 7),
1493
1494 M_NEXT_EXIST (EGPRS_PD_AckNack_t, Exist_ExtensionBits, 1),
1495 M_TYPE (EGPRS_PD_AckNack_t, ExtensionBits, Extension_Bits_t),
1496
1497 M_TYPE (EGPRS_PD_AckNack_t, EGPRS_AckNack, EGPRS_AckNack_t),
1498/* M_CALLBACK (EGPRS_PD_AckNack_t, (void*)24, EGPRS_AckNack, EGPRS_AckNack), */
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04001499 M_PADDING_BITS(EGPRS_PD_AckNack_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001500
1501CSN_DESCR_END (EGPRS_PD_AckNack_t)
1502
1503static const
1504CSN_DESCR_BEGIN(FDD_Target_Cell_t)
1505 M_UINT (FDD_Target_Cell_t, FDD_ARFCN, 14),
1506 M_UINT (FDD_Target_Cell_t, DIVERSITY, 1),
1507 M_NEXT_EXIST (FDD_Target_Cell_t, Exist_Bandwith_FDD, 1),
1508 M_UINT (FDD_Target_Cell_t, BANDWITH_FDD, 3),
1509 M_UINT (FDD_Target_Cell_t, SCRAMBLING_CODE, 9),
1510CSN_DESCR_END (FDD_Target_Cell_t)
1511
1512static const
1513CSN_DESCR_BEGIN(TDD_Target_Cell_t)
1514 M_UINT (TDD_Target_Cell_t, TDD_ARFCN, 14),
1515 M_UINT (TDD_Target_Cell_t, DIVERSITY_TDD, 1),
1516 M_NEXT_EXIST (TDD_Target_Cell_t, Exist_Bandwith_TDD, 1),
1517 M_UINT (TDD_Target_Cell_t, BANDWITH_TDD, 3),
1518 M_UINT (TDD_Target_Cell_t, CELL_PARAMETER, 7),
1519 M_UINT (TDD_Target_Cell_t, Sync_Case_TSTD, 1),
1520CSN_DESCR_END (TDD_Target_Cell_t)
1521
1522static const
1523CSN_DESCR_BEGIN(EUTRAN_Target_Cell_t)
1524 M_UINT (EUTRAN_Target_Cell_t, EARFCN, 16),
1525 M_NEXT_EXIST (EUTRAN_Target_Cell_t, Exist_Measurement_Bandwidth, 1),
1526 M_UINT (EUTRAN_Target_Cell_t, Measurement_Bandwidth, 3),
1527 M_UINT (EUTRAN_Target_Cell_t, Physical_Layer_Cell_Identity, 9),
1528CSN_DESCR_END (EUTRAN_Target_Cell_t)
1529
1530static const
1531CSN_DESCR_BEGIN(UTRAN_CSG_Target_Cell_t)
1532 M_UINT (UTRAN_CSG_Target_Cell_t, UTRAN_CI, 28),
1533 M_NEXT_EXIST (UTRAN_CSG_Target_Cell_t, Exist_PLMN_ID, 1),
1534 M_TYPE (UTRAN_CSG_Target_Cell_t, PLMN_ID, PLMN_t),
1535CSN_DESCR_END (UTRAN_CSG_Target_Cell_t)
1536
1537static const
1538CSN_DESCR_BEGIN(EUTRAN_CSG_Target_Cell_t)
1539 M_UINT (EUTRAN_CSG_Target_Cell_t, EUTRAN_CI, 28),
1540 M_UINT (EUTRAN_CSG_Target_Cell_t, Tracking_Area_Code, 16),
1541 M_NEXT_EXIST (EUTRAN_CSG_Target_Cell_t, Exist_PLMN_ID, 1),
1542 M_TYPE (EUTRAN_CSG_Target_Cell_t, PLMN_ID, PLMN_t),
1543CSN_DESCR_END (EUTRAN_CSG_Target_Cell_t)
1544
1545static const
1546CSN_DESCR_BEGIN(PCCF_AdditionsR9_t)
1547 M_NEXT_EXIST (PCCF_AdditionsR9_t, Exist_UTRAN_CSG_Target_Cell, 1),
1548 M_TYPE (PCCF_AdditionsR9_t, UTRAN_CSG_Target_Cell, UTRAN_CSG_Target_Cell_t),
1549 M_NEXT_EXIST (PCCF_AdditionsR9_t, Exist_EUTRAN_CSG_Target_Cell, 1),
1550 M_TYPE (PCCF_AdditionsR9_t, EUTRAN_CSG_Target_Cell, EUTRAN_CSG_Target_Cell_t),
1551CSN_DESCR_END (PCCF_AdditionsR9_t)
1552
1553static const
1554CSN_DESCR_BEGIN(PCCF_AdditionsR8_t)
1555 M_NEXT_EXIST (PCCF_AdditionsR8_t, Exist_EUTRAN_Target_Cell, 1),
1556 M_TYPE (PCCF_AdditionsR8_t, EUTRAN_Target_Cell, EUTRAN_Target_Cell_t),
1557 M_NEXT_EXIST_OR_NULL(PCCF_AdditionsR8_t, Exist_AdditionsR9, 1),
1558 M_TYPE (PCCF_AdditionsR8_t, AdditionsR9, PCCF_AdditionsR9_t),
1559CSN_DESCR_END (PCCF_AdditionsR8_t)
1560
1561static const
1562CSN_DESCR_BEGIN(PCCF_AdditionsR5_t)
Thorsten Alteholz8bb79042018-10-06 10:42:58 +02001563 M_NEXT_EXIST (PCCF_AdditionsR5_t, Exist_G_RNTI_extension, 1),
1564 M_UINT (PCCF_AdditionsR5_t, G_RNTI_extension, 4),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001565 M_NEXT_EXIST_OR_NULL(PCCF_AdditionsR5_t, Exist_AdditionsR8, 1),
1566 M_TYPE (PCCF_AdditionsR5_t, AdditionsR8, PCCF_AdditionsR8_t),
1567CSN_DESCR_END (PCCF_AdditionsR5_t)
1568
1569static const
1570CSN_DESCR_BEGIN(PCCF_AdditionsR99_t)
1571 M_NEXT_EXIST (PCCF_AdditionsR99_t, Exist_FDD_Description, 1),
1572 M_TYPE (PCCF_AdditionsR99_t, FDD_Target_Cell, FDD_Target_Cell_t),
1573 M_NEXT_EXIST (PCCF_AdditionsR99_t, Exist_TDD_Description, 1),
1574 M_TYPE (PCCF_AdditionsR99_t, TDD_Target_Cell, TDD_Target_Cell_t),
1575 M_NEXT_EXIST_OR_NULL(PCCF_AdditionsR99_t, Exist_AdditionsR5, 1),
1576 M_TYPE (PCCF_AdditionsR99_t, AdditionsR5, PCCF_AdditionsR5_t),
1577CSN_DESCR_END (PCCF_AdditionsR99_t)
1578
1579/*< Packet Cell Change Failure message content > */
1580static const
1581CSN_DESCR_BEGIN(Packet_Cell_Change_Failure_t)
1582 /* Mac header */
1583 M_UINT (Packet_Cell_Change_Failure_t, PayloadType, 2),
1584 M_UINT (Packet_Cell_Change_Failure_t, spare, 5),
1585 M_UINT (Packet_Cell_Change_Failure_t, R, 1),
1586 M_UINT (Packet_Cell_Change_Failure_t, MESSAGE_TYPE, 6),
1587 /* Mac header */
1588
1589 M_UINT (Packet_Cell_Change_Failure_t, TLLI, 32),
1590 M_UINT (Packet_Cell_Change_Failure_t, ARFCN, 10),
1591 M_UINT (Packet_Cell_Change_Failure_t, BSIC, 6),
1592 M_UINT (Packet_Cell_Change_Failure_t, CAUSE, 4),
1593
1594 M_NEXT_EXIST_OR_NULL (Packet_Cell_Change_Failure_t, Exist_AdditionsR99, 1),
1595 M_TYPE (Packet_Cell_Change_Failure_t, AdditionsR99, PCCF_AdditionsR99_t),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04001596
1597 M_PADDING_BITS (Packet_Cell_Change_Failure_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001598CSN_DESCR_END (Packet_Cell_Change_Failure_t)
1599
1600/*< Packet Uplink Ack/Nack message content > */
1601static const
1602CSN_DESCR_BEGIN(Power_Control_Parameters_t)
1603 M_UINT (Power_Control_Parameters_t, ALPHA, 4),
1604
1605 M_NEXT_EXIST (Power_Control_Parameters_t, Slot[0].Exist, 1),
1606 M_UINT (Power_Control_Parameters_t, Slot[0].GAMMA_TN, 5),
1607
1608 M_NEXT_EXIST (Power_Control_Parameters_t, Slot[1].Exist, 1),
1609 M_UINT (Power_Control_Parameters_t, Slot[1].GAMMA_TN, 5),
1610
1611 M_NEXT_EXIST (Power_Control_Parameters_t, Slot[2].Exist, 1),
1612 M_UINT (Power_Control_Parameters_t, Slot[2].GAMMA_TN, 5),
1613
1614 M_NEXT_EXIST (Power_Control_Parameters_t, Slot[3].Exist, 1),
1615 M_UINT (Power_Control_Parameters_t, Slot[3].GAMMA_TN, 5),
1616
1617 M_NEXT_EXIST (Power_Control_Parameters_t, Slot[4].Exist, 1),
1618 M_UINT (Power_Control_Parameters_t, Slot[4].GAMMA_TN, 5),
1619
1620 M_NEXT_EXIST (Power_Control_Parameters_t, Slot[5].Exist, 1),
1621 M_UINT (Power_Control_Parameters_t, Slot[5].GAMMA_TN, 5),
1622
1623 M_NEXT_EXIST (Power_Control_Parameters_t, Slot[6].Exist, 1),
1624 M_UINT (Power_Control_Parameters_t, Slot[6].GAMMA_TN, 5),
1625
1626 M_NEXT_EXIST (Power_Control_Parameters_t, Slot[7].Exist, 1),
1627 M_UINT (Power_Control_Parameters_t, Slot[7].GAMMA_TN, 5),
1628CSN_DESCR_END (Power_Control_Parameters_t)
1629
1630static const
1631CSN_DESCR_BEGIN(PU_AckNack_GPRS_AdditionsR99_t)
1632 M_NEXT_EXIST (PU_AckNack_GPRS_AdditionsR99_t, Exist_PacketExtendedTimingAdvance, 1),
1633 M_UINT (PU_AckNack_GPRS_AdditionsR99_t, PacketExtendedTimingAdvance, 2),
1634
1635 M_UINT (PU_AckNack_GPRS_AdditionsR99_t, TBF_EST, 1),
1636CSN_DESCR_END (PU_AckNack_GPRS_AdditionsR99_t)
1637
1638static const
1639CSN_DESCR_BEGIN (PU_AckNack_GPRS_t)
1640 M_UINT (PU_AckNack_GPRS_t, CHANNEL_CODING_COMMAND, 2),
1641 M_TYPE (PU_AckNack_GPRS_t, Ack_Nack_Description, Ack_Nack_Description_t),
1642
1643 M_NEXT_EXIST (PU_AckNack_GPRS_t, Common_Uplink_Ack_Nack_Data.Exist_CONTENTION_RESOLUTION_TLLI, 1),
1644 M_UINT (PU_AckNack_GPRS_t, Common_Uplink_Ack_Nack_Data.CONTENTION_RESOLUTION_TLLI, 32),
1645
1646 M_NEXT_EXIST (PU_AckNack_GPRS_t, Common_Uplink_Ack_Nack_Data.Exist_Packet_Timing_Advance, 1),
1647 M_TYPE (PU_AckNack_GPRS_t, Common_Uplink_Ack_Nack_Data.Packet_Timing_Advance, Packet_Timing_Advance_t),
1648
1649 M_NEXT_EXIST (PU_AckNack_GPRS_t, Common_Uplink_Ack_Nack_Data.Exist_Power_Control_Parameters, 1),
1650 M_TYPE (PU_AckNack_GPRS_t, Common_Uplink_Ack_Nack_Data.Power_Control_Parameters, Power_Control_Parameters_t),
1651
1652 M_NEXT_EXIST (PU_AckNack_GPRS_t, Common_Uplink_Ack_Nack_Data.Exist_Extension_Bits, 1),
1653 M_TYPE (PU_AckNack_GPRS_t, Common_Uplink_Ack_Nack_Data.Extension_Bits, Extension_Bits_t),
1654
1655 M_UNION (PU_AckNack_GPRS_t, 2), /* Fixed Allocation was removed */
1656 M_UINT (PU_AckNack_GPRS_t, u.FixedAllocationDummy, 1),
1657 CSN_ERROR (PU_AckNack_GPRS_t, "01 <Fixed Allocation>", CSN_ERROR_STREAM_NOT_SUPPORTED),
1658
1659 M_NEXT_EXIST_OR_NULL(PU_AckNack_GPRS_t, Exist_AdditionsR99, 1),
1660 M_TYPE (PU_AckNack_GPRS_t, AdditionsR99, PU_AckNack_GPRS_AdditionsR99_t),
1661CSN_DESCR_END (PU_AckNack_GPRS_t)
1662
1663static const
1664CSN_DESCR_BEGIN(PU_AckNack_EGPRS_00_t)
1665 M_UINT (PU_AckNack_EGPRS_00_t, EGPRS_ChannelCodingCommand, 4),
1666 M_UINT (PU_AckNack_EGPRS_00_t, RESEGMENT, 1),
1667 M_UINT (PU_AckNack_EGPRS_00_t, PRE_EMPTIVE_TRANSMISSION, 1),
1668 M_UINT (PU_AckNack_EGPRS_00_t, PRR_RETRANSMISSION_REQUEST, 1),
1669 M_UINT (PU_AckNack_EGPRS_00_t, ARAC_RETRANSMISSION_REQUEST, 1),
1670
1671 M_NEXT_EXIST (PU_AckNack_EGPRS_00_t, Common_Uplink_Ack_Nack_Data.Exist_CONTENTION_RESOLUTION_TLLI, 1),
1672 M_UINT (PU_AckNack_EGPRS_00_t, Common_Uplink_Ack_Nack_Data.CONTENTION_RESOLUTION_TLLI, 32),
1673
1674 M_UINT (PU_AckNack_EGPRS_00_t, TBF_EST, 1),
1675
1676 M_NEXT_EXIST (PU_AckNack_EGPRS_00_t, Common_Uplink_Ack_Nack_Data.Exist_Packet_Timing_Advance, 1),
1677 M_TYPE (PU_AckNack_EGPRS_00_t, Common_Uplink_Ack_Nack_Data.Packet_Timing_Advance, Packet_Timing_Advance_t),
1678
1679 M_NEXT_EXIST (PU_AckNack_EGPRS_00_t, Exist_Packet_Extended_Timing_Advance, 1),
1680 M_UINT (PU_AckNack_EGPRS_00_t, Packet_Extended_Timing_Advance, 2),
1681
1682 M_NEXT_EXIST (PU_AckNack_EGPRS_00_t, Common_Uplink_Ack_Nack_Data.Exist_Power_Control_Parameters, 1),
1683 M_TYPE (PU_AckNack_EGPRS_00_t, Common_Uplink_Ack_Nack_Data.Power_Control_Parameters, Power_Control_Parameters_t),
1684
1685 M_NEXT_EXIST (PU_AckNack_EGPRS_00_t, Common_Uplink_Ack_Nack_Data.Exist_Extension_Bits, 1),
1686 M_TYPE (PU_AckNack_EGPRS_00_t, Common_Uplink_Ack_Nack_Data.Extension_Bits, Extension_Bits_t),
1687
1688 M_TYPE (PU_AckNack_EGPRS_00_t, EGPRS_AckNack, EGPRS_AckNack_t),
1689/* M_CALLBACK (PU_AckNack_EGPRS_00_t, (void*)24, EGPRS_AckNack, EGPRS_AckNack), */
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001690CSN_DESCR_END (PU_AckNack_EGPRS_00_t)
1691
1692static const
1693CSN_DESCR_BEGIN(PU_AckNack_EGPRS_t)
1694/* M_CALLBACK (PU_AckNack_EGPRS_t, (void*)21, IsSupported, IsSupported), */
1695 M_UNION (PU_AckNack_EGPRS_t, 4),
1696 M_TYPE (PU_AckNack_EGPRS_t, u.PU_AckNack_EGPRS_00, PU_AckNack_EGPRS_00_t),
1697 CSN_ERROR (PU_AckNack_EGPRS_t, "01 <PU_AckNack_EGPRS>", CSN_ERROR_STREAM_NOT_SUPPORTED),
1698 CSN_ERROR (PU_AckNack_EGPRS_t, "10 <PU_AckNack_EGPRS>", CSN_ERROR_STREAM_NOT_SUPPORTED),
1699 CSN_ERROR (PU_AckNack_EGPRS_t, "11 <PU_AckNack_EGPRS>", CSN_ERROR_STREAM_NOT_SUPPORTED),
1700CSN_DESCR_END (PU_AckNack_EGPRS_t)
1701
1702static const
1703CSN_DESCR_BEGIN(Packet_Uplink_Ack_Nack_t)
1704 M_UINT (Packet_Uplink_Ack_Nack_t, MESSAGE_TYPE, 6),
1705 M_UINT (Packet_Uplink_Ack_Nack_t, PAGE_MODE, 2),
1706 M_FIXED (Packet_Uplink_Ack_Nack_t, 2, 0x00),
1707 M_UINT (Packet_Uplink_Ack_Nack_t, UPLINK_TFI, 5),
1708
1709 M_UNION (Packet_Uplink_Ack_Nack_t, 2),
1710 M_TYPE (Packet_Uplink_Ack_Nack_t, u.PU_AckNack_GPRS_Struct, PU_AckNack_GPRS_t),
1711 M_TYPE (Packet_Uplink_Ack_Nack_t, u.PU_AckNack_EGPRS_Struct, PU_AckNack_EGPRS_t),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04001712 M_PADDING_BITS(Packet_Uplink_Ack_Nack_t ),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001713CSN_DESCR_END (Packet_Uplink_Ack_Nack_t)
1714
1715/*< Packet Uplink Assignment message content > */
1716static const
1717CSN_DESCR_BEGIN(CHANGE_MARK_t)
1718 M_UINT (CHANGE_MARK_t, CHANGE_MARK_1, 2),
1719
1720 M_NEXT_EXIST (CHANGE_MARK_t, Exist_CHANGE_MARK_2, 1),
1721 M_UINT (CHANGE_MARK_t, CHANGE_MARK_2, 2),
1722CSN_DESCR_END (CHANGE_MARK_t)
1723
1724static const
1725CSN_DESCR_BEGIN(Indirect_encoding_t)
1726 M_UINT (Indirect_encoding_t, MAIO, 6),
1727 M_UINT (Indirect_encoding_t, MA_NUMBER, 4),
1728
1729 M_NEXT_EXIST (Indirect_encoding_t, Exist_CHANGE_MARK, 1),
1730 M_TYPE (Indirect_encoding_t, CHANGE_MARK, CHANGE_MARK_t),
1731CSN_DESCR_END (Indirect_encoding_t)
1732
1733static const
1734CSN_DESCR_BEGIN(Direct_encoding_1_t)
1735 M_UINT (Direct_encoding_1_t, MAIO, 6),
1736 M_TYPE (Direct_encoding_1_t, GPRS_Mobile_Allocation, GPRS_Mobile_Allocation_t),
1737CSN_DESCR_END (Direct_encoding_1_t)
1738
1739static const
1740CSN_DESCR_BEGIN(Direct_encoding_2_t)
1741 M_UINT (Direct_encoding_2_t, MAIO, 6),
1742 M_UINT (Direct_encoding_2_t, HSN, 6),
1743 M_UINT_OFFSET(Direct_encoding_2_t, Length_of_MA_Frequency_List, 4, 3),
1744 M_VAR_ARRAY (Direct_encoding_2_t, MA_Frequency_List, Length_of_MA_Frequency_List, 0),
1745CSN_DESCR_END (Direct_encoding_2_t)
1746
1747static const
1748CSN_DESCR_BEGIN(Frequency_Parameters_t)
1749 M_UINT (Frequency_Parameters_t, TSC, 3),
1750
1751 M_UNION (Frequency_Parameters_t, 4),
1752 M_UINT (Frequency_Parameters_t, u.ARFCN, 10),
1753 M_TYPE (Frequency_Parameters_t, u.Indirect_encoding, Indirect_encoding_t),
1754 M_TYPE (Frequency_Parameters_t, u.Direct_encoding_1, Direct_encoding_1_t),
1755 M_TYPE (Frequency_Parameters_t, u.Direct_encoding_2, Direct_encoding_2_t),
1756CSN_DESCR_END (Frequency_Parameters_t)
1757
1758static const
1759CSN_DESCR_BEGIN(Packet_Request_Reference_t)
1760 M_UINT (Packet_Request_Reference_t, RANDOM_ACCESS_INFORMATION, 11),
1761 M_UINT_ARRAY (Packet_Request_Reference_t, FRAME_NUMBER, 8, 2),
1762CSN_DESCR_END (Packet_Request_Reference_t)
1763
1764static const
1765CSN_DESCR_BEGIN(Timeslot_Allocation_t)
1766 M_NEXT_EXIST (Timeslot_Allocation_t, Exist, 1),
1767 M_UINT (Timeslot_Allocation_t, USF_TN, 3),
1768CSN_DESCR_END (Timeslot_Allocation_t)
1769
1770static const
1771CSN_DESCR_BEGIN(Timeslot_Allocation_Power_Ctrl_Param_t)
1772 M_UINT (Timeslot_Allocation_Power_Ctrl_Param_t, ALPHA, 4),
1773
1774 M_NEXT_EXIST (Timeslot_Allocation_Power_Ctrl_Param_t, Slot[0].Exist, 2),
1775 M_UINT (Timeslot_Allocation_Power_Ctrl_Param_t, Slot[0].USF_TN, 3),
1776 M_UINT (Timeslot_Allocation_Power_Ctrl_Param_t, Slot[0].GAMMA_TN, 5),
1777
1778 M_NEXT_EXIST (Timeslot_Allocation_Power_Ctrl_Param_t, Slot[1].Exist, 2),
1779 M_UINT (Timeslot_Allocation_Power_Ctrl_Param_t, Slot[1].USF_TN, 3),
1780 M_UINT (Timeslot_Allocation_Power_Ctrl_Param_t, Slot[1].GAMMA_TN, 5),
1781
1782 M_NEXT_EXIST (Timeslot_Allocation_Power_Ctrl_Param_t, Slot[2].Exist, 2),
1783 M_UINT (Timeslot_Allocation_Power_Ctrl_Param_t, Slot[2].USF_TN, 3),
1784 M_UINT (Timeslot_Allocation_Power_Ctrl_Param_t, Slot[2].GAMMA_TN, 5),
1785
1786 M_NEXT_EXIST (Timeslot_Allocation_Power_Ctrl_Param_t, Slot[3].Exist, 2),
1787 M_UINT (Timeslot_Allocation_Power_Ctrl_Param_t, Slot[3].USF_TN, 3),
1788 M_UINT (Timeslot_Allocation_Power_Ctrl_Param_t, Slot[3].GAMMA_TN, 5),
1789
1790 M_NEXT_EXIST (Timeslot_Allocation_Power_Ctrl_Param_t, Slot[4].Exist, 2),
1791 M_UINT (Timeslot_Allocation_Power_Ctrl_Param_t, Slot[4].USF_TN, 3),
1792 M_UINT (Timeslot_Allocation_Power_Ctrl_Param_t, Slot[4].GAMMA_TN, 5),
1793
1794 M_NEXT_EXIST (Timeslot_Allocation_Power_Ctrl_Param_t, Slot[5].Exist, 2),
1795 M_UINT (Timeslot_Allocation_Power_Ctrl_Param_t, Slot[5].USF_TN, 3),
1796 M_UINT (Timeslot_Allocation_Power_Ctrl_Param_t, Slot[5].GAMMA_TN, 5),
1797
1798 M_NEXT_EXIST (Timeslot_Allocation_Power_Ctrl_Param_t, Slot[6].Exist, 2),
1799 M_UINT (Timeslot_Allocation_Power_Ctrl_Param_t, Slot[6].USF_TN, 3),
1800 M_UINT (Timeslot_Allocation_Power_Ctrl_Param_t, Slot[6].GAMMA_TN, 5),
1801
1802 M_NEXT_EXIST (Timeslot_Allocation_Power_Ctrl_Param_t, Slot[7].Exist, 2),
1803 M_UINT (Timeslot_Allocation_Power_Ctrl_Param_t, Slot[7].USF_TN, 3),
1804 M_UINT (Timeslot_Allocation_Power_Ctrl_Param_t, Slot[7].GAMMA_TN, 5),
1805CSN_DESCR_END (Timeslot_Allocation_Power_Ctrl_Param_t)
1806
1807/* USED in <Packet Uplink Assignment message content> */
1808static const
1809CSN_DESCR_BEGIN(Dynamic_Allocation_t)
1810 M_UINT (Dynamic_Allocation_t, Extended_Dynamic_Allocation, 1),
1811
1812 M_NEXT_EXIST (Dynamic_Allocation_t, Exist_P0, 2),
1813 M_UINT (Dynamic_Allocation_t, P0, 4),
1814 M_UINT (Dynamic_Allocation_t, PR_MODE, 1),
1815
1816 M_UINT (Dynamic_Allocation_t, USF_GRANULARITY, 1),
1817
1818 M_NEXT_EXIST (Dynamic_Allocation_t, Exist_UPLINK_TFI_ASSIGNMENT, 1),
1819 M_UINT (Dynamic_Allocation_t, UPLINK_TFI_ASSIGNMENT, 5),
1820
1821 M_NEXT_EXIST (Dynamic_Allocation_t, Exist_RLC_DATA_BLOCKS_GRANTED, 1),
1822 M_UINT (Dynamic_Allocation_t, RLC_DATA_BLOCKS_GRANTED, 8),
1823
1824 M_NEXT_EXIST (Dynamic_Allocation_t, Exist_TBF_Starting_Time, 1),
1825 M_TYPE (Dynamic_Allocation_t, TBF_Starting_Time, Starting_Frame_Number_t),
1826
1827 M_UNION (Dynamic_Allocation_t, 2),
1828 M_TYPE_ARRAY (Dynamic_Allocation_t, u.Timeslot_Allocation, Timeslot_Allocation_t, 8),
1829 M_TYPE (Dynamic_Allocation_t, u.Timeslot_Allocation_Power_Ctrl_Param, Timeslot_Allocation_Power_Ctrl_Param_t),
1830CSN_DESCR_END (Dynamic_Allocation_t)
1831
1832static const
1833CSN_DESCR_BEGIN(Single_Block_Allocation_t)
1834 M_UINT (Single_Block_Allocation_t, TIMESLOT_NUMBER, 3),
1835
1836 M_NEXT_EXIST (Single_Block_Allocation_t, Exist_ALPHA_and_GAMMA_TN, 2),
1837 M_UINT (Single_Block_Allocation_t, ALPHA, 4),
1838 M_UINT (Single_Block_Allocation_t, GAMMA_TN, 5),
1839
1840 M_NEXT_EXIST (Single_Block_Allocation_t, Exist_P0, 3),
1841 M_UINT (Single_Block_Allocation_t, P0, 4),
1842 M_UINT (Single_Block_Allocation_t, BTS_PWR_CTRL_MODE, 1),
1843 M_UINT (Single_Block_Allocation_t, PR_MODE, 1),
1844
1845 M_TYPE (Single_Block_Allocation_t, TBF_Starting_Time, Starting_Frame_Number_t),
1846CSN_DESCR_END (Single_Block_Allocation_t)
1847
1848static const
1849CSN_DESCR_BEGIN(DTM_Dynamic_Allocation_t)
1850 M_UINT (DTM_Dynamic_Allocation_t, Extended_Dynamic_Allocation, 1),
1851
1852 M_NEXT_EXIST (DTM_Dynamic_Allocation_t, Exist_P0, 2),
1853 M_UINT (DTM_Dynamic_Allocation_t, P0, 4),
1854 M_UINT (DTM_Dynamic_Allocation_t, PR_MODE, 1),
1855
1856 M_UINT (DTM_Dynamic_Allocation_t, USF_GRANULARITY, 1),
1857
1858 M_NEXT_EXIST (DTM_Dynamic_Allocation_t, Exist_UPLINK_TFI_ASSIGNMENT, 1),
1859 M_UINT (DTM_Dynamic_Allocation_t, UPLINK_TFI_ASSIGNMENT, 5),
1860
1861 M_NEXT_EXIST (DTM_Dynamic_Allocation_t, Exist_RLC_DATA_BLOCKS_GRANTED, 1),
1862 M_UINT (DTM_Dynamic_Allocation_t, RLC_DATA_BLOCKS_GRANTED, 8),
1863
1864 M_UNION (DTM_Dynamic_Allocation_t, 2),
1865 M_TYPE_ARRAY (DTM_Dynamic_Allocation_t, u.Timeslot_Allocation, Timeslot_Allocation_t, 8),
1866 M_TYPE (DTM_Dynamic_Allocation_t, u.Timeslot_Allocation_Power_Ctrl_Param, Timeslot_Allocation_Power_Ctrl_Param_t),
1867CSN_DESCR_END (DTM_Dynamic_Allocation_t)
1868
1869static const
1870CSN_DESCR_BEGIN(DTM_Single_Block_Allocation_t)
1871 M_UINT (DTM_Single_Block_Allocation_t, TIMESLOT_NUMBER, 3),
1872
1873 M_NEXT_EXIST (DTM_Single_Block_Allocation_t, Exist_ALPHA_and_GAMMA_TN, 2),
1874 M_UINT (DTM_Single_Block_Allocation_t, ALPHA, 4),
1875 M_UINT (DTM_Single_Block_Allocation_t, GAMMA_TN, 5),
1876
1877 M_NEXT_EXIST (DTM_Single_Block_Allocation_t, Exist_P0, 3),
1878 M_UINT (DTM_Single_Block_Allocation_t, P0, 4),
1879 M_UINT (DTM_Single_Block_Allocation_t, BTS_PWR_CTRL_MODE, 1),
1880 M_UINT (DTM_Single_Block_Allocation_t, PR_MODE, 1),
1881CSN_DESCR_END (DTM_Single_Block_Allocation_t)
1882
1883
1884/* Help structures */
1885typedef struct
1886{
1887 Global_TFI_t Global_TFI; /* 0 < Global TFI : < Global TFI IE > > */
1888} h0_Global_TFI_t;
1889
1890static const
1891CSN_DESCR_BEGIN(h0_Global_TFI_t)
1892 M_FIXED (h0_Global_TFI_t, 1, 0x00),
1893 M_TYPE (h0_Global_TFI_t, Global_TFI, Global_TFI_t),
1894CSN_DESCR_END (h0_Global_TFI_t)
1895
1896typedef struct
1897{
1898 guint32 TLLI;/* | 10 < TLLI : bit (32) >*/
1899} h10_TLLI_t;
1900
1901static const
1902CSN_DESCR_BEGIN(h10_TLLI_t)
1903 M_FIXED (h10_TLLI_t, 2, 0x02),
1904 M_UINT (h10_TLLI_t, TLLI, 32),
1905CSN_DESCR_END (h10_TLLI_t)
1906
1907typedef struct
1908{
1909 guint16 TQI;/*| 110 < TQI : bit (16) > */
1910} h110_TQI_t;
1911
1912static const
1913CSN_DESCR_BEGIN(h110_TQI_t)
1914 M_FIXED (h110_TQI_t, 3, 0x06),
1915 M_UINT (h110_TQI_t, TQI, 16),
1916CSN_DESCR_END (h110_TQI_t)
1917
1918typedef struct
1919{
1920 Packet_Request_Reference_t Packet_Request_Reference;/*| 111 < Packet Request Reference : < Packet Request Reference IE > > }*/
1921} h111_Packet_Request_Reference_t;
1922
1923static const
1924CSN_DESCR_BEGIN(h111_Packet_Request_Reference_t)
1925 M_FIXED (h111_Packet_Request_Reference_t, 3, 0x07),
1926 M_TYPE (h111_Packet_Request_Reference_t, Packet_Request_Reference, Packet_Request_Reference_t),
1927CSN_DESCR_END (h111_Packet_Request_Reference_t)
1928
1929static const
1930CSN_ChoiceElement_t PacketUplinkID[] =
1931{
Pau Espin Pedrol7cce8252020-01-24 16:41:14 +01001932 {1, 0, 0, M_TYPE(PacketUplinkID_t, u.Global_TFI, Global_TFI_t)},
1933 {2, 0x02, 0, M_UINT(PacketUplinkID_t, u.TLLI, 32)},
1934 {3, 0x06, 0, M_UINT(PacketUplinkID_t, u.TQI, 16)},
1935 {3, 0x07, 0, M_TYPE(PacketUplinkID_t, u.Packet_Request_Reference, Packet_Request_Reference_t)},
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001936};
1937
1938static const
1939CSN_DESCR_BEGIN(PacketUplinkID_t)
1940 M_CHOICE (PacketUplinkID_t, UnionType, PacketUplinkID, ElementsOf(PacketUplinkID)),
1941CSN_DESCR_END (PacketUplinkID_t)
1942
1943static const
1944CSN_DESCR_BEGIN(PUA_GPRS_AdditionsR99_t)
1945 M_NEXT_EXIST (PUA_GPRS_AdditionsR99_t, Exist_Packet_Extended_Timing_Advance, 1),
1946 M_UINT (PUA_GPRS_AdditionsR99_t, Packet_Extended_Timing_Advance, 2),
1947CSN_DESCR_END (PUA_GPRS_AdditionsR99_t)
1948
1949static const
1950CSN_DESCR_BEGIN (PUA_GPRS_t)
1951 M_UINT (PUA_GPRS_t, CHANNEL_CODING_COMMAND, 2),
Anders Broman8ea3cbe2020-01-28 17:36:33 +01001952 M_UINT (PUA_GPRS_t, TLLI_BLOCK_CHANNEL_CODING, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001953 M_TYPE (PUA_GPRS_t, Packet_Timing_Advance, Packet_Timing_Advance_t),
1954
1955 M_NEXT_EXIST (PUA_GPRS_t, Exist_Frequency_Parameters, 1),
1956 M_TYPE (PUA_GPRS_t, Frequency_Parameters, Frequency_Parameters_t),
1957
1958 M_UNION (PUA_GPRS_t, 4),
1959 CSN_ERROR (PUA_GPRS_t, "00 <extension> not implemented", CSN_ERROR_STREAM_NOT_SUPPORTED),
1960 M_TYPE (PUA_GPRS_t, u.Dynamic_Allocation, Dynamic_Allocation_t),
1961 M_TYPE (PUA_GPRS_t, u.Single_Block_Allocation, Single_Block_Allocation_t),
1962 CSN_ERROR (PUA_GPRS_t, "11 <Fixed Allocation> not supported", CSN_ERROR_STREAM_NOT_SUPPORTED),
1963
1964 M_NEXT_EXIST_OR_NULL(PUA_GPRS_t, Exist_AdditionsR99, 1),
1965 M_TYPE (PUA_GPRS_t, AdditionsR99, PUA_GPRS_AdditionsR99_t),
1966CSN_DESCR_END (PUA_GPRS_t)
1967
1968static const
1969CSN_DESCR_BEGIN(COMPACT_ReducedMA_t)
1970 M_UINT (COMPACT_ReducedMA_t, BitmapLength, 7),
1971 M_VAR_BITMAP (COMPACT_ReducedMA_t, ReducedMA_Bitmap, BitmapLength, 0),
1972
1973 M_NEXT_EXIST (COMPACT_ReducedMA_t, Exist_MAIO_2, 1),
1974 M_UINT (COMPACT_ReducedMA_t, MAIO_2, 6),
1975CSN_DESCR_END (COMPACT_TeducedMA_t)
1976
1977static const
1978CSN_DESCR_BEGIN(MultiBlock_Allocation_t)
1979 M_UINT (MultiBlock_Allocation_t, TIMESLOT_NUMBER, 3),
1980
1981 M_NEXT_EXIST (MultiBlock_Allocation_t, Exist_ALPHA_GAMMA_TN, 2),
1982 M_UINT (MultiBlock_Allocation_t, ALPHA, 4),
1983 M_UINT (MultiBlock_Allocation_t, GAMMA_TN, 5),
1984
1985 M_NEXT_EXIST (MultiBlock_Allocation_t, Exist_P0_BTS_PWR_CTRL_PR_MODE, 3),
1986 M_UINT (MultiBlock_Allocation_t, P0, 4),
1987 M_UINT (MultiBlock_Allocation_t, BTS_PWR_CTRL_MODE, 1),
1988 M_UINT (MultiBlock_Allocation_t, PR_MODE, 1),
1989
1990 M_TYPE (MultiBlock_Allocation_t, TBF_Starting_Time, Starting_Frame_Number_t),
1991 M_UINT (MultiBlock_Allocation_t, NUMBER_OF_RADIO_BLOCKS_ALLOCATED, 2),
1992CSN_DESCR_END (MultiBlock_Allocation_t)
1993
1994static const
1995CSN_DESCR_BEGIN (PUA_EGPRS_00_t)
1996 M_NEXT_EXIST (PUA_EGPRS_00_t, Exist_CONTENTION_RESOLUTION_TLLI, 1),
1997 M_UINT (PUA_EGPRS_00_t, CONTENTION_RESOLUTION_TLLI, 32),
1998
1999 M_NEXT_EXIST (PUA_EGPRS_00_t, Exist_COMPACT_ReducedMA, 1),
2000 M_TYPE (PUA_EGPRS_00_t, COMPACT_ReducedMA, COMPACT_ReducedMA_t),
2001
2002 M_UINT (PUA_EGPRS_00_t, EGPRS_CHANNEL_CODING_COMMAND, 4),
2003 M_UINT (PUA_EGPRS_00_t, RESEGMENT, 1),
2004 M_UINT (PUA_EGPRS_00_t, EGPRS_WindowSize, 5),
2005
2006 M_REC_ARRAY (PUA_EGPRS_00_t, AccessTechnologyType, NrOfAccessTechnologies, 4),
2007
2008 M_UINT (PUA_EGPRS_00_t, ARAC_RETRANSMISSION_REQUEST, 1),
2009 M_UINT (PUA_EGPRS_00_t, TLLI_BLOCK_CHANNEL_CODING, 1),
2010
2011 M_NEXT_EXIST (PUA_EGPRS_00_t, Exist_BEP_PERIOD2, 1),
2012 M_UINT (PUA_EGPRS_00_t, BEP_PERIOD2, 4),
2013
2014 M_TYPE (PUA_EGPRS_00_t, PacketTimingAdvance, Packet_Timing_Advance_t),
2015
2016 M_NEXT_EXIST (PUA_EGPRS_00_t, Exist_Packet_Extended_Timing_Advance, 1),
2017 M_UINT (PUA_EGPRS_00_t, Packet_Extended_Timing_Advance, 2),
2018
2019 M_NEXT_EXIST (PUA_EGPRS_00_t, Exist_Frequency_Parameters, 1),
2020 M_TYPE (PUA_EGPRS_00_t, Frequency_Parameters, Frequency_Parameters_t),
2021
2022 M_UNION (PUA_EGPRS_00_t, 4),
2023 CSN_ERROR (PUA_EGPRS_00_t, "00 <extension>", CSN_ERROR_STREAM_NOT_SUPPORTED),
2024 M_TYPE (PUA_EGPRS_00_t, u.Dynamic_Allocation, Dynamic_Allocation_t),
2025 M_TYPE (PUA_EGPRS_00_t, u.MultiBlock_Allocation, MultiBlock_Allocation_t),
2026 CSN_ERROR (PUA_EGPRS_00_t, "11 <Fixed Allocation>", CSN_ERROR_STREAM_NOT_SUPPORTED),
2027CSN_DESCR_END (PUA_EGPRS_00_t)
2028
2029static const
2030CSN_DESCR_BEGIN(PUA_EGPRS_t)
2031 M_UNION (PUA_EGPRS_t, 4),
2032 M_TYPE (PUA_EGPRS_t, u.PUA_EGPRS_00, PUA_EGPRS_00_t),
2033 CSN_ERROR (PUA_EGPRS_t, "01 <PUA EGPRS>", CSN_ERROR_STREAM_NOT_SUPPORTED),
2034 CSN_ERROR (PUA_EGPRS_t, "10 <PUA EGPRS>", CSN_ERROR_STREAM_NOT_SUPPORTED),
2035 CSN_ERROR (PUA_EGPRS_t, "11 <PUA EGPRS>", CSN_ERROR_STREAM_NOT_SUPPORTED),
2036CSN_DESCR_END (PUA_EGPRS_t)
2037
2038static const
2039CSN_DESCR_BEGIN(Packet_Uplink_Assignment_t)
2040 M_UINT (Packet_Uplink_Assignment_t, MESSAGE_TYPE, 6),
2041 M_UINT (Packet_Uplink_Assignment_t, PAGE_MODE, 2),
2042
2043 M_NEXT_EXIST (Packet_Uplink_Assignment_t, Exist_PERSISTENCE_LEVEL, 1),
2044 M_UINT_ARRAY (Packet_Uplink_Assignment_t, PERSISTENCE_LEVEL, 4, 4),
2045
2046 M_TYPE (Packet_Uplink_Assignment_t, ID, PacketUplinkID_t),
2047
2048 M_UNION (Packet_Uplink_Assignment_t, 2),
2049 M_TYPE (Packet_Uplink_Assignment_t, u.PUA_GPRS_Struct, PUA_GPRS_t),
2050 M_TYPE (Packet_Uplink_Assignment_t, u.PUA_EGPRS_Struct, PUA_EGPRS_t),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04002051
2052 M_PADDING_BITS(Packet_Uplink_Assignment_t ),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002053CSN_DESCR_END (Packet_Uplink_Assignment_t)
2054
2055/*< Packet Downlink Assignment message content > */
2056static const
2057CSN_DESCR_BEGIN(Measurement_Mapping_struct_t)
2058 M_TYPE (Measurement_Mapping_struct_t, Measurement_Starting_Time, Starting_Frame_Number_t),
2059 M_UINT (Measurement_Mapping_struct_t, MEASUREMENT_INTERVAL, 5),
2060 M_UINT (Measurement_Mapping_struct_t, MEASUREMENT_BITMAP, 8),
2061CSN_DESCR_END (Measurement_Mapping_struct_t)
2062
2063static const
2064CSN_ChoiceElement_t PacketDownlinkID[] =
2065{
Pau Espin Pedrol7cce8252020-01-24 16:41:14 +01002066 {1, 0, 0, M_TYPE(PacketDownlinkID_t, u.Global_TFI, Global_TFI_t)},
2067 {2, 0x02, 0, M_UINT(PacketDownlinkID_t, u.TLLI, 32)},
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002068};
2069
2070static const
2071CSN_DESCR_BEGIN(PacketDownlinkID_t)
2072 M_CHOICE (PacketDownlinkID_t, UnionType, PacketDownlinkID, ElementsOf(PacketDownlinkID)),
2073CSN_DESCR_END (PacketDownlinkID_t)
2074
2075static const
2076CSN_DESCR_BEGIN(PDA_AdditionsR99_t)
2077 M_NEXT_EXIST (PDA_AdditionsR99_t, Exist_EGPRS_Params, 4), /*if Exist_EGPRS_Params == FALSE then none of the following 4 vars exist */
2078 M_UINT (PDA_AdditionsR99_t, EGPRS_WindowSize, 5),
2079 M_UINT (PDA_AdditionsR99_t, LINK_QUALITY_MEASUREMENT_MODE, 2),
2080 M_NEXT_EXIST (PDA_AdditionsR99_t, Exist_BEP_PERIOD2, 1),
2081 M_UINT (PDA_AdditionsR99_t, BEP_PERIOD2, 4),
2082
2083 M_NEXT_EXIST (PDA_AdditionsR99_t, Exist_Packet_Extended_Timing_Advance, 1),
2084 M_UINT (PDA_AdditionsR99_t, Packet_Extended_Timing_Advance, 2),
2085
2086 M_NEXT_EXIST (PDA_AdditionsR99_t, Exist_COMPACT_ReducedMA, 1),
2087 M_TYPE (PDA_AdditionsR99_t, COMPACT_ReducedMA, COMPACT_ReducedMA_t),
2088CSN_DESCR_END (PDA_AdditionsR99_t)
2089
2090static const
2091CSN_DESCR_BEGIN (Packet_Downlink_Assignment_t)
2092 M_UINT (Packet_Downlink_Assignment_t, MESSAGE_TYPE, 6),
2093 M_UINT (Packet_Downlink_Assignment_t, PAGE_MODE, 2),
2094
2095 M_NEXT_EXIST (Packet_Downlink_Assignment_t, Exist_PERSISTENCE_LEVEL, 1),
2096 M_UINT_ARRAY (Packet_Downlink_Assignment_t, PERSISTENCE_LEVEL, 4, 4),
2097
2098 M_TYPE (Packet_Downlink_Assignment_t, ID, PacketDownlinkID_t),
2099
2100 M_FIXED (Packet_Downlink_Assignment_t, 1, 0x00),/*-- Message escape */
2101
2102 M_UINT (Packet_Downlink_Assignment_t, MAC_MODE, 2),
Anders Broman8ea3cbe2020-01-28 17:36:33 +01002103 M_UINT (Packet_Downlink_Assignment_t, RLC_MODE, 1),
2104 M_UINT (Packet_Downlink_Assignment_t, CONTROL_ACK, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002105 M_UINT (Packet_Downlink_Assignment_t, TIMESLOT_ALLOCATION, 8),
2106 M_TYPE (Packet_Downlink_Assignment_t, Packet_Timing_Advance, Packet_Timing_Advance_t),
2107
2108 M_NEXT_EXIST (Packet_Downlink_Assignment_t, Exist_P0_and_BTS_PWR_CTRL_MODE, 3),
2109 M_UINT (Packet_Downlink_Assignment_t, P0, 4),
Anders Broman8ea3cbe2020-01-28 17:36:33 +01002110 M_UINT (Packet_Downlink_Assignment_t, BTS_PWR_CTRL_MODE, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002111 M_UINT (Packet_Downlink_Assignment_t, PR_MODE, 1),
2112
2113 M_NEXT_EXIST (Packet_Downlink_Assignment_t, Exist_Frequency_Parameters, 1),
2114 M_TYPE (Packet_Downlink_Assignment_t, Frequency_Parameters, Frequency_Parameters_t),
2115
2116 M_NEXT_EXIST (Packet_Downlink_Assignment_t, Exist_DOWNLINK_TFI_ASSIGNMENT, 1),
2117 M_UINT (Packet_Downlink_Assignment_t, DOWNLINK_TFI_ASSIGNMENT, 5),
2118
2119 M_NEXT_EXIST (Packet_Downlink_Assignment_t, Exist_Power_Control_Parameters, 1),
2120 M_TYPE (Packet_Downlink_Assignment_t, Power_Control_Parameters, Power_Control_Parameters_t),
2121
2122 M_NEXT_EXIST (Packet_Downlink_Assignment_t, Exist_TBF_Starting_Time, 1),
2123 M_TYPE (Packet_Downlink_Assignment_t, TBF_Starting_Time, Starting_Frame_Number_t),
2124
2125 M_NEXT_EXIST (Packet_Downlink_Assignment_t, Exist_Measurement_Mapping, 1),
2126 M_TYPE (Packet_Downlink_Assignment_t, Measurement_Mapping, Measurement_Mapping_struct_t),
2127
2128 M_NEXT_EXIST_OR_NULL(Packet_Downlink_Assignment_t, Exist_AdditionsR99, 1),
2129 M_TYPE (Packet_Downlink_Assignment_t, AdditionsR99, PDA_AdditionsR99_t),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04002130
2131 M_PADDING_BITS (Packet_Downlink_Assignment_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002132CSN_DESCR_END (Packet_Downlink_Assignment_t)
2133
2134typedef Packet_Downlink_Assignment_t pdlaCheck_t;
2135
2136static const
2137CSN_DESCR_BEGIN(pdlaCheck_t)
2138 M_UINT (pdlaCheck_t, MESSAGE_TYPE, 6),
2139 M_UINT (pdlaCheck_t, PAGE_MODE, 2),
2140
2141 M_NEXT_EXIST (pdlaCheck_t, Exist_PERSISTENCE_LEVEL, 1),
2142 M_UINT_ARRAY (pdlaCheck_t, PERSISTENCE_LEVEL, 4, 4),
2143
2144 M_TYPE (pdlaCheck_t, ID, PacketDownlinkID_t),
2145CSN_DESCR_END (pdlaCheck_t)
2146
2147/* DTM Packet UL Assignment */
2148static const
2149CSN_DESCR_BEGIN(DTM_Packet_Uplink_Assignment_t)
2150 M_UINT (DTM_Packet_Uplink_Assignment_t, CHANNEL_CODING_COMMAND, 2),
Anders Broman8ea3cbe2020-01-28 17:36:33 +01002151 M_UINT (DTM_Packet_Uplink_Assignment_t, TLLI_BLOCK_CHANNEL_CODING, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002152 M_TYPE (DTM_Packet_Uplink_Assignment_t, Packet_Timing_Advance, Packet_Timing_Advance_t),
2153
2154 M_UNION (DTM_Packet_Uplink_Assignment_t, 3),
2155 CSN_ERROR (DTM_Packet_Uplink_Assignment_t, "Not Implemented", CSN_ERROR_STREAM_NOT_SUPPORTED),
2156 M_TYPE (DTM_Packet_Uplink_Assignment_t, u.DTM_Dynamic_Allocation, DTM_Dynamic_Allocation_t),
2157 M_TYPE (DTM_Packet_Uplink_Assignment_t, u.DTM_Single_Block_Allocation, DTM_Single_Block_Allocation_t),
2158 M_NEXT_EXIST_OR_NULL (DTM_Packet_Uplink_Assignment_t, Exist_EGPRS_Parameters, 3),
2159 M_UINT (DTM_Packet_Uplink_Assignment_t, EGPRS_CHANNEL_CODING_COMMAND, 4),
2160 M_UINT (DTM_Packet_Uplink_Assignment_t, RESEGMENT, 1),
2161 M_UINT (DTM_Packet_Uplink_Assignment_t, EGPRS_WindowSize, 5),
2162 M_NEXT_EXIST (DTM_Packet_Uplink_Assignment_t, Exist_Packet_Extended_Timing_Advance, 1),
2163 M_UINT (DTM_Packet_Uplink_Assignment_t, Packet_Extended_Timing_Advance, 2),
2164CSN_DESCR_END(DTM_Packet_Uplink_Assignment_t)
2165
2166static const
2167CSN_DESCR_BEGIN(DTM_UL_t)
2168 M_TYPE (DTM_UL_t, DTM_Packet_Uplink_Assignment, DTM_Packet_Uplink_Assignment_t),
2169CSN_DESCR_END(DTM_UL_t)
2170
2171/* DTM Packet DL Assignment */
2172static const
2173CSN_DESCR_BEGIN(DTM_Packet_Downlink_Assignment_t)
2174 M_UINT (DTM_Packet_Downlink_Assignment_t, MAC_MODE, 2),
Anders Broman8ea3cbe2020-01-28 17:36:33 +01002175 M_UINT (DTM_Packet_Downlink_Assignment_t, RLC_MODE ,1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002176 M_UINT (DTM_Packet_Downlink_Assignment_t, TIMESLOT_ALLOCATION, 8),
2177 M_TYPE (DTM_Packet_Downlink_Assignment_t, Packet_Timing_Advance, Packet_Timing_Advance_t),
2178
2179 M_NEXT_EXIST (DTM_Packet_Downlink_Assignment_t, Exist_P0_and_BTS_PWR_CTRL_MODE, 3),
2180 M_UINT (DTM_Packet_Downlink_Assignment_t, P0, 4),
Anders Broman8ea3cbe2020-01-28 17:36:33 +01002181 M_UINT (DTM_Packet_Downlink_Assignment_t, BTS_PWR_CTRL_MODE, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002182 M_UINT (DTM_Packet_Downlink_Assignment_t, PR_MODE, 1),
2183
2184 M_NEXT_EXIST (DTM_Packet_Downlink_Assignment_t, Exist_Power_Control_Parameters, 1),
2185 M_TYPE (DTM_Packet_Downlink_Assignment_t, Power_Control_Parameters, Power_Control_Parameters_t),
2186
2187 M_NEXT_EXIST (DTM_Packet_Downlink_Assignment_t, Exist_DOWNLINK_TFI_ASSIGNMENT, 1),
2188 M_UINT (DTM_Packet_Downlink_Assignment_t, DOWNLINK_TFI_ASSIGNMENT, 5),
2189
2190 M_NEXT_EXIST (DTM_Packet_Downlink_Assignment_t, Exist_Measurement_Mapping, 1),
2191 M_TYPE (DTM_Packet_Downlink_Assignment_t, Measurement_Mapping, Measurement_Mapping_struct_t),
2192 M_NEXT_EXIST_OR_NULL (DTM_Packet_Downlink_Assignment_t, EGPRS_Mode, 2),
2193 M_UINT (DTM_Packet_Downlink_Assignment_t, EGPRS_WindowSize, 5),
2194 M_UINT (DTM_Packet_Downlink_Assignment_t, LINK_QUALITY_MEASUREMENT_MODE, 2),
2195 M_NEXT_EXIST (DTM_Packet_Downlink_Assignment_t, Exist_Packet_Extended_Timing_Advance, 1),
2196 M_UINT (DTM_Packet_Downlink_Assignment_t, Packet_Extended_Timing_Advance, 2),
2197CSN_DESCR_END(DTM_Packet_Downlink_Assignment_t)
2198
2199static const
2200CSN_DESCR_BEGIN(DTM_DL_t)
2201 M_TYPE (DTM_DL_t, DTM_Packet_Downlink_Assignment, DTM_Packet_Downlink_Assignment_t),
2202CSN_DESCR_END(DTM_DL_t)
2203
2204/* GPRS Broadcast Information */
2205static const
2206CSN_DESCR_BEGIN(DTM_GPRS_Broadcast_Information_t)
2207 M_TYPE (DTM_GPRS_Broadcast_Information_t, GPRS_Cell_Options, GPRS_Cell_Options_t),
2208 M_TYPE (DTM_GPRS_Broadcast_Information_t, GPRS_Power_Control_Parameters, GPRS_Power_Control_Parameters_t),
2209CSN_DESCR_END(DTM_GPRS_Broadcast_Information_t)
2210
2211static const
2212CSN_DESCR_BEGIN(DTM_GPRS_B_t)
2213 M_TYPE (DTM_GPRS_B_t, DTM_GPRS_Broadcast_Information, DTM_GPRS_Broadcast_Information_t),
2214CSN_DESCR_END(DTM_GPRS_B_t)
2215
2216static const
2217CSN_DESCR_BEGIN(DTM_Channel_Request_Description_t)
2218 M_UINT (DTM_Channel_Request_Description_t, DTM_Pkt_Est_Cause, 2),
2219 M_TYPE (DTM_Channel_Request_Description_t, Channel_Request_Description, Channel_Request_Description_t),
2220 M_NEXT_EXIST (DTM_Channel_Request_Description_t, Exist_PFI, 1),
2221 M_UINT (DTM_Channel_Request_Description_t, PFI, 7),
2222CSN_DESCR_END(DTM_Channel_Request_Description_t)
2223/* DTM */
2224
2225/*< Packet Paging Request message content > */
2226typedef struct
2227{
2228 guint8 Length_of_Mobile_Identity_contents;/* bit (4) */
2229 guint8 Mobile_Identity[8];/* octet (val (Length of Mobile Identity contents)) */
2230} Mobile_Identity_t; /* helper */
2231
2232static const
2233CSN_DESCR_BEGIN(Mobile_Identity_t)
2234 M_UINT (Mobile_Identity_t, Length_of_Mobile_Identity_contents, 4),
2235 M_VAR_ARRAY (Mobile_Identity_t, Mobile_Identity, Length_of_Mobile_Identity_contents, 0),
2236CSN_DESCR_END (Mobile_Identity_t)
2237
2238static const
2239CSN_DESCR_BEGIN(Page_request_for_TBF_establishment_t)
2240 M_UNION (Page_request_for_TBF_establishment_t, 2),
2241 M_UINT_ARRAY (Page_request_for_TBF_establishment_t, u.PTMSI, 8, 4),/* bit (32) == 8*4 */
2242 M_TYPE (Page_request_for_TBF_establishment_t, u.Mobile_Identity, Mobile_Identity_t),
2243CSN_DESCR_END (Page_request_for_TBF_establishment_t)
2244
2245static const
2246CSN_DESCR_BEGIN(Page_request_for_RR_conn_t)
2247 M_UNION (Page_request_for_RR_conn_t, 2),
2248 M_UINT_ARRAY (Page_request_for_RR_conn_t, u.TMSI, 8, 4),/* bit (32) == 8*4 */
2249 M_TYPE (Page_request_for_RR_conn_t, u.Mobile_Identity, Mobile_Identity_t),
2250
2251 M_UINT (Page_request_for_RR_conn_t, CHANNEL_NEEDED, 2),
2252
2253 M_NEXT_EXIST (Page_request_for_RR_conn_t, Exist_eMLPP_PRIORITY, 1),
2254 M_UINT (Page_request_for_RR_conn_t, eMLPP_PRIORITY, 3),
2255CSN_DESCR_END (Page_request_for_RR_conn_t)
2256
2257static const
2258CSN_DESCR_BEGIN(Repeated_Page_info_t)
2259 M_UNION (Repeated_Page_info_t, 2),
2260 M_TYPE (Repeated_Page_info_t, u.Page_req_TBF, Page_request_for_TBF_establishment_t),
2261 M_TYPE (Repeated_Page_info_t, u.Page_req_RR, Page_request_for_RR_conn_t),
2262CSN_DESCR_END (Repeated_Page_info_t)
2263
2264static const
2265CSN_DESCR_BEGIN(Packet_Paging_Request_t)
2266 M_UINT (Packet_Paging_Request_t, MESSAGE_TYPE, 6),
2267 M_UINT (Packet_Paging_Request_t, PAGE_MODE, 2),
2268
2269 M_NEXT_EXIST (Packet_Paging_Request_t, Exist_PERSISTENCE_LEVEL, 1),
2270 M_UINT_ARRAY (Packet_Paging_Request_t, PERSISTENCE_LEVEL, 4, 4), /* 4bit*4 */
2271
2272 M_NEXT_EXIST (Packet_Paging_Request_t, Exist_NLN, 1),
2273 M_UINT (Packet_Paging_Request_t, NLN, 2),
2274
2275 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 +04002276 M_PADDING_BITS(Packet_Paging_Request_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002277CSN_DESCR_END (Packet_Paging_Request_t)
2278
2279static const
2280CSN_DESCR_BEGIN(Packet_PDCH_Release_t)
2281 M_UINT (Packet_PDCH_Release_t, MESSAGE_TYPE, 6),
2282 M_UINT (Packet_PDCH_Release_t, PAGE_MODE, 2),
2283
2284 M_FIXED (Packet_PDCH_Release_t, 1, 0x01),
2285 M_UINT (Packet_PDCH_Release_t, TIMESLOTS_AVAILABLE, 8),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04002286 M_PADDING_BITS(Packet_PDCH_Release_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002287CSN_DESCR_END (Packet_PDCH_Release_t)
2288
2289/*< Packet Power Control/Timing Advance message content >*/
2290static const
2291CSN_DESCR_BEGIN(GlobalTimingAndPower_t)
2292 M_TYPE (GlobalTimingAndPower_t, Global_Packet_Timing_Advance, Global_Packet_Timing_Advance_t),
2293 M_TYPE (GlobalTimingAndPower_t, Power_Control_Parameters, Power_Control_Parameters_t),
2294CSN_DESCR_END (GlobalTimingAndPower_t)
2295
2296static const
2297CSN_DESCR_BEGIN(GlobalTimingOrPower_t)
2298 M_UNION (GlobalTimingOrPower_t, 2),
2299 M_TYPE (GlobalTimingOrPower_t, u.Global_Packet_Timing_Advance, Global_Packet_Timing_Advance_t),
2300 M_TYPE (GlobalTimingOrPower_t, u.Power_Control_Parameters, Power_Control_Parameters_t),
2301CSN_DESCR_END (GlobalTimingOrPower_t)
2302
2303static const
2304CSN_ChoiceElement_t PacketPowerControlTimingAdvanceID[] =
2305{
Pau Espin Pedrol7cce8252020-01-24 16:41:14 +01002306 {1, 0, 0, M_TYPE(PacketPowerControlTimingAdvanceID_t, u.Global_TFI, Global_TFI_t)},
2307 {3, 0x06, 0, M_UINT(PacketPowerControlTimingAdvanceID_t, u.TQI, 16)},
2308 {3, 0x07, 0, M_TYPE(PacketPowerControlTimingAdvanceID_t, u.Packet_Request_Reference, Packet_Request_Reference_t)},
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002309};
2310
2311static const
2312CSN_DESCR_BEGIN(PacketPowerControlTimingAdvanceID_t)
2313 M_CHOICE (PacketPowerControlTimingAdvanceID_t, UnionType, PacketPowerControlTimingAdvanceID, ElementsOf(PacketPowerControlTimingAdvanceID)),
2314CSN_DESCR_END (PacketPowerControlTimingAdvanceID_t)
2315
2316static const
2317CSN_DESCR_BEGIN(Packet_Power_Control_Timing_Advance_t)
2318 M_UINT (Packet_Power_Control_Timing_Advance_t, MESSAGE_TYPE, 6),
2319 M_UINT (Packet_Power_Control_Timing_Advance_t, PAGE_MODE, 2),
2320
2321 M_TYPE (Packet_Power_Control_Timing_Advance_t, ID, PacketPowerControlTimingAdvanceID_t),
2322
2323 /*-- Message escape*/
2324 M_FIXED (Packet_Power_Control_Timing_Advance_t, 1, 0x00),
2325
2326 M_NEXT_EXIST (Packet_Power_Control_Timing_Advance_t, Exist_Global_Power_Control_Parameters, 1),
2327 M_TYPE (Packet_Power_Control_Timing_Advance_t, Global_Power_Control_Parameters, Global_Power_Control_Parameters_t),
2328
2329 M_UNION (Packet_Power_Control_Timing_Advance_t, 2),
2330 M_TYPE (Packet_Power_Control_Timing_Advance_t, u.GlobalTimingAndPower, GlobalTimingAndPower_t),
2331 M_TYPE (Packet_Power_Control_Timing_Advance_t, u.GlobalTimingOrPower, GlobalTimingOrPower_t),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04002332
2333 M_PADDING_BITS(Packet_Power_Control_Timing_Advance_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002334CSN_DESCR_END (Packet_Power_Control_Timing_Advance_t)
2335
2336/*< Packet Queueing Notification message content > */
2337static const
2338CSN_DESCR_BEGIN(Packet_Queueing_Notification_t)
2339 M_UINT (Packet_Queueing_Notification_t, MESSAGE_TYPE, 6),
2340 M_UINT (Packet_Queueing_Notification_t, PAGE_MODE, 2),
2341
2342 M_FIXED (Packet_Queueing_Notification_t, 3, 0x07),/* 111 Fixed */
2343 M_TYPE (Packet_Queueing_Notification_t, Packet_Request_Reference, Packet_Request_Reference_t),
2344
2345 M_UINT (Packet_Queueing_Notification_t, TQI, 16),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04002346 M_PADDING_BITS(Packet_Queueing_Notification_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002347CSN_DESCR_END (Packet_Queueing_Notification_t)
2348
2349/* USED in Packet Timeslot Reconfigure message content
2350 * This is almost the same structure as used in
2351 * <Packet Uplink Assignment message content> but UPLINK_TFI_ASSIGNMENT is removed.
2352 */
2353static const
2354CSN_DESCR_BEGIN(TRDynamic_Allocation_t)
2355 M_UINT (TRDynamic_Allocation_t, Extended_Dynamic_Allocation, 1),
2356
2357 M_NEXT_EXIST (TRDynamic_Allocation_t, Exist_P0, 2),
2358 M_UINT (TRDynamic_Allocation_t, P0, 4),
2359 M_UINT (TRDynamic_Allocation_t, PR_MODE, 1),
2360
2361 M_UINT (TRDynamic_Allocation_t, USF_GRANULARITY, 1),
2362
2363 M_NEXT_EXIST (TRDynamic_Allocation_t, Exist_RLC_DATA_BLOCKS_GRANTED, 1),
2364 M_UINT (TRDynamic_Allocation_t, RLC_DATA_BLOCKS_GRANTED, 8),
2365
2366 M_NEXT_EXIST (TRDynamic_Allocation_t, Exist_TBF_Starting_Time, 1),
2367 M_TYPE (TRDynamic_Allocation_t, TBF_Starting_Time, Starting_Frame_Number_t),
2368
2369 M_UNION (TRDynamic_Allocation_t, 2),
2370 M_TYPE_ARRAY (TRDynamic_Allocation_t, u.Timeslot_Allocation, Timeslot_Allocation_t, 8),
2371 M_TYPE (TRDynamic_Allocation_t, u.Timeslot_Allocation_Power_Ctrl_Param, Timeslot_Allocation_Power_Ctrl_Param_t),
2372CSN_DESCR_END (TRDynamic_Allocation_t)
2373
2374/*< Packet Timeslot Reconfigure message content > */
2375static const
2376CSN_DESCR_BEGIN(PTR_GPRS_AdditionsR99_t)
2377 M_NEXT_EXIST (PTR_GPRS_AdditionsR99_t, Exist_Packet_Extended_Timing_Advance, 1),
2378 M_UINT (PTR_GPRS_AdditionsR99_t, Packet_Extended_Timing_Advance, 2),
2379CSN_DESCR_END (PTR_GPRS_AdditionsR99_t)
2380
2381static const
2382CSN_DESCR_BEGIN (PTR_GPRS_t)
2383 M_UINT (PTR_GPRS_t, CHANNEL_CODING_COMMAND, 2),
2384 M_TYPE (PTR_GPRS_t, Common_Timeslot_Reconfigure_Data.Global_Packet_Timing_Advance, Global_Packet_Timing_Advance_t),
2385 M_UINT (PTR_GPRS_t, Common_Timeslot_Reconfigure_Data.DOWNLINK_RLC_MODE, 1),
2386 M_UINT (PTR_GPRS_t, Common_Timeslot_Reconfigure_Data.CONTROL_ACK, 1),
2387
2388 M_NEXT_EXIST (PTR_GPRS_t, Common_Timeslot_Reconfigure_Data.Exist_DOWNLINK_TFI_ASSIGNMENT, 1),
2389 M_UINT (PTR_GPRS_t, Common_Timeslot_Reconfigure_Data.DOWNLINK_TFI_ASSIGNMENT, 5),
2390
2391 M_NEXT_EXIST (PTR_GPRS_t, Common_Timeslot_Reconfigure_Data.Exist_UPLINK_TFI_ASSIGNMENT, 1),
2392 M_UINT (PTR_GPRS_t, Common_Timeslot_Reconfigure_Data.UPLINK_TFI_ASSIGNMENT, 5),
2393
2394 M_UINT (PTR_GPRS_t, Common_Timeslot_Reconfigure_Data.DOWNLINK_TIMESLOT_ALLOCATION, 8),
2395
2396 M_NEXT_EXIST (PTR_GPRS_t, Common_Timeslot_Reconfigure_Data.Exist_Frequency_Parameters, 1),
2397 M_TYPE (PTR_GPRS_t, Common_Timeslot_Reconfigure_Data.Frequency_Parameters, Frequency_Parameters_t),
2398
2399 M_UNION (PTR_GPRS_t, 2),
2400 M_TYPE (PTR_GPRS_t, u.Dynamic_Allocation, TRDynamic_Allocation_t),
2401 CSN_ERROR (PTR_GPRS_t, "1 - Fixed Allocation was removed", CSN_ERROR_STREAM_NOT_SUPPORTED),
2402
2403 M_NEXT_EXIST_OR_NULL(PTR_GPRS_t, Exist_AdditionsR99, 1),
2404 M_TYPE (PTR_GPRS_t, AdditionsR99, PTR_GPRS_AdditionsR99_t),
2405CSN_DESCR_END (PTR_GPRS_t)
2406
2407static const
2408CSN_DESCR_BEGIN(PTR_EGPRS_00_t)
2409 M_NEXT_EXIST (PTR_EGPRS_00_t, Exist_COMPACT_ReducedMA, 1),
2410 M_TYPE (PTR_EGPRS_00_t, COMPACT_ReducedMA, COMPACT_ReducedMA_t),
2411
2412 M_UINT (PTR_EGPRS_00_t, EGPRS_ChannelCodingCommand, 4),
2413 M_UINT (PTR_EGPRS_00_t, RESEGMENT, 1),
2414
2415 M_NEXT_EXIST (PTR_EGPRS_00_t, Exist_DOWNLINK_EGPRS_WindowSize, 1),
2416 M_UINT (PTR_EGPRS_00_t, DOWNLINK_EGPRS_WindowSize, 5),
2417
2418 M_NEXT_EXIST (PTR_EGPRS_00_t, Exist_UPLINK_EGPRS_WindowSize, 1),
2419 M_UINT (PTR_EGPRS_00_t, UPLINK_EGPRS_WindowSize, 5),
2420
2421 M_UINT (PTR_EGPRS_00_t, LINK_QUALITY_MEASUREMENT_MODE, 2),
2422
2423 M_TYPE (PTR_EGPRS_00_t, Common_Timeslot_Reconfigure_Data.Global_Packet_Timing_Advance, Global_Packet_Timing_Advance_t),
2424
2425 M_NEXT_EXIST (PTR_EGPRS_00_t, Exist_Packet_Extended_Timing_Advance, 1),
2426 M_UINT (PTR_EGPRS_00_t, Packet_Extended_Timing_Advance, 2),
2427
2428 M_UINT (PTR_EGPRS_00_t, Common_Timeslot_Reconfigure_Data.DOWNLINK_RLC_MODE, 1),
2429 M_UINT (PTR_EGPRS_00_t, Common_Timeslot_Reconfigure_Data.CONTROL_ACK, 1),
2430
2431 M_NEXT_EXIST (PTR_EGPRS_00_t, Common_Timeslot_Reconfigure_Data.Exist_DOWNLINK_TFI_ASSIGNMENT, 1),
2432 M_UINT (PTR_EGPRS_00_t, Common_Timeslot_Reconfigure_Data.DOWNLINK_TFI_ASSIGNMENT, 5),
2433
2434 M_NEXT_EXIST (PTR_EGPRS_00_t, Common_Timeslot_Reconfigure_Data.Exist_UPLINK_TFI_ASSIGNMENT, 1),
2435 M_UINT (PTR_EGPRS_00_t, Common_Timeslot_Reconfigure_Data.UPLINK_TFI_ASSIGNMENT, 5),
2436
2437 M_UINT (PTR_EGPRS_00_t, Common_Timeslot_Reconfigure_Data.DOWNLINK_TIMESLOT_ALLOCATION, 8),
2438
2439 M_NEXT_EXIST (PTR_EGPRS_00_t, Common_Timeslot_Reconfigure_Data.Exist_Frequency_Parameters, 1),
2440 M_TYPE (PTR_EGPRS_00_t, Common_Timeslot_Reconfigure_Data.Frequency_Parameters, Frequency_Parameters_t),
2441
2442 M_UNION (PTR_EGPRS_00_t, 2),
2443 M_TYPE (PTR_EGPRS_00_t, u.Dynamic_Allocation, TRDynamic_Allocation_t),
2444 CSN_ERROR (PTR_EGPRS_00_t, "1 <Fixed Allocation>", CSN_ERROR_STREAM_NOT_SUPPORTED),
2445CSN_DESCR_END (PTR_EGPRS_00_t)
2446
2447static const
2448CSN_DESCR_BEGIN(PTR_EGPRS_t)
2449 M_UNION (PTR_EGPRS_t, 4),
2450 M_TYPE (PTR_EGPRS_t, u.PTR_EGPRS_00, PTR_EGPRS_00_t),
2451 CSN_ERROR (PTR_EGPRS_t, "01 <PTR_EGPRS>", CSN_ERROR_STREAM_NOT_SUPPORTED),
2452 CSN_ERROR (PTR_EGPRS_t, "10 <PTR_EGPRS>", CSN_ERROR_STREAM_NOT_SUPPORTED),
2453 CSN_ERROR (PTR_EGPRS_t, "11 <PTR_EGPRS>", CSN_ERROR_STREAM_NOT_SUPPORTED),
2454CSN_DESCR_END (PTR_EGPRS_t)
2455
2456static const
2457CSN_DESCR_BEGIN(Packet_Timeslot_Reconfigure_t)
2458 M_UINT (Packet_Timeslot_Reconfigure_t, MESSAGE_TYPE, 6),
2459 M_UINT (Packet_Timeslot_Reconfigure_t, PAGE_MODE, 2),
2460
2461 M_FIXED (Packet_Timeslot_Reconfigure_t, 1, 0x00),
2462 M_TYPE (Packet_Timeslot_Reconfigure_t, Global_TFI, Global_TFI_t),
2463
2464 M_UNION (Packet_Timeslot_Reconfigure_t, 2),
2465 M_TYPE (Packet_Timeslot_Reconfigure_t, u.PTR_GPRS_Struct, PTR_GPRS_t),
2466 M_TYPE (Packet_Timeslot_Reconfigure_t, u.PTR_EGPRS_Struct, PTR_EGPRS_t),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04002467
2468 M_PADDING_BITS(Packet_Timeslot_Reconfigure_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002469CSN_DESCR_END (Packet_Timeslot_Reconfigure_t)
2470
2471typedef Packet_Timeslot_Reconfigure_t PTRCheck_t;
2472
2473static const
2474CSN_DESCR_BEGIN(PTRCheck_t)
2475 M_UINT (PTRCheck_t, MESSAGE_TYPE, 6),
2476 M_UINT (PTRCheck_t, PAGE_MODE, 2),
2477 M_FIXED (PTRCheck_t, 1, 0x00),/* 0 fixed */
2478 M_TYPE (PTRCheck_t, Global_TFI, Global_TFI_t),
2479CSN_DESCR_END (PTRCheck_t)
2480
2481/*< Packet PRACH Parameters message content > */
2482static const
2483CSN_DESCR_BEGIN(PRACH_Control_t)
2484 M_UINT_ARRAY (PRACH_Control_t, ACC_CONTR_CLASS, 8, 2), /* bit (16) == 8bit*2 */
2485 M_UINT_ARRAY (PRACH_Control_t, MAX_RETRANS, 2, 4), /* bit (2) * 4 */
2486 M_UINT (PRACH_Control_t, S, 4),
2487 M_UINT (PRACH_Control_t, TX_INT, 4),
2488 M_NEXT_EXIST (PRACH_Control_t, Exist_PERSISTENCE_LEVEL, 1),
2489 M_UINT_ARRAY (PRACH_Control_t, PERSISTENCE_LEVEL, 4, 4),
2490CSN_DESCR_END (PRACH_Control_t)
2491
2492static const
2493CSN_DESCR_BEGIN(Cell_Allocation_t)
2494 M_REC_ARRAY (Cell_Allocation_t, RFL_Number, NoOfRFLs, 4),
2495CSN_DESCR_END (Cell_Allocation_t)
2496
2497static const
2498CSN_DESCR_BEGIN(HCS_t)
2499 M_UINT (HCS_t, PRIORITY_CLASS, 3),
2500 M_UINT (HCS_t, HCS_THR, 5),
2501CSN_DESCR_END (HCS_t)
2502
2503static const
2504CSN_DESCR_BEGIN(Location_Repeat_t)
2505 M_UINT (Location_Repeat_t, PBCCH_LOCATION, 2),
2506 M_UINT (Location_Repeat_t, PSI1_REPEAT_PERIOD, 4),
2507CSN_DESCR_END (Location_Repeat_t)
2508
2509static const
2510CSN_DESCR_BEGIN(SI13_PBCCH_Location_t)
2511 M_UNION (SI13_PBCCH_Location_t, 2),
2512 M_UINT (SI13_PBCCH_Location_t, u.SI13_LOCATION, 1),
2513 M_TYPE (SI13_PBCCH_Location_t, u.lr, Location_Repeat_t),
2514CSN_DESCR_END (SI13_PBCCH_Location_t)
2515
2516static const
2517CSN_DESCR_BEGIN(Cell_Selection_t)
2518 M_UINT (Cell_Selection_t, BSIC, 6),
2519 M_UINT (Cell_Selection_t, CELL_BAR_ACCESS_2, 1),
2520 M_UINT (Cell_Selection_t, EXC_ACC, 1),
2521 M_UINT (Cell_Selection_t, SAME_RA_AS_SERVING_CELL, 1),
2522 M_NEXT_EXIST (Cell_Selection_t, Exist_RXLEV_and_TXPWR, 2),
2523 M_UINT (Cell_Selection_t, GPRS_RXLEV_ACCESS_MIN, 6),
2524 M_UINT (Cell_Selection_t, GPRS_MS_TXPWR_MAX_CCH, 5),
2525 M_NEXT_EXIST (Cell_Selection_t, Exist_OFFSET_and_TIME, 2),
2526 M_UINT (Cell_Selection_t, GPRS_TEMPORARY_OFFSET, 3),
2527 M_UINT (Cell_Selection_t, GPRS_PENALTY_TIME, 5),
2528 M_NEXT_EXIST (Cell_Selection_t, Exist_GPRS_RESELECT_OFFSET, 1),
2529 M_UINT (Cell_Selection_t, GPRS_RESELECT_OFFSET, 5),
2530 M_NEXT_EXIST (Cell_Selection_t, Exist_HCS, 1),
2531 M_TYPE (Cell_Selection_t, HCS, HCS_t),
2532 M_NEXT_EXIST (Cell_Selection_t, Exist_SI13_PBCCH_Location, 1),
2533 M_TYPE (Cell_Selection_t, SI13_PBCCH_Location, SI13_PBCCH_Location_t),
2534CSN_DESCR_END (Cell_Selection_t)
2535
2536static const
2537CSN_DESCR_BEGIN(Cell_Selection_Params_With_FreqDiff_t)
2538 M_VAR_BITMAP (Cell_Selection_Params_With_FreqDiff_t, FREQUENCY_DIFF, FREQ_DIFF_LENGTH, 0),
2539 M_TYPE (Cell_Selection_Params_With_FreqDiff_t, Cell_SelectionParams, Cell_Selection_t),
2540CSN_DESCR_END (Cell_Selection_Params_With_FreqDiff_t)
2541
2542static const
2543CSN_DESCR_BEGIN(NeighbourCellParameters_t)
2544 M_UINT (NeighbourCellParameters_t, START_FREQUENCY, 10),
2545 M_TYPE (NeighbourCellParameters_t, Cell_Selection, Cell_Selection_t),
2546 M_UINT (NeighbourCellParameters_t, NR_OF_REMAINING_CELLS, 4),
2547 M_UINT_OFFSET(NeighbourCellParameters_t, FREQ_DIFF_LENGTH, 3, 1),/* offset 1 */
2548 M_VAR_TARRAY (NeighbourCellParameters_t, Cell_Selection_Params_With_FreqDiff, Cell_Selection_Params_With_FreqDiff_t, NR_OF_REMAINING_CELLS),
2549CSN_DESCR_END (NeighbourCellParameters_t)
2550
2551static const
2552CSN_DESCR_BEGIN(NeighbourCellList_t)
2553 M_REC_TARRAY (NeighbourCellList_t, Parameters, NeighbourCellParameters_t, Count),
2554CSN_DESCR_END (NeighbourCellList_t)
2555
2556static const
2557CSN_DESCR_BEGIN(Cell_Selection_2_t)
2558 M_UINT (Cell_Selection_2_t, CELL_BAR_ACCESS_2, 1),
2559 M_UINT (Cell_Selection_2_t, EXC_ACC, 1),
2560 M_UINT (Cell_Selection_2_t, SAME_RA_AS_SERVING_CELL, 1),
2561 M_NEXT_EXIST (Cell_Selection_2_t, Exist_RXLEV_and_TXPWR, 2),
2562 M_UINT (Cell_Selection_2_t, GPRS_RXLEV_ACCESS_MIN, 6),
2563 M_UINT (Cell_Selection_2_t, GPRS_MS_TXPWR_MAX_CCH, 5),
2564 M_NEXT_EXIST (Cell_Selection_2_t, Exist_OFFSET_and_TIME, 2),
2565 M_UINT (Cell_Selection_2_t, GPRS_TEMPORARY_OFFSET, 3),
2566 M_UINT (Cell_Selection_2_t, GPRS_PENALTY_TIME, 5),
2567 M_NEXT_EXIST (Cell_Selection_2_t, Exist_GPRS_RESELECT_OFFSET, 1),
2568 M_UINT (Cell_Selection_2_t, GPRS_RESELECT_OFFSET, 5),
2569 M_NEXT_EXIST (Cell_Selection_2_t, Exist_HCS, 1),
2570 M_TYPE (Cell_Selection_2_t, HCS, HCS_t),
2571 M_NEXT_EXIST (Cell_Selection_2_t, Exist_SI13_PBCCH_Location, 1),
2572 M_TYPE (Cell_Selection_2_t, SI13_PBCCH_Location, SI13_PBCCH_Location_t),
2573CSN_DESCR_END (Cell_Selection_2_t)
2574
2575static const
2576CSN_DESCR_BEGIN(Packet_PRACH_Parameters_t)
2577 M_UINT (Packet_PRACH_Parameters_t, MESSAGE_TYPE, 6),
2578 M_UINT (Packet_PRACH_Parameters_t, PAGE_MODE, 2),
2579
2580 M_TYPE (Packet_PRACH_Parameters_t, PRACH_Control, PRACH_Control_t),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04002581 M_PADDING_BITS(Packet_PRACH_Parameters_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002582CSN_DESCR_END (Packet_PRACH_Parameters_t)
2583
2584/* < Packet Access Reject message content > */
2585static const
2586CSN_ChoiceElement_t RejectID[] =
2587{
Pau Espin Pedrol7cce8252020-01-24 16:41:14 +01002588 {1, 0x00, 0, M_UINT(RejectID_t, u.TLLI, 32)},
2589 {2, 0x02, 0, M_TYPE(RejectID_t, u.Packet_Request_Reference, Packet_Request_Reference_t)},
2590 {2, 0x03, 0, M_TYPE(RejectID_t, u.Global_TFI, Global_TFI_t)},
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002591};
2592
2593static const
2594CSN_DESCR_BEGIN(RejectID_t)
2595 M_CHOICE (RejectID_t, UnionType, RejectID, ElementsOf(RejectID)),
2596CSN_DESCR_END (RejectID_t)
2597
2598static const
2599CSN_DESCR_BEGIN(Reject_t)
2600 M_TYPE (Reject_t, ID, RejectID_t),
2601
2602 M_NEXT_EXIST (Reject_t, Exist_Wait, 2),
2603 M_UINT (Reject_t, WAIT_INDICATION, 8),
2604 M_UINT (Reject_t, WAIT_INDICATION_SIZE, 1),
2605CSN_DESCR_END (Reject_t)
2606
2607static const
2608CSN_DESCR_BEGIN(Packet_Access_Reject_t)
2609 M_UINT (Packet_Access_Reject_t, MESSAGE_TYPE, 6),
2610 M_UINT (Packet_Access_Reject_t, PAGE_MODE, 2),
2611
Pau Espin Pedrol81b40cb2020-03-23 15:23:51 +01002612 M_REC_TARRAY_1(Packet_Access_Reject_t, Reject, Reject_t, Count_Reject),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04002613 M_PADDING_BITS(Packet_Access_Reject_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002614CSN_DESCR_END (Packet_Access_Reject_t)
2615
2616/* < Packet Cell Change Order message content > */
2617static const
2618CSN_ChoiceElement_t PacketCellChangeOrderID[] =
2619{
Pau Espin Pedrol7cce8252020-01-24 16:41:14 +01002620 {1, 0, 0, M_TYPE(PacketCellChangeOrderID_t, u.Global_TFI, Global_TFI_t)},
2621 {2, 0x02, 0, M_UINT(PacketCellChangeOrderID_t, u.TLLI, 32)},
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002622};
2623/* PacketCellChangeOrderID_t; */
2624
2625static const
2626CSN_DESCR_BEGIN(PacketCellChangeOrderID_t)
2627 M_CHOICE (PacketCellChangeOrderID_t, UnionType, PacketCellChangeOrderID, ElementsOf(PacketCellChangeOrderID)),
2628CSN_DESCR_END (PacketCellChangeOrderID_t)
2629
2630static const
2631CSN_DESCR_BEGIN(h_FreqBsicCell_t)
2632 M_UINT (h_FreqBsicCell_t, BSIC, 6),
2633 M_TYPE (h_FreqBsicCell_t, Cell_Selection, Cell_Selection_t),
2634CSN_DESCR_END (h_FreqBsicCell_t)
2635
2636static const CSN_DESCR_BEGIN(CellSelectionParamsWithFreqDiff_t)
2637 /*FREQUENCY_DIFF is really an integer but the number of bits to decode it are stored in FREQ_DIFF_LENGTH*/
2638 M_VAR_BITMAP (CellSelectionParamsWithFreqDiff_t, FREQUENCY_DIFF, FREQ_DIFF_LENGTH, 0),
2639 M_UINT (CellSelectionParamsWithFreqDiff_t, BSIC, 6),
2640 M_NEXT_EXIST (CellSelectionParamsWithFreqDiff_t, Exist_CellSelectionParams, 1),
2641 M_TYPE (CellSelectionParamsWithFreqDiff_t, CellSelectionParams, Cell_Selection_2_t),
2642CSN_DESCR_END (CellSelectionParamsWithFreqDiff_t)
2643
2644static const
2645CSN_DESCR_BEGIN(Add_Frequency_list_t)
2646 M_UINT (Add_Frequency_list_t, START_FREQUENCY, 10),
2647 M_UINT (Add_Frequency_list_t, BSIC, 6),
2648
2649 M_NEXT_EXIST (Add_Frequency_list_t, Exist_Cell_Selection, 1),
2650 M_TYPE (Add_Frequency_list_t, Cell_Selection, Cell_Selection_2_t),
2651
2652 M_UINT (Add_Frequency_list_t, NR_OF_FREQUENCIES, 5),
2653 M_UINT_OFFSET(Add_Frequency_list_t, FREQ_DIFF_LENGTH, 3, 1),/*offset 1*/
2654
2655 M_VAR_TARRAY (Add_Frequency_list_t, CellSelectionParamsWithFreqDiff, CellSelectionParamsWithFreqDiff_t, NR_OF_FREQUENCIES),
2656CSN_DESCR_END (Add_Frequency_list_t)
2657
2658static const CSN_DESCR_BEGIN(Removed_Freq_Index_t)
2659 M_UINT(Removed_Freq_Index_t, REMOVED_FREQ_INDEX, 6),
2660CSN_DESCR_END(Removed_Freq_Index_t)
2661
2662static const
2663CSN_DESCR_BEGIN(NC_Frequency_list_t)
2664 M_NEXT_EXIST (NC_Frequency_list_t, Exist_REMOVED_FREQ, 2),
2665 M_UINT_OFFSET(NC_Frequency_list_t, NR_OF_REMOVED_FREQ, 5, 1),/*offset 1*/
2666 M_VAR_TARRAY (NC_Frequency_list_t, Removed_Freq_Index, Removed_Freq_Index_t, NR_OF_REMOVED_FREQ),
2667 M_REC_TARRAY (NC_Frequency_list_t, Add_Frequency, Add_Frequency_list_t, Count_Add_Frequency),
2668CSN_DESCR_END (NC_Frequency_list_t)
2669
2670static const
2671CSN_DESCR_BEGIN(NC_Measurement_Parameters_t)
2672 M_UINT (NC_Measurement_Parameters_t, NETWORK_CONTROL_ORDER, 2),
2673
2674 M_NEXT_EXIST (NC_Measurement_Parameters_t, Exist_NC, 3),
2675 M_UINT (NC_Measurement_Parameters_t, NC_NON_DRX_PERIOD, 3),
2676 M_UINT (NC_Measurement_Parameters_t, NC_REPORTING_PERIOD_I, 3),
2677 M_UINT (NC_Measurement_Parameters_t, NC_REPORTING_PERIOD_T, 3),
2678CSN_DESCR_END (NC_Measurement_Parameters_t)
2679
2680static const
2681CSN_DESCR_BEGIN(NC_Measurement_Parameters_with_Frequency_List_t)
2682 M_UINT (NC_Measurement_Parameters_with_Frequency_List_t, NETWORK_CONTROL_ORDER, 2),
2683
2684 M_NEXT_EXIST (NC_Measurement_Parameters_with_Frequency_List_t, Exist_NC, 3),
2685 M_UINT (NC_Measurement_Parameters_with_Frequency_List_t, NC_NON_DRX_PERIOD, 3),
2686 M_UINT (NC_Measurement_Parameters_with_Frequency_List_t, NC_REPORTING_PERIOD_I, 3),
2687 M_UINT (NC_Measurement_Parameters_with_Frequency_List_t, NC_REPORTING_PERIOD_T, 3),
2688
2689 M_NEXT_EXIST (NC_Measurement_Parameters_with_Frequency_List_t, Exist_NC_FREQUENCY_LIST, 1),
2690 M_TYPE (NC_Measurement_Parameters_with_Frequency_List_t, NC_Frequency_list, NC_Frequency_list_t),
2691CSN_DESCR_END (NC_Measurement_Parameters_with_Frequency_List_t)
2692
2693/*< Packet Cell Change Order message contents >*/
2694static const
2695CSN_DESCR_BEGIN(BA_IND_t)
2696 M_UINT (BA_IND_t, BA_IND, 1),
2697 M_UINT (BA_IND_t, BA_IND_3G, 1),
2698CSN_DESCR_END (BA_IND_t)
2699
2700static const
2701CSN_DESCR_BEGIN(GPRSReportPriority_t)
2702 M_UINT (GPRSReportPriority_t, NUMBER_CELLS, 7),
2703 M_VAR_BITMAP (GPRSReportPriority_t, REPORT_PRIORITY, NUMBER_CELLS, 0),
2704CSN_DESCR_END (GPRSReportPriority_t)
2705
2706static const
2707CSN_DESCR_BEGIN(OffsetThreshold_t)
2708 M_UINT (OffsetThreshold_t, REPORTING_OFFSET, 3),
2709 M_UINT (OffsetThreshold_t, REPORTING_THRESHOLD, 3),
2710CSN_DESCR_END (OffsetThreshold_t)
2711
2712static const
2713CSN_DESCR_BEGIN(GPRSMeasurementParams_PMO_PCCO_t)
2714 M_NEXT_EXIST (GPRSMeasurementParams_PMO_PCCO_t, Exist_MULTI_BAND_REPORTING, 1),
2715 M_UINT (GPRSMeasurementParams_PMO_PCCO_t, MULTI_BAND_REPORTING, 2),
2716
2717 M_NEXT_EXIST (GPRSMeasurementParams_PMO_PCCO_t, Exist_SERVING_BAND_REPORTING, 1),
2718 M_UINT (GPRSMeasurementParams_PMO_PCCO_t, SERVING_BAND_REPORTING, 2),
2719
2720 M_UINT (GPRSMeasurementParams_PMO_PCCO_t, SCALE_ORD, 2),
2721
2722 M_NEXT_EXIST (GPRSMeasurementParams_PMO_PCCO_t, Exist_OffsetThreshold900, 1),
2723 M_TYPE (GPRSMeasurementParams_PMO_PCCO_t, OffsetThreshold900, OffsetThreshold_t),
2724
2725 M_NEXT_EXIST (GPRSMeasurementParams_PMO_PCCO_t, Exist_OffsetThreshold1800, 1),
2726 M_TYPE (GPRSMeasurementParams_PMO_PCCO_t, OffsetThreshold1800, OffsetThreshold_t),
2727
2728 M_NEXT_EXIST (GPRSMeasurementParams_PMO_PCCO_t, Exist_OffsetThreshold400, 1),
2729 M_TYPE (GPRSMeasurementParams_PMO_PCCO_t, OffsetThreshold400, OffsetThreshold_t),
2730
2731 M_NEXT_EXIST (GPRSMeasurementParams_PMO_PCCO_t, Exist_OffsetThreshold1900, 1),
2732 M_TYPE (GPRSMeasurementParams_PMO_PCCO_t, OffsetThreshold1900, OffsetThreshold_t),
2733
2734 M_NEXT_EXIST (GPRSMeasurementParams_PMO_PCCO_t, Exist_OffsetThreshold850, 1),
2735 M_TYPE (GPRSMeasurementParams_PMO_PCCO_t, OffsetThreshold850, OffsetThreshold_t),
2736CSN_DESCR_END (GPRSMeasurementParams_PMO_PCCO_t)
2737
2738static const
2739CSN_DESCR_BEGIN(GPRSMeasurementParams3G_t)
2740 M_UINT (GPRSMeasurementParams3G_t, Qsearch_p, 4),
2741 M_UINT (GPRSMeasurementParams3G_t, SearchPrio3G, 1),
2742
2743 M_NEXT_EXIST (GPRSMeasurementParams3G_t, existRepParamsFDD, 2),
2744 M_UINT (GPRSMeasurementParams3G_t, RepQuantFDD, 1),
2745 M_UINT (GPRSMeasurementParams3G_t, MultiratReportingFDD, 2),
2746
2747 M_NEXT_EXIST (GPRSMeasurementParams3G_t, existReportingParamsFDD, 2),
2748 M_UINT (GPRSMeasurementParams3G_t, ReportingOffsetFDD, 3),
2749 M_UINT (GPRSMeasurementParams3G_t, ReportingThresholdFDD, 3),
2750
2751 M_NEXT_EXIST (GPRSMeasurementParams3G_t, existMultiratReportingTDD, 1),
2752 M_UINT (GPRSMeasurementParams3G_t, MultiratReportingTDD, 2),
2753
2754 M_NEXT_EXIST (GPRSMeasurementParams3G_t, existOffsetThresholdTDD, 2),
2755 M_UINT (GPRSMeasurementParams3G_t, ReportingOffsetTDD, 3),
2756 M_UINT (GPRSMeasurementParams3G_t, ReportingThresholdTDD, 3),
2757CSN_DESCR_END (GPRSMeasurementParams3G_t)
2758
2759static const
2760CSN_DESCR_BEGIN(MultiratParams3G_t)
2761 M_NEXT_EXIST (MultiratParams3G_t, existMultiratReporting, 1),
2762 M_UINT (MultiratParams3G_t, MultiratReporting, 2),
2763
2764 M_NEXT_EXIST (MultiratParams3G_t, existOffsetThreshold, 1),
2765 M_TYPE (MultiratParams3G_t, OffsetThreshold, OffsetThreshold_t),
2766CSN_DESCR_END (MultiratParams3G_t)
2767
2768static const
2769CSN_DESCR_BEGIN(ENH_GPRSMeasurementParams3G_PMO_t)
2770 M_UINT (ENH_GPRSMeasurementParams3G_PMO_t, Qsearch_P, 4),
2771 M_UINT (ENH_GPRSMeasurementParams3G_PMO_t, SearchPrio3G, 1),
2772
2773 M_NEXT_EXIST (ENH_GPRSMeasurementParams3G_PMO_t, existRepParamsFDD, 2),
2774 M_UINT (ENH_GPRSMeasurementParams3G_PMO_t, RepQuantFDD, 1),
2775 M_UINT (ENH_GPRSMeasurementParams3G_PMO_t, MultiratReportingFDD, 2),
2776
2777 M_NEXT_EXIST (ENH_GPRSMeasurementParams3G_PMO_t, existOffsetThreshold, 1),
2778 M_TYPE (ENH_GPRSMeasurementParams3G_PMO_t, OffsetThreshold, OffsetThreshold_t),
2779
2780 M_TYPE (ENH_GPRSMeasurementParams3G_PMO_t, ParamsTDD, MultiratParams3G_t),
2781 M_TYPE (ENH_GPRSMeasurementParams3G_PMO_t, ParamsCDMA2000, MultiratParams3G_t),
2782CSN_DESCR_END (ENH_GPRSMeasurementParams3G_PMO_t)
2783
2784static const
2785CSN_DESCR_BEGIN(ENH_GPRSMeasurementParams3G_PCCO_t)
2786 M_UINT (ENH_GPRSMeasurementParams3G_PCCO_t, Qsearch_P, 4),
2787 M_UINT (ENH_GPRSMeasurementParams3G_PCCO_t, SearchPrio3G, 1),
2788
2789 M_NEXT_EXIST (ENH_GPRSMeasurementParams3G_PCCO_t, existRepParamsFDD, 2),
2790 M_UINT (ENH_GPRSMeasurementParams3G_PCCO_t, RepQuantFDD, 1),
2791 M_UINT (ENH_GPRSMeasurementParams3G_PCCO_t, MultiratReportingFDD, 2),
2792
2793 M_NEXT_EXIST (ENH_GPRSMeasurementParams3G_PCCO_t, existOffsetThreshold, 1),
2794 M_TYPE (ENH_GPRSMeasurementParams3G_PCCO_t, OffsetThreshold, OffsetThreshold_t),
2795
2796 M_TYPE (ENH_GPRSMeasurementParams3G_PCCO_t, ParamsTDD, MultiratParams3G_t),
2797CSN_DESCR_END (ENH_GPRSMeasurementParams3G_PCCO_t)
2798
2799static const
2800CSN_DESCR_BEGIN(N2_t)
2801 M_UINT (N2_t, REMOVED_3GCELL_INDEX, 7),
2802 M_UINT (N2_t, CELL_DIFF_LENGTH_3G, 3),
2803 M_VAR_BITMAP (N2_t, CELL_DIFF_3G, CELL_DIFF_LENGTH_3G, 0),
2804CSN_DESCR_END (N2_t)
2805
2806static const
2807CSN_DESCR_BEGIN (N1_t)
2808 M_UINT_OFFSET (N1_t, N2_Count, 5, 1), /*offset 1*/
2809 M_VAR_TARRAY (N1_t, N2s, N2_t, N2_Count),
2810CSN_DESCR_END (N1_t)
2811
2812static const
2813CSN_DESCR_BEGIN (Removed3GCellDescription_t)
2814 M_UINT_OFFSET (Removed3GCellDescription_t, N1_Count, 2, 1), /* offset 1 */
2815 M_VAR_TARRAY (Removed3GCellDescription_t, N1s, N1_t, N1_Count),
2816CSN_DESCR_END (Removed3GCellDescription_t)
2817
2818static const
2819CSN_DESCR_BEGIN(CDMA2000_Description_t)
2820 M_UINT (CDMA2000_Description_t, Complete_This, 1),
2821 CSN_ERROR (CDMA2000_Description_t, "Not Implemented", CSN_ERROR_STREAM_NOT_SUPPORTED),
2822CSN_DESCR_END (CDMA2000_Description_t)
2823
2824static const
2825CSN_DESCR_BEGIN(UTRAN_FDD_NeighbourCells_t)
2826 M_UINT (UTRAN_FDD_NeighbourCells_t, ZERO, 1),
2827 M_UINT (UTRAN_FDD_NeighbourCells_t, UARFCN, 14),
2828 M_UINT (UTRAN_FDD_NeighbourCells_t, Indic0, 1),
2829 M_UINT (UTRAN_FDD_NeighbourCells_t, NrOfCells, 5),
2830/* M_CALLBACK (UTRAN_FDD_NeighbourCells_t, (void*) 14, NrOfCells, BitsInCellInfo), */
2831 M_VAR_BITMAP (UTRAN_FDD_NeighbourCells_t, CellInfo, BitsInCellInfo, 0),
2832CSN_DESCR_END (UTRAN_FDD_NeighbourCells_t)
2833
2834static const
2835CSN_DESCR_BEGIN(UTRAN_FDD_Description_t)
2836 M_NEXT_EXIST (UTRAN_FDD_Description_t, existBandwidth, 1),
2837 M_UINT (UTRAN_FDD_Description_t, Bandwidth, 3),
2838 M_REC_TARRAY (UTRAN_FDD_Description_t, CellParams, UTRAN_FDD_NeighbourCells_t, NrOfFrequencies),
2839CSN_DESCR_END (UTRAN_FDD_Description_t)
2840
2841static const
2842CSN_DESCR_BEGIN(UTRAN_TDD_NeighbourCells_t)
2843 M_UINT (UTRAN_TDD_NeighbourCells_t, ZERO, 1),
2844 M_UINT (UTRAN_TDD_NeighbourCells_t, UARFCN, 14),
2845 M_UINT (UTRAN_TDD_NeighbourCells_t, Indic0, 1),
2846 M_UINT (UTRAN_TDD_NeighbourCells_t, NrOfCells, 5),
2847/* M_CALLBACK (UTRAN_TDD_NeighbourCells_t, (void*) 23, NrOfCells, BitsInCellInfo), */
2848 M_VAR_BITMAP (UTRAN_TDD_NeighbourCells_t, CellInfo, BitsInCellInfo, 0),
2849CSN_DESCR_END (UTRAN_TDD_NeighbourCells_t)
2850
2851static const
2852CSN_DESCR_BEGIN(UTRAN_TDD_Description_t)
2853 M_NEXT_EXIST (UTRAN_TDD_Description_t, existBandwidth, 1),
2854 M_UINT (UTRAN_TDD_Description_t, Bandwidth, 3),
2855 M_REC_TARRAY (UTRAN_TDD_Description_t, CellParams, UTRAN_TDD_NeighbourCells_t, NrOfFrequencies),
2856CSN_DESCR_END (UTRAN_TDD_Description_t)
2857
2858static const
2859CSN_DESCR_BEGIN(NeighbourCellDescription3G_PMO_t)
2860 M_NEXT_EXIST (NeighbourCellDescription3G_PMO_t, Exist_Index_Start_3G, 1),
2861 M_UINT (NeighbourCellDescription3G_PMO_t, Index_Start_3G, 7),
2862 M_NEXT_EXIST (NeighbourCellDescription3G_PMO_t, Exist_Absolute_Index_Start_EMR, 1),
2863 M_UINT (NeighbourCellDescription3G_PMO_t, Absolute_Index_Start_EMR, 7),
2864 M_NEXT_EXIST (NeighbourCellDescription3G_PMO_t, Exist_UTRAN_FDD_Description, 1),
2865 M_TYPE (NeighbourCellDescription3G_PMO_t, UTRAN_FDD_Description, UTRAN_FDD_Description_t),
2866 M_NEXT_EXIST (NeighbourCellDescription3G_PMO_t, Exist_UTRAN_TDD_Description, 1),
2867 M_TYPE (NeighbourCellDescription3G_PMO_t, UTRAN_TDD_Description, UTRAN_TDD_Description_t),
2868 M_NEXT_EXIST (NeighbourCellDescription3G_PMO_t, Exist_CDMA2000_Description, 1),
2869 M_TYPE (NeighbourCellDescription3G_PMO_t, CDMA2000_Description, CDMA2000_Description_t),
2870 M_NEXT_EXIST (NeighbourCellDescription3G_PMO_t, Exist_Removed3GCellDescription, 1),
2871 M_TYPE (NeighbourCellDescription3G_PMO_t, Removed3GCellDescription, Removed3GCellDescription_t),
2872CSN_DESCR_END (NeighbourCellDescription3G_PMO_t)
2873
2874static const
2875CSN_DESCR_BEGIN(NeighbourCellDescription3G_PCCO_t)
2876 M_NEXT_EXIST (NeighbourCellDescription3G_PCCO_t, Exist_Index_Start_3G, 1),
2877 M_UINT (NeighbourCellDescription3G_PCCO_t, Index_Start_3G, 7),
2878 M_NEXT_EXIST (NeighbourCellDescription3G_PCCO_t, Exist_Absolute_Index_Start_EMR, 1),
2879 M_UINT (NeighbourCellDescription3G_PCCO_t, Absolute_Index_Start_EMR, 7),
2880 M_NEXT_EXIST (NeighbourCellDescription3G_PCCO_t, Exist_UTRAN_FDD_Description, 1),
2881 M_TYPE (NeighbourCellDescription3G_PCCO_t, UTRAN_FDD_Description, UTRAN_FDD_Description_t),
2882 M_NEXT_EXIST (NeighbourCellDescription3G_PCCO_t, Exist_UTRAN_TDD_Description, 1),
2883 M_TYPE (NeighbourCellDescription3G_PCCO_t, UTRAN_TDD_Description, UTRAN_TDD_Description_t),
2884 M_NEXT_EXIST (NeighbourCellDescription3G_PCCO_t, Exist_Removed3GCellDescription, 1),
2885 M_TYPE (NeighbourCellDescription3G_PCCO_t, Removed3GCellDescription, Removed3GCellDescription_t),
2886CSN_DESCR_END (NeighbourCellDescription3G_PCCO_t)
2887
2888static const
2889CSN_DESCR_BEGIN(ENH_Measurement_Parameters_PMO_t)
2890 M_UNION (ENH_Measurement_Parameters_PMO_t, 2),
2891 M_TYPE (ENH_Measurement_Parameters_PMO_t, u.BA_IND, BA_IND_t),
2892 M_UINT (ENH_Measurement_Parameters_PMO_t, u.PSI3_CHANGE_MARK, 2),
2893 M_UINT (ENH_Measurement_Parameters_PMO_t, PMO_IND, 1),
2894
2895 M_UINT (ENH_Measurement_Parameters_PMO_t, REPORT_TYPE, 1),
2896 M_UINT (ENH_Measurement_Parameters_PMO_t, REPORTING_RATE, 1),
2897 M_UINT (ENH_Measurement_Parameters_PMO_t, INVALID_BSIC_REPORTING, 1),
2898
2899 M_NEXT_EXIST (ENH_Measurement_Parameters_PMO_t, Exist_NeighbourCellDescription3G, 1),
2900 M_TYPE (ENH_Measurement_Parameters_PMO_t, NeighbourCellDescription3G, NeighbourCellDescription3G_PMO_t),
2901
2902 M_NEXT_EXIST (ENH_Measurement_Parameters_PMO_t, Exist_GPRSReportPriority, 1),
2903 M_TYPE (ENH_Measurement_Parameters_PMO_t, GPRSReportPriority, GPRSReportPriority_t),
2904
2905 M_NEXT_EXIST (ENH_Measurement_Parameters_PMO_t, Exist_GPRSMeasurementParams, 1),
2906 M_TYPE (ENH_Measurement_Parameters_PMO_t, GPRSMeasurementParams, GPRSMeasurementParams_PMO_PCCO_t),
2907
2908 M_NEXT_EXIST (ENH_Measurement_Parameters_PMO_t, Exist_GPRSMeasurementParams3G, 1),
2909 M_TYPE (ENH_Measurement_Parameters_PMO_t, GPRSMeasurementParams3G, ENH_GPRSMeasurementParams3G_PMO_t),
2910CSN_DESCR_END (ENH_Measurement_Parameters_PMO_t)
2911
2912static const
2913CSN_DESCR_BEGIN(ENH_Measurement_Parameters_PCCO_t)
2914 M_UNION (ENH_Measurement_Parameters_PCCO_t, 2),
2915 M_TYPE (ENH_Measurement_Parameters_PCCO_t, u.BA_IND, BA_IND_t),
2916 M_UINT (ENH_Measurement_Parameters_PCCO_t, u.PSI3_CHANGE_MARK, 2),
2917 M_UINT (ENH_Measurement_Parameters_PCCO_t, PMO_IND, 1),
2918
2919 M_UINT (ENH_Measurement_Parameters_PCCO_t, REPORT_TYPE, 1),
2920 M_UINT (ENH_Measurement_Parameters_PCCO_t, REPORTING_RATE, 1),
2921 M_UINT (ENH_Measurement_Parameters_PCCO_t, INVALID_BSIC_REPORTING, 1),
2922
2923 M_NEXT_EXIST (ENH_Measurement_Parameters_PCCO_t, Exist_NeighbourCellDescription3G, 1),
2924 M_TYPE (ENH_Measurement_Parameters_PCCO_t, NeighbourCellDescription3G, NeighbourCellDescription3G_PCCO_t),
2925
2926 M_NEXT_EXIST (ENH_Measurement_Parameters_PCCO_t, Exist_GPRSReportPriority, 1),
2927 M_TYPE (ENH_Measurement_Parameters_PCCO_t, GPRSReportPriority, GPRSReportPriority_t),
2928
2929 M_NEXT_EXIST (ENH_Measurement_Parameters_PCCO_t, Exist_GPRSMeasurementParams, 1),
2930 M_TYPE (ENH_Measurement_Parameters_PCCO_t, GPRSMeasurementParams, GPRSMeasurementParams_PMO_PCCO_t),
2931
2932 M_NEXT_EXIST (ENH_Measurement_Parameters_PCCO_t, Exist_GPRSMeasurementParams3G, 1),
2933 M_TYPE (ENH_Measurement_Parameters_PCCO_t, GPRSMeasurementParams3G, ENH_GPRSMeasurementParams3G_PCCO_t),
2934CSN_DESCR_END (ENH_Measurement_Parameters_PCCO_t)
2935
2936static const
2937CSN_DESCR_BEGIN(CCN_Support_Description_t)
2938 M_UINT (CCN_Support_Description_t, NUMBER_CELLS, 7),
2939 M_VAR_BITMAP (CCN_Support_Description_t, CCN_SUPPORTED, NUMBER_CELLS, 0),
2940CSN_DESCR_END (CCN_Support_Description_t)
2941
2942static const
2943CSN_DESCR_BEGIN(lu_ModeCellSelectionParameters_t)
2944 M_UINT (lu_ModeCellSelectionParameters_t, CELL_BAR_QUALIFY_3, 2),
2945 M_NEXT_EXIST (lu_ModeCellSelectionParameters_t, Exist_SI13_Alt_PBCCH_Location, 1),
2946 M_TYPE (lu_ModeCellSelectionParameters_t, SI13_Alt_PBCCH_Location, SI13_PBCCH_Location_t),
2947CSN_DESCR_END (lu_ModeCellSelectionParameters_t)
2948
2949static const
2950CSN_DESCR_BEGIN(lu_ModeCellSelectionParams_t)
2951 M_NEXT_EXIST (lu_ModeCellSelectionParams_t, Exist_lu_ModeCellSelectionParams, 1),
2952 M_TYPE (lu_ModeCellSelectionParams_t, lu_ModeCellSelectionParameters, lu_ModeCellSelectionParameters_t),
2953CSN_DESCR_END (lu_ModeCellSelectionParams_t)
2954
2955static const
2956CSN_DESCR_BEGIN(lu_ModeNeighbourCellParams_t)
2957 M_TYPE (lu_ModeNeighbourCellParams_t, lu_ModeCellSelectionParameters, lu_ModeCellSelectionParams_t),
2958 M_UINT (lu_ModeNeighbourCellParams_t, NR_OF_FREQUENCIES, 5),
2959 M_VAR_TARRAY (lu_ModeNeighbourCellParams_t, lu_ModeCellSelectionParams, lu_ModeCellSelectionParams_t, NR_OF_FREQUENCIES),
2960CSN_DESCR_END (lu_ModeNeighbourCellParams_t)
2961
2962static const
2963CSN_DESCR_BEGIN(lu_ModeOnlyCellSelection_t)
2964 M_UINT (lu_ModeOnlyCellSelection_t, CELL_BAR_QUALIFY_3, 2),
2965 M_UINT (lu_ModeOnlyCellSelection_t, SAME_RA_AS_SERVING_CELL, 1),
2966
2967 M_NEXT_EXIST (lu_ModeOnlyCellSelection_t, Exist_RXLEV_and_TXPWR, 2),
2968 M_UINT (lu_ModeOnlyCellSelection_t, GPRS_RXLEV_ACCESS_MIN, 6),
2969 M_UINT (lu_ModeOnlyCellSelection_t, GPRS_MS_TXPWR_MAX_CCH, 5),
2970
2971 M_NEXT_EXIST (lu_ModeOnlyCellSelection_t, Exist_OFFSET_and_TIME, 2),
2972 M_UINT (lu_ModeOnlyCellSelection_t, GPRS_TEMPORARY_OFFSET, 3),
2973 M_UINT (lu_ModeOnlyCellSelection_t, GPRS_PENALTY_TIME, 5),
2974
2975 M_NEXT_EXIST (lu_ModeOnlyCellSelection_t, Exist_GPRS_RESELECT_OFFSET, 1),
2976 M_UINT (lu_ModeOnlyCellSelection_t, GPRS_RESELECT_OFFSET, 5),
2977
2978 M_NEXT_EXIST (lu_ModeOnlyCellSelection_t, Exist_HCS, 1),
2979 M_TYPE (lu_ModeOnlyCellSelection_t, HCS, HCS_t),
2980
2981 M_NEXT_EXIST (lu_ModeOnlyCellSelection_t, Exist_SI13_Alt_PBCCH_Location, 1),
2982 M_TYPE (lu_ModeOnlyCellSelection_t, SI13_Alt_PBCCH_Location, SI13_PBCCH_Location_t),
2983CSN_DESCR_END (lu_ModeOnlyCellSelection_t)
2984
2985static const
2986CSN_DESCR_BEGIN(lu_ModeOnlyCellSelectionParamsWithFreqDiff_t)
2987 /*FREQUENCY_DIFF is really an integer but the number of bits to decode it are stored in FREQ_DIFF_LENGTH*/
2988 M_VAR_BITMAP (lu_ModeOnlyCellSelectionParamsWithFreqDiff_t, FREQUENCY_DIFF, FREQ_DIFF_LENGTH, 0),
2989 M_UINT (lu_ModeOnlyCellSelectionParamsWithFreqDiff_t, BSIC, 6),
2990 M_NEXT_EXIST (lu_ModeOnlyCellSelectionParamsWithFreqDiff_t, Exist_lu_ModeOnlyCellSelectionParams, 1),
2991 M_TYPE (lu_ModeOnlyCellSelectionParamsWithFreqDiff_t, lu_ModeOnlyCellSelectionParams, lu_ModeOnlyCellSelection_t),
2992CSN_DESCR_END (lu_ModeOnlyCellSelectionParamsWithFreqDiff_t)
2993
2994static const
2995CSN_DESCR_BEGIN(Add_lu_ModeOnlyFrequencyList_t)
2996 M_UINT (Add_lu_ModeOnlyFrequencyList_t, START_FREQUENCY, 10),
2997 M_UINT (Add_lu_ModeOnlyFrequencyList_t, BSIC, 6),
2998
2999 M_NEXT_EXIST (Add_lu_ModeOnlyFrequencyList_t, Exist_lu_ModeCellSelection, 1),
3000 M_TYPE (Add_lu_ModeOnlyFrequencyList_t, lu_ModeOnlyCellSelection, lu_ModeOnlyCellSelection_t),
3001
3002 M_UINT (Add_lu_ModeOnlyFrequencyList_t, NR_OF_FREQUENCIES, 5),
3003 M_UINT (Add_lu_ModeOnlyFrequencyList_t, FREQ_DIFF_LENGTH, 3),
3004
3005 M_VAR_TARRAY (Add_lu_ModeOnlyFrequencyList_t, lu_ModeOnlyCellSelectionParamsWithFreqDiff, lu_ModeOnlyCellSelectionParamsWithFreqDiff_t, NR_OF_FREQUENCIES),
3006CSN_DESCR_END (Add_lu_ModeOnlyFrequencyList_t)
3007
3008static const
3009CSN_DESCR_BEGIN(NC_lu_ModeOnlyCapableCellList_t)
3010 M_REC_TARRAY (NC_lu_ModeOnlyCapableCellList_t, Add_lu_ModeOnlyFrequencyList, Add_lu_ModeOnlyFrequencyList_t, Count_Add_lu_ModeOnlyFrequencyList),
3011CSN_DESCR_END (NC_lu_ModeOnlyCapableCellList_t)
3012
3013static const
3014CSN_DESCR_BEGIN(GPRS_AdditionalMeasurementParams3G_t)
3015 M_NEXT_EXIST (GPRS_AdditionalMeasurementParams3G_t, Exist_FDD_REPORTING_THRESHOLD_2, 1),
3016 M_UINT (GPRS_AdditionalMeasurementParams3G_t, FDD_REPORTING_THRESHOLD_2, 6),
3017CSN_DESCR_END (GPRS_AdditionalMeasurementParams3G_t)
3018
3019static const
3020CSN_DESCR_BEGIN(ServingCellPriorityParametersDescription_t)
3021 M_UINT (ServingCellPriorityParametersDescription_t, GERAN_PRIORITY, 3),
3022 M_UINT (ServingCellPriorityParametersDescription_t, THRESH_Priority_Search, 4),
3023 M_UINT (ServingCellPriorityParametersDescription_t, THRESH_GSM_low, 4),
3024 M_UINT (ServingCellPriorityParametersDescription_t, H_PRIO, 2),
3025 M_UINT (ServingCellPriorityParametersDescription_t, T_Reselection, 2),
3026CSN_DESCR_END (ServingCellPriorityParametersDescription_t)
3027
3028static const
3029CSN_DESCR_BEGIN(RepeatedUTRAN_PriorityParameters_t)
3030 M_REC_ARRAY (RepeatedUTRAN_PriorityParameters_t, UTRAN_FREQUENCY_INDEX_a, NumberOfFrequencyIndexes, 5),
3031
3032 M_NEXT_EXIST (RepeatedUTRAN_PriorityParameters_t, existUTRAN_PRIORITY, 1),
3033 M_UINT (RepeatedUTRAN_PriorityParameters_t, UTRAN_PRIORITY, 3),
3034
3035 M_UINT (RepeatedUTRAN_PriorityParameters_t, THRESH_UTRAN_high, 5),
3036
3037 M_NEXT_EXIST (RepeatedUTRAN_PriorityParameters_t, existTHRESH_UTRAN_low, 1),
3038 M_UINT (RepeatedUTRAN_PriorityParameters_t, THRESH_UTRAN_low, 5),
3039
3040 M_NEXT_EXIST (RepeatedUTRAN_PriorityParameters_t, existUTRAN_QRXLEVMIN, 1),
3041 M_UINT (RepeatedUTRAN_PriorityParameters_t, UTRAN_QRXLEVMIN, 5),
3042CSN_DESCR_END (RepeatedUTRAN_PriorityParameters_t)
3043
3044static const
3045CSN_DESCR_BEGIN(PriorityParametersDescription3G_PMO_t)
3046
3047 M_NEXT_EXIST (PriorityParametersDescription3G_PMO_t, existDEFAULT_UTRAN_Parameters, 3),
3048 M_UINT (PriorityParametersDescription3G_PMO_t, DEFAULT_UTRAN_PRIORITY, 3),
3049 M_UINT (PriorityParametersDescription3G_PMO_t, DEFAULT_THRESH_UTRAN, 5),
3050 M_UINT (PriorityParametersDescription3G_PMO_t, DEFAULT_UTRAN_QRXLEVMIN, 5),
3051
3052 M_REC_TARRAY (PriorityParametersDescription3G_PMO_t, RepeatedUTRAN_PriorityParameters_a, RepeatedUTRAN_PriorityParameters_t, NumberOfPriorityParameters),
3053CSN_DESCR_END (PriorityParametersDescription3G_PMO_t)
3054
3055static const
3056CSN_DESCR_BEGIN(EUTRAN_REPORTING_THRESHOLD_OFFSET_t)
3057 M_NEXT_EXIST (EUTRAN_REPORTING_THRESHOLD_OFFSET_t, existEUTRAN_FDD_REPORTING_THRESHOLD_OFFSET, 5),
3058 M_UINT (EUTRAN_REPORTING_THRESHOLD_OFFSET_t, EUTRAN_FDD_REPORTING_THRESHOLD, 3),
3059 M_NEXT_EXIST (EUTRAN_REPORTING_THRESHOLD_OFFSET_t, existEUTRAN_FDD_REPORTING_THRESHOLD_2, 1),
3060 M_UINT (EUTRAN_REPORTING_THRESHOLD_OFFSET_t, EUTRAN_FDD_REPORTING_THRESHOLD_2, 6),
3061 M_NEXT_EXIST (EUTRAN_REPORTING_THRESHOLD_OFFSET_t, existEUTRAN_FDD_REPORTING_OFFSET, 1),
3062 M_UINT (EUTRAN_REPORTING_THRESHOLD_OFFSET_t, EUTRAN_FDD_REPORTING_OFFSET, 3),
3063
3064 M_NEXT_EXIST (EUTRAN_REPORTING_THRESHOLD_OFFSET_t, existEUTRAN_TDD_REPORTING_THRESHOLD_OFFSET, 5),
3065 M_UINT (EUTRAN_REPORTING_THRESHOLD_OFFSET_t, EUTRAN_TDD_REPORTING_THRESHOLD, 3),
3066 M_NEXT_EXIST (EUTRAN_REPORTING_THRESHOLD_OFFSET_t, existEUTRAN_TDD_REPORTING_THRESHOLD_2, 1),
3067 M_UINT (EUTRAN_REPORTING_THRESHOLD_OFFSET_t, EUTRAN_TDD_REPORTING_THRESHOLD_2, 6),
3068 M_NEXT_EXIST (EUTRAN_REPORTING_THRESHOLD_OFFSET_t, existEUTRAN_TDD_REPORTING_OFFSET, 1),
3069 M_UINT (EUTRAN_REPORTING_THRESHOLD_OFFSET_t, EUTRAN_TDD_REPORTING_OFFSET, 3),
3070CSN_DESCR_END (EUTRAN_REPORTING_THRESHOLD_OFFSET_t)
3071
3072static const
3073CSN_DESCR_BEGIN(GPRS_EUTRAN_MeasurementParametersDescription_t)
3074 M_UINT (GPRS_EUTRAN_MeasurementParametersDescription_t, Qsearch_P_EUTRAN, 4),
Anders Broman8ea3cbe2020-01-28 17:36:33 +01003075 M_UINT (GPRS_EUTRAN_MeasurementParametersDescription_t, EUTRAN_REP_QUANT, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03003076 M_UINT (GPRS_EUTRAN_MeasurementParametersDescription_t, EUTRAN_MULTIRAT_REPORTING, 2),
3077 M_TYPE (GPRS_EUTRAN_MeasurementParametersDescription_t, EUTRAN_REPORTING_THRESHOLD_OFFSET, EUTRAN_REPORTING_THRESHOLD_OFFSET_t),
3078CSN_DESCR_END (GPRS_EUTRAN_MeasurementParametersDescription_t)
3079
3080static const
3081CSN_DESCR_BEGIN(RepeatedEUTRAN_Cells_t)
3082 M_UINT (RepeatedEUTRAN_Cells_t, EARFCN, 16),
3083 M_NEXT_EXIST (RepeatedEUTRAN_Cells_t, existMeasurementBandwidth, 1),
3084 M_UINT (RepeatedEUTRAN_Cells_t, MeasurementBandwidth, 3),
3085CSN_DESCR_END (RepeatedEUTRAN_Cells_t)
3086
3087static const
3088CSN_DESCR_BEGIN(RepeatedEUTRAN_NeighbourCells_t)
3089 M_REC_TARRAY (RepeatedEUTRAN_NeighbourCells_t, EUTRAN_Cells_a, RepeatedEUTRAN_Cells_t, nbrOfEUTRAN_Cells),
3090
3091 M_NEXT_EXIST (RepeatedEUTRAN_NeighbourCells_t, existEUTRAN_PRIORITY, 1),
3092 M_UINT (RepeatedEUTRAN_NeighbourCells_t, EUTRAN_PRIORITY, 3),
3093
3094 M_UINT (RepeatedEUTRAN_NeighbourCells_t, THRESH_EUTRAN_high, 5),
3095
3096 M_NEXT_EXIST (RepeatedEUTRAN_NeighbourCells_t, existTHRESH_EUTRAN_low, 1),
3097 M_UINT (RepeatedEUTRAN_NeighbourCells_t, THRESH_EUTRAN_low, 5),
3098
3099 M_NEXT_EXIST (RepeatedEUTRAN_NeighbourCells_t, existEUTRAN_QRXLEVMIN, 1),
3100 M_UINT (RepeatedEUTRAN_NeighbourCells_t, EUTRAN_QRXLEVMIN, 5),
3101CSN_DESCR_END (RepeatedEUTRAN_NeighbourCells_t)
3102
3103static const
3104CSN_DESCR_BEGIN(PCID_Pattern_t)
3105 M_UINT (PCID_Pattern_t, PCID_Pattern_length, 3),
3106 M_VAR_BITMAP (PCID_Pattern_t, PCID_Pattern, PCID_Pattern_length, 1), /* offset 1, 44.060 12.57 */
3107 M_UINT (PCID_Pattern_t, PCID_Pattern_sense, 1),
3108CSN_DESCR_END (PCID_Pattern_t)
3109
3110static const
3111CSN_DESCR_BEGIN(PCID_Group_IE_t)
3112
3113 M_REC_ARRAY (PCID_Group_IE_t, PCID_a, NumberOfPCIDs, 9),
3114
3115 M_NEXT_EXIST (PCID_Group_IE_t, existPCID_BITMAP_GROUP, 1),
3116 M_UINT (PCID_Group_IE_t, PCID_BITMAP_GROUP, 6),
3117
3118 M_REC_TARRAY (PCID_Group_IE_t, PCID_Pattern_a, PCID_Pattern_t, NumberOfPCID_Patterns),
3119CSN_DESCR_END (PCID_Group_IE_t)
3120
3121static const
3122CSN_DESCR_BEGIN(EUTRAN_FREQUENCY_INDEX_t)
3123 M_UINT (EUTRAN_FREQUENCY_INDEX_t, EUTRAN_FREQUENCY_INDEX, 3),
3124CSN_DESCR_END (EUTRAN_FREQUENCY_INDEX_t)
3125
3126static const
3127CSN_DESCR_BEGIN(RepeatedEUTRAN_NotAllowedCells_t)
3128 M_TYPE (RepeatedEUTRAN_NotAllowedCells_t, NotAllowedCells, PCID_Group_IE_t),
3129
3130 M_REC_TARRAY (RepeatedEUTRAN_NotAllowedCells_t, EUTRAN_FREQUENCY_INDEX_a, EUTRAN_FREQUENCY_INDEX_t, NumberOfFrequencyIndexes),
3131CSN_DESCR_END (RepeatedEUTRAN_NotAllowedCells_t)
3132
3133static const
3134CSN_DESCR_BEGIN(RepeatedEUTRAN_PCID_to_TA_mapping_t)
3135 M_REC_TARRAY (RepeatedEUTRAN_PCID_to_TA_mapping_t, PCID_ToTA_Mapping_a, PCID_Group_IE_t, NumberOfMappings),
3136 M_REC_TARRAY (RepeatedEUTRAN_PCID_to_TA_mapping_t, EUTRAN_FREQUENCY_INDEX_a, EUTRAN_FREQUENCY_INDEX_t, NumberOfFrequencyIndexes),
3137CSN_DESCR_END (RepeatedEUTRAN_PCID_to_TA_mapping_t)
3138
3139static const
3140CSN_DESCR_BEGIN(EUTRAN_ParametersDescription_PMO_t)
Anders Broman8ea3cbe2020-01-28 17:36:33 +01003141 M_UINT (EUTRAN_ParametersDescription_PMO_t, EUTRAN_CCN_ACTIVE, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03003142
3143 M_NEXT_EXIST (EUTRAN_ParametersDescription_PMO_t, existGPRS_EUTRAN_MeasurementParametersDescription, 1),
3144 M_TYPE (EUTRAN_ParametersDescription_PMO_t, GPRS_EUTRAN_MeasurementParametersDescription, GPRS_EUTRAN_MeasurementParametersDescription_t),
3145
3146 M_REC_TARRAY (EUTRAN_ParametersDescription_PMO_t, RepeatedEUTRAN_NeighbourCells_a, RepeatedEUTRAN_NeighbourCells_t, nbrOfRepeatedEUTRAN_NeighbourCellsStructs),
3147 M_REC_TARRAY (EUTRAN_ParametersDescription_PMO_t, RepeatedEUTRAN_NotAllowedCells_a, RepeatedEUTRAN_NotAllowedCells_t, NumberOfNotAllowedCells),
3148 M_REC_TARRAY (EUTRAN_ParametersDescription_PMO_t, RepeatedEUTRAN_PCID_to_TA_mapping_a, RepeatedEUTRAN_PCID_to_TA_mapping_t, NumberOfMappings),
3149CSN_DESCR_END (EUTRAN_ParametersDescription_PMO_t)
3150
3151static const
3152CSN_DESCR_BEGIN(PSC_Pattern_t)
3153 M_UINT (PSC_Pattern_t, PSC_Pattern_length, 3),
3154 M_VAR_BITMAP (PSC_Pattern_t, PSC_Pattern, PSC_Pattern_length, 1),
Anders Broman8ea3cbe2020-01-28 17:36:33 +01003155 M_UINT (PSC_Pattern_t, PSC_Pattern_sense, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03003156CSN_DESCR_END (PSC_Pattern_t)
3157
3158static const
3159CSN_DESCR_BEGIN(PSC_Group_t)
3160 M_REC_ARRAY (PSC_Group_t, PSC, PSC_Count, 9),
3161 M_REC_TARRAY (PSC_Group_t, PSC_Pattern, PSC_Pattern_t, PSC_Pattern_Count),
3162CSN_DESCR_END (PSC_Group_t)
3163
3164static const
3165CSN_DESCR_BEGIN(ThreeG_CSG_Description_Body_t)
3166 M_TYPE (ThreeG_CSG_Description_Body_t, CSG_PSC_SPLIT, PSC_Group_t),
3167 M_REC_ARRAY (ThreeG_CSG_Description_Body_t, UTRAN_FREQUENCY_INDEX, Count, 5),
3168CSN_DESCR_END (ThreeG_CSG_Description_Body_t)
3169
3170static const
3171CSN_DESCR_BEGIN(ThreeG_CSG_Description_t)
3172 M_REC_TARRAY (ThreeG_CSG_Description_t, ThreeG_CSG_Description_Body, ThreeG_CSG_Description_Body_t, Count),
3173CSN_DESCR_END (ThreeG_CSG_Description_t)
3174
3175static const
3176CSN_DESCR_BEGIN(EUTRAN_CSG_Description_Body_t)
3177 M_TYPE (EUTRAN_CSG_Description_Body_t, CSG_PCI_SPLIT, PSC_Group_t),
3178 M_REC_ARRAY (EUTRAN_CSG_Description_Body_t, EUTRAN_FREQUENCY_INDEX, Count, 3),
3179CSN_DESCR_END (EUTRAN_CSG_Description_Body_t)
3180
3181static const
3182CSN_DESCR_BEGIN(EUTRAN_CSG_Description_t)
3183 M_REC_TARRAY (EUTRAN_CSG_Description_t, EUTRAN_CSG_Description_Body, EUTRAN_CSG_Description_Body_t, Count),
3184CSN_DESCR_END (EUTRAN_CSG_Description_t)
3185
3186static const
3187CSN_DESCR_BEGIN(Meas_Ctrl_Param_Desp_t)
3188 M_NEXT_EXIST (Meas_Ctrl_Param_Desp_t, existMeasurement_Control_EUTRAN, 3),
Anders Broman8ea3cbe2020-01-28 17:36:33 +01003189 M_UINT (Meas_Ctrl_Param_Desp_t, Measurement_Control_EUTRAN, 1),
3190 M_UINT (Meas_Ctrl_Param_Desp_t, EUTRAN_FREQUENCY_INDEX_top, 3),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03003191 M_REC_ARRAY (Meas_Ctrl_Param_Desp_t, EUTRAN_FREQUENCY_INDEX, Count_EUTRAN_FREQUENCY_INDEX, 3),
3192 M_NEXT_EXIST (Meas_Ctrl_Param_Desp_t, existMeasurement_Control_UTRAN, 1),
Anders Broman8ea3cbe2020-01-28 17:36:33 +01003193 M_UINT (Meas_Ctrl_Param_Desp_t, Measurement_Control_UTRAN, 1),
3194 M_UINT (Meas_Ctrl_Param_Desp_t, UTRAN_FREQUENCY_INDEX_top, 5),
3195 M_REC_ARRAY (Meas_Ctrl_Param_Desp_t, UTRAN_FREQUENCY_INDEX, Count_UTRAN_FREQUENCY_INDEX, 5),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03003196CSN_DESCR_END (Meas_Ctrl_Param_Desp_t)
3197
3198static const
3199CSN_DESCR_BEGIN(Reselection_Based_On_RSRQ_t)
3200 M_UINT (Reselection_Based_On_RSRQ_t, THRESH_EUTRAN_high_Q, 5),
3201 M_NEXT_EXIST (Reselection_Based_On_RSRQ_t, existTHRESH_EUTRAN_low_Q, 1),
3202 M_UINT (Reselection_Based_On_RSRQ_t, THRESH_EUTRAN_low_Q, 5),
3203 M_NEXT_EXIST (Reselection_Based_On_RSRQ_t, existEUTRAN_QQUALMIN, 1),
3204 M_UINT (Reselection_Based_On_RSRQ_t, EUTRAN_QQUALMIN, 4),
3205 M_NEXT_EXIST (Reselection_Based_On_RSRQ_t, existEUTRAN_RSRPmin, 1),
3206 M_UINT (Reselection_Based_On_RSRQ_t, EUTRAN_RSRPmin, 5),
3207CSN_DESCR_END (Reselection_Based_On_RSRQ_t)
3208
3209static const
3210CSN_DESCR_BEGIN(Rept_EUTRAN_Enh_Cell_Resel_Param_t)
3211 M_REC_ARRAY (Rept_EUTRAN_Enh_Cell_Resel_Param_t, EUTRAN_FREQUENCY_INDEX, Count_EUTRAN_FREQUENCY_INDEX, 3),
3212 M_UNION (Rept_EUTRAN_Enh_Cell_Resel_Param_t, 2),
3213 M_UINT (Rept_EUTRAN_Enh_Cell_Resel_Param_t, u.EUTRAN_Qmin, 4),
3214 M_TYPE (Rept_EUTRAN_Enh_Cell_Resel_Param_t, u.Reselection_Based_On_RSRQ, Reselection_Based_On_RSRQ_t),
3215CSN_DESCR_END (Rept_EUTRAN_Enh_Cell_Resel_Param_t)
3216
3217static const
3218CSN_DESCR_BEGIN(Enh_Cell_Reselect_Param_Desp_t)
3219 M_REC_TARRAY (Enh_Cell_Reselect_Param_Desp_t, Repeated_EUTRAN_Enhanced_Cell_Reselection_Parameters, Rept_EUTRAN_Enh_Cell_Resel_Param_t, Count),
3220CSN_DESCR_END (Enh_Cell_Reselect_Param_Desp_t)
3221
3222static const
3223CSN_DESCR_BEGIN(UTRAN_CSG_Cells_Reporting_Desp_t)
3224 M_NEXT_EXIST (UTRAN_CSG_Cells_Reporting_Desp_t, existUTRAN_CSG_FDD_REPORTING_THRESHOLD, 2),
3225 M_UINT (UTRAN_CSG_Cells_Reporting_Desp_t, UTRAN_CSG_FDD_REPORTING_THRESHOLD, 3),
3226 M_UINT (UTRAN_CSG_Cells_Reporting_Desp_t, UTRAN_CSG_FDD_REPORTING_THRESHOLD_2, 6),
3227 M_NEXT_EXIST (UTRAN_CSG_Cells_Reporting_Desp_t, existUTRAN_CSG_TDD_REPORTING_THRESHOLD, 1),
3228 M_UINT (UTRAN_CSG_Cells_Reporting_Desp_t, UTRAN_CSG_TDD_REPORTING_THRESHOLD, 3),
3229CSN_DESCR_END (UTRAN_CSG_Cells_Reporting_Desp_t)
3230
3231static const
3232CSN_DESCR_BEGIN(EUTRAN_CSG_Cells_Reporting_Desp_t)
3233 M_NEXT_EXIST (EUTRAN_CSG_Cells_Reporting_Desp_t, existEUTRAN_CSG_FDD_REPORTING_THRESHOLD, 2),
3234 M_UINT (EUTRAN_CSG_Cells_Reporting_Desp_t, EUTRAN_CSG_FDD_REPORTING_THRESHOLD, 3),
3235 M_UINT (EUTRAN_CSG_Cells_Reporting_Desp_t, EUTRAN_CSG_FDD_REPORTING_THRESHOLD_2, 6),
3236 M_NEXT_EXIST (EUTRAN_CSG_Cells_Reporting_Desp_t, existEUTRAN_CSG_TDD_REPORTING_THRESHOLD, 2),
3237 M_UINT (EUTRAN_CSG_Cells_Reporting_Desp_t, EUTRAN_CSG_TDD_REPORTING_THRESHOLD, 3),
3238 M_UINT (EUTRAN_CSG_Cells_Reporting_Desp_t, EUTRAN_CSG_TDD_REPORTING_THRESHOLD_2, 6),
3239CSN_DESCR_END (EUTRAN_CSG_Cells_Reporting_Desp_t)
3240
3241
3242static const
3243CSN_DESCR_BEGIN(CSG_Cells_Reporting_Desp_t)
3244 M_NEXT_EXIST (CSG_Cells_Reporting_Desp_t, existUTRAN_CSG_Cells_Reporting_Description, 1),
3245 M_TYPE (CSG_Cells_Reporting_Desp_t, UTRAN_CSG_Cells_Reporting_Description, UTRAN_CSG_Cells_Reporting_Desp_t),
3246 M_NEXT_EXIST (CSG_Cells_Reporting_Desp_t, existEUTRAN_CSG_Cells_Reporting_Description, 1),
3247 M_TYPE (CSG_Cells_Reporting_Desp_t, EUTRAN_CSG_Cells_Reporting_Description, EUTRAN_CSG_Cells_Reporting_Desp_t),
3248CSN_DESCR_END (CSG_Cells_Reporting_Desp_t)
3249
3250static const
3251CSN_DESCR_BEGIN (PriorityAndEUTRAN_ParametersDescription_PMO_t)
3252 M_NEXT_EXIST (PriorityAndEUTRAN_ParametersDescription_PMO_t, existServingCellPriorityParametersDescription, 1),
3253 M_TYPE (PriorityAndEUTRAN_ParametersDescription_PMO_t, ServingCellPriorityParametersDescription, ServingCellPriorityParametersDescription_t),
3254 M_NEXT_EXIST (PriorityAndEUTRAN_ParametersDescription_PMO_t, existPriorityParametersDescription3G_PMO, 1),
3255 M_TYPE (PriorityAndEUTRAN_ParametersDescription_PMO_t, PriorityParametersDescription3G_PMO, PriorityParametersDescription3G_PMO_t),
3256 M_NEXT_EXIST (PriorityAndEUTRAN_ParametersDescription_PMO_t, existEUTRAN_ParametersDescription_PMO, 1),
3257 M_TYPE (PriorityAndEUTRAN_ParametersDescription_PMO_t, EUTRAN_ParametersDescription_PMO, EUTRAN_ParametersDescription_PMO_t),
3258CSN_DESCR_END (PriorityAndEUTRAN_ParametersDescription_PMO_t)
3259
3260
3261static const
3262CSN_DESCR_BEGIN (Delete_All_Stored_Individual_Priorities_t)
Anders Broman72c102a2020-01-24 14:31:15 +01003263 M_NULL (Delete_All_Stored_Individual_Priorities_t, dummy, 0),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03003264CSN_DESCR_END (Delete_All_Stored_Individual_Priorities_t)
3265
3266static const
3267CSN_DESCR_BEGIN (Individual_UTRAN_Priority_FDD_t)
3268 M_REC_ARRAY (Individual_UTRAN_Priority_FDD_t, FDD_ARFCN, Count, 14),
3269CSN_DESCR_END (Individual_UTRAN_Priority_FDD_t)
3270
3271static const
3272CSN_DESCR_BEGIN (Individual_UTRAN_Priority_TDD_t)
3273 M_REC_ARRAY (Individual_UTRAN_Priority_TDD_t, TDD_ARFCN, Count, 14),
3274CSN_DESCR_END (Individual_UTRAN_Priority_TDD_t)
3275
3276static const
3277CSN_DESCR_BEGIN (Repeated_Individual_UTRAN_Priority_Parameters_t)
3278 M_UNION (Repeated_Individual_UTRAN_Priority_Parameters_t, 2),
3279 M_TYPE (Repeated_Individual_UTRAN_Priority_Parameters_t, u.Individual_UTRAN_Priority_FDD, Individual_UTRAN_Priority_FDD_t),
3280 M_TYPE (Repeated_Individual_UTRAN_Priority_Parameters_t, u.Individual_UTRAN_Priority_TDD, Individual_UTRAN_Priority_TDD_t),
3281 M_UINT (Repeated_Individual_UTRAN_Priority_Parameters_t, UTRAN_PRIORITY, 3),
3282CSN_DESCR_END (Repeated_Individual_UTRAN_Priority_Parameters_t)
3283
3284static const
3285CSN_DESCR_BEGIN (ThreeG_Individual_Priority_Parameters_Description_t)
3286 M_NEXT_EXIST (ThreeG_Individual_Priority_Parameters_Description_t, Exist_DEFAULT_UTRAN_PRIORITY, 1),
3287 M_UINT (ThreeG_Individual_Priority_Parameters_Description_t, DEFAULT_UTRAN_PRIORITY, 3),
3288 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),
3289CSN_DESCR_END (ThreeG_Individual_Priority_Parameters_Description_t)
3290
3291static const
3292CSN_DESCR_BEGIN (Repeated_Individual_EUTRAN_Priority_Parameters_t)
3293 M_REC_ARRAY (Repeated_Individual_EUTRAN_Priority_Parameters_t, EARFCN, Count, 16),
3294 M_UINT (Repeated_Individual_EUTRAN_Priority_Parameters_t, EUTRAN_PRIORITY, 3),
3295CSN_DESCR_END (Repeated_Individual_EUTRAN_Priority_Parameters_t)
3296
3297static const
3298CSN_DESCR_BEGIN (EUTRAN_Individual_Priority_Parameters_Description_t)
3299 M_NEXT_EXIST (EUTRAN_Individual_Priority_Parameters_Description_t, Exist_DEFAULT_EUTRAN_PRIORITY, 1),
3300 M_UINT (EUTRAN_Individual_Priority_Parameters_Description_t, DEFAULT_EUTRAN_PRIORITY, 3),
3301 M_REC_TARRAY (EUTRAN_Individual_Priority_Parameters_Description_t, Repeated_Individual_EUTRAN_Priority_Parameters, Repeated_Individual_EUTRAN_Priority_Parameters_t, Count),
3302CSN_DESCR_END (EUTRAN_Individual_Priority_Parameters_Description_t)
3303
3304static const
3305CSN_DESCR_BEGIN (Provide_Individual_Priorities_t)
3306 M_UINT (Provide_Individual_Priorities_t, GERAN_PRIORITY, 3),
3307 M_NEXT_EXIST (Provide_Individual_Priorities_t, Exist_3G_Individual_Priority_Parameters_Description, 1),
3308 M_TYPE (Provide_Individual_Priorities_t, ThreeG_Individual_Priority_Parameters_Description, ThreeG_Individual_Priority_Parameters_Description_t),
3309 M_NEXT_EXIST (Provide_Individual_Priorities_t, Exist_EUTRAN_Individual_Priority_Parameters_Description, 1),
3310 M_TYPE (Provide_Individual_Priorities_t, EUTRAN_Individual_Priority_Parameters_Description, EUTRAN_Individual_Priority_Parameters_Description_t),
3311 M_NEXT_EXIST (Provide_Individual_Priorities_t, Exist_T3230_timeout_value, 1),
3312 M_UINT (Provide_Individual_Priorities_t, T3230_timeout_value, 3),
3313CSN_DESCR_END (Provide_Individual_Priorities_t)
3314
3315static const
3316CSN_DESCR_BEGIN (Individual_Priorities_t)
3317 M_UNION (Individual_Priorities_t, 2),
3318 M_TYPE (Individual_Priorities_t, u.Delete_All_Stored_Individual_Priorities, Delete_All_Stored_Individual_Priorities_t),
3319 M_TYPE (Individual_Priorities_t, u.Provide_Individual_Priorities, Provide_Individual_Priorities_t),
3320CSN_DESCR_END (Individual_Priorities_t)
3321
3322static const
3323CSN_DESCR_BEGIN (PMO_AdditionsR9_t)
3324 M_NEXT_EXIST (PMO_AdditionsR9_t, existEnhanced_Cell_Reselection_Parameters_Description, 1),
3325 M_TYPE (PMO_AdditionsR9_t, Enhanced_Cell_Reselection_Parameters_Description, Enh_Cell_Reselect_Param_Desp_t),
3326 M_NEXT_EXIST (PMO_AdditionsR9_t, existCSG_Cells_Reporting_Description, 1),
3327 M_TYPE (PMO_AdditionsR9_t, CSG_Cells_Reporting_Description, CSG_Cells_Reporting_Desp_t),
3328CSN_DESCR_END (PMO_AdditionsR9_t)
3329
3330static const
3331CSN_DESCR_BEGIN (PMO_AdditionsR8_t)
3332 M_NEXT_EXIST (PMO_AdditionsR8_t, existBA_IND_3G_PMO_IND, 2),
Anders Broman8ea3cbe2020-01-28 17:36:33 +01003333 M_UINT (PMO_AdditionsR8_t, BA_IND_3G, 1),
3334 M_UINT (PMO_AdditionsR8_t, PMO_IND, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03003335 M_NEXT_EXIST (PMO_AdditionsR8_t, existPriorityAndEUTRAN_ParametersDescription_PMO, 1),
3336 M_TYPE (PMO_AdditionsR8_t, PriorityAndEUTRAN_ParametersDescription_PMO, PriorityAndEUTRAN_ParametersDescription_PMO_t),
3337 M_NEXT_EXIST (PMO_AdditionsR8_t, existIndividualPriorities_PMO, 1),
3338 M_TYPE (PMO_AdditionsR8_t, IndividualPriorities_PMO, Individual_Priorities_t),
3339 M_NEXT_EXIST (PMO_AdditionsR8_t, existThreeG_CSG_Description, 1),
3340 M_TYPE (PMO_AdditionsR8_t, ThreeG_CSG_Description_PMO, ThreeG_CSG_Description_t),
3341 M_NEXT_EXIST (PMO_AdditionsR8_t, existEUTRAN_CSG_Description, 1),
3342 M_TYPE (PMO_AdditionsR8_t, EUTRAN_CSG_Description_PMO, EUTRAN_CSG_Description_t),
3343 M_NEXT_EXIST (PMO_AdditionsR8_t, existMeasurement_Control_Parameters_Description, 1),
3344 M_TYPE (PMO_AdditionsR8_t, Measurement_Control_Parameters_Description_PMO, Meas_Ctrl_Param_Desp_t),
3345 M_NEXT_EXIST_OR_NULL (PMO_AdditionsR8_t, existAdditionsR9, 1),
3346 M_TYPE (PMO_AdditionsR8_t, AdditionsR9, PMO_AdditionsR9_t),
3347CSN_DESCR_END (PMO_AdditionsR8_t)
3348
3349static const
3350CSN_DESCR_BEGIN (PMO_AdditionsR7_t)
3351 M_NEXT_EXIST (PMO_AdditionsR7_t, existREPORTING_OFFSET_THRESHOLD_700, 2),
3352 M_UINT (PMO_AdditionsR7_t, REPORTING_OFFSET_700, 3),
3353 M_UINT (PMO_AdditionsR7_t, REPORTING_THRESHOLD_700, 3),
3354
3355 M_NEXT_EXIST (PMO_AdditionsR7_t, existREPORTING_OFFSET_THRESHOLD_810, 2),
3356 M_UINT (PMO_AdditionsR7_t, REPORTING_OFFSET_810, 3),
3357 M_UINT (PMO_AdditionsR7_t, REPORTING_THRESHOLD_810, 3),
3358
3359 M_NEXT_EXIST_OR_NULL (PMO_AdditionsR7_t, existAdditionsR8, 1),
3360 M_TYPE (PMO_AdditionsR7_t, additionsR8, PMO_AdditionsR8_t),
3361CSN_DESCR_END (PMO_AdditionsR7_t)
3362
3363static const
3364CSN_DESCR_BEGIN (PMO_AdditionsR6_t)
3365 M_UINT (PMO_AdditionsR6_t, CCN_ACTIVE_3G, 1),
3366 M_NEXT_EXIST_OR_NULL (PMO_AdditionsR6_t, existAdditionsR7, 1),
3367 M_TYPE (PMO_AdditionsR6_t, additionsR7, PMO_AdditionsR7_t),
3368CSN_DESCR_END (PMO_AdditionsR6_t)
3369
3370static const
3371CSN_DESCR_BEGIN(PCCO_AdditionsR6_t)
3372 M_UINT (PCCO_AdditionsR6_t, CCN_ACTIVE_3G, 1),
3373CSN_DESCR_END (PCCO_AdditionsR6_t)
3374
3375static const
3376CSN_DESCR_BEGIN (PMO_AdditionsR5_t)
3377 M_NEXT_EXIST (PMO_AdditionsR5_t, existGRNTI_Extension, 1),
3378 M_UINT (PMO_AdditionsR5_t, GRNTI, 4),
3379 M_NEXT_EXIST (PMO_AdditionsR5_t, exist_lu_ModeNeighbourCellParams, 1),
3380 M_REC_TARRAY (PMO_AdditionsR5_t, lu_ModeNeighbourCellParams, lu_ModeNeighbourCellParams_t, count_lu_ModeNeighbourCellParams),
3381 M_NEXT_EXIST (PMO_AdditionsR5_t, existNC_lu_ModeOnlyCapableCellList, 1),
3382 M_TYPE (PMO_AdditionsR5_t, NC_lu_ModeOnlyCapableCellList, NC_lu_ModeOnlyCapableCellList_t),
3383 M_NEXT_EXIST (PMO_AdditionsR5_t, existGPRS_AdditionalMeasurementParams3G, 1),
3384 M_TYPE (PMO_AdditionsR5_t, GPRS_AdditionalMeasurementParams3G, GPRS_AdditionalMeasurementParams3G_t),
3385 M_NEXT_EXIST_OR_NULL (PMO_AdditionsR5_t, existAdditionsR6, 1),
3386 M_TYPE (PMO_AdditionsR5_t, additionsR6, PMO_AdditionsR6_t),
3387CSN_DESCR_END (PMO_AdditionsR5_t)
3388
3389static const
3390CSN_DESCR_BEGIN (PCCO_AdditionsR5_t)
3391 M_NEXT_EXIST (PCCO_AdditionsR5_t, existGRNTI_Extension, 1),
3392 M_UINT (PCCO_AdditionsR5_t, GRNTI, 4),
3393 M_NEXT_EXIST (PCCO_AdditionsR5_t, exist_lu_ModeNeighbourCellParams, 1),
3394 M_REC_TARRAY (PCCO_AdditionsR5_t, lu_ModeNeighbourCellParams, lu_ModeNeighbourCellParams_t, count_lu_ModeNeighbourCellParams),
3395 M_NEXT_EXIST (PCCO_AdditionsR5_t, existNC_lu_ModeOnlyCapableCellList, 1),
3396 M_TYPE (PCCO_AdditionsR5_t, NC_lu_ModeOnlyCapableCellList, NC_lu_ModeOnlyCapableCellList_t),
3397 M_NEXT_EXIST (PCCO_AdditionsR5_t, existGPRS_AdditionalMeasurementParams3G, 1),
3398 M_TYPE (PCCO_AdditionsR5_t, GPRS_AdditionalMeasurementParams3G, GPRS_AdditionalMeasurementParams3G_t),
3399 M_NEXT_EXIST_OR_NULL (PCCO_AdditionsR5_t, existAdditionsR6, 1),
3400 M_TYPE (PCCO_AdditionsR5_t, additionsR6, PCCO_AdditionsR6_t),
3401CSN_DESCR_END (PCCO_AdditionsR5_t)
3402
3403static const
3404CSN_DESCR_BEGIN (PMO_AdditionsR4_t)
3405 M_UINT (PMO_AdditionsR4_t, CCN_ACTIVE, 1),
3406 M_NEXT_EXIST (PMO_AdditionsR4_t, Exist_CCN_Support_Description_ID, 1),
3407 M_TYPE (PMO_AdditionsR4_t, CCN_Support_Description, CCN_Support_Description_t),
3408 M_NEXT_EXIST_OR_NULL (PMO_AdditionsR4_t, Exist_AdditionsR5, 1),
3409 M_TYPE (PMO_AdditionsR4_t, AdditionsR5, PMO_AdditionsR5_t),
3410CSN_DESCR_END (PMO_AdditionsR4_t)
3411
3412static const
3413CSN_DESCR_BEGIN (PMO_AdditionsR99_t)
3414 M_NEXT_EXIST (PMO_AdditionsR99_t, Exist_ENH_Measurement_Parameters, 1),
3415 M_TYPE (PMO_AdditionsR99_t, ENH_Measurement_Parameters, ENH_Measurement_Parameters_PMO_t),
3416 M_NEXT_EXIST_OR_NULL (PMO_AdditionsR99_t, Exist_AdditionsR4, 1),
3417 M_TYPE (PMO_AdditionsR99_t, AdditionsR4, PMO_AdditionsR4_t),
3418CSN_DESCR_END (PMO_AdditionsR99_t)
3419
3420static const
3421CSN_DESCR_BEGIN (PCCO_AdditionsR4_t)
3422 M_UINT (PCCO_AdditionsR4_t, CCN_ACTIVE, 1),
3423 M_NEXT_EXIST (PCCO_AdditionsR4_t, Exist_Container_ID, 1),
3424 M_UINT (PCCO_AdditionsR4_t, CONTAINER_ID, 2),
3425 M_NEXT_EXIST (PCCO_AdditionsR4_t, Exist_CCN_Support_Description_ID, 1),
3426 M_TYPE (PCCO_AdditionsR4_t, CCN_Support_Description, CCN_Support_Description_t),
3427 M_NEXT_EXIST_OR_NULL (PCCO_AdditionsR4_t, Exist_AdditionsR5, 1),
3428 M_TYPE (PCCO_AdditionsR4_t, AdditionsR5, PCCO_AdditionsR5_t),
3429CSN_DESCR_END (PCCO_AdditionsR4_t)
3430
3431static const
3432CSN_DESCR_BEGIN (PCCO_AdditionsR99_t)
3433 M_TYPE (PCCO_AdditionsR99_t, ENH_Measurement_Parameters, ENH_Measurement_Parameters_PCCO_t),
3434 M_NEXT_EXIST_OR_NULL (PCCO_AdditionsR99_t, Exist_AdditionsR4, 1),
3435 M_TYPE (PCCO_AdditionsR99_t, AdditionsR4, PCCO_AdditionsR4_t),
3436CSN_DESCR_END (PCCO_AdditionsR99_t)
3437
3438static const
3439CSN_DESCR_BEGIN(LSA_ID_Info_Element_t)
3440 M_UNION (LSA_ID_Info_Element_t, 2),
3441 M_UINT (LSA_ID_Info_Element_t, u.LSA_ID, 24),
3442 M_UINT (LSA_ID_Info_Element_t, u.ShortLSA_ID, 10),
3443CSN_DESCR_END (LSA_ID_Info_Element_t)
3444
3445static const
3446CSN_DESCR_BEGIN(LSA_ID_Info_t)
3447 M_REC_TARRAY (LSA_ID_Info_t, LSA_ID_Info_Elements, LSA_ID_Info_Element_t, Count_LSA_ID_Info_Element),
3448CSN_DESCR_END (LSA_ID_Info_t)
3449
3450static const
3451CSN_DESCR_BEGIN(LSA_Parameters_t)
3452 M_UINT (LSA_Parameters_t, NR_OF_FREQ_OR_CELLS, 5),
3453 M_VAR_TARRAY (LSA_Parameters_t, LSA_ID_Info, LSA_ID_Info_t, NR_OF_FREQ_OR_CELLS),
3454CSN_DESCR_END (LSA_Parameters_t)
3455
3456static const
3457CSN_DESCR_BEGIN (PMO_AdditionsR98_t)
3458 M_NEXT_EXIST (PMO_AdditionsR98_t, Exist_LSA_Parameters, 1),
3459 M_TYPE (PMO_AdditionsR98_t, LSA_Parameters, LSA_Parameters_t),
3460
3461 M_NEXT_EXIST_OR_NULL (PMO_AdditionsR98_t, Exist_AdditionsR99, 1),
3462 M_TYPE (PMO_AdditionsR98_t, AdditionsR99, PMO_AdditionsR99_t),
3463CSN_DESCR_END (PMO_AdditionsR98_t)
3464
3465static const
3466CSN_DESCR_BEGIN (PCCO_AdditionsR98_t)
3467 M_NEXT_EXIST (PCCO_AdditionsR98_t, Exist_LSA_Parameters, 1),
3468 M_TYPE (PCCO_AdditionsR98_t, LSA_Parameters, LSA_Parameters_t),
3469
3470 M_NEXT_EXIST_OR_NULL (PCCO_AdditionsR98_t, Exist_AdditionsR99, 1),
3471 M_TYPE (PCCO_AdditionsR98_t, AdditionsR99, PCCO_AdditionsR99_t),
3472CSN_DESCR_END (PCCO_AdditionsR98_t)
3473
3474static const
3475CSN_DESCR_BEGIN (Target_Cell_GSM_t)
3476 M_UINT (Target_Cell_GSM_t, IMMEDIATE_REL, 1),
3477 M_UINT (Target_Cell_GSM_t, ARFCN, 10),
3478 M_UINT (Target_Cell_GSM_t, BSIC, 6),
3479 M_TYPE (Target_Cell_GSM_t, NC_Measurement_Parameters, NC_Measurement_Parameters_with_Frequency_List_t),
3480 M_NEXT_EXIST_OR_NULL (Target_Cell_GSM_t, Exist_AdditionsR98, 1),
3481 M_TYPE (Target_Cell_GSM_t, AdditionsR98, PCCO_AdditionsR98_t),
3482CSN_DESCR_END (Target_Cell_GSM_t)
3483
3484static const
3485CSN_DESCR_BEGIN (Target_Cell_3G_AdditionsR8_t)
3486 M_NEXT_EXIST (Target_Cell_3G_AdditionsR8_t, Exist_EUTRAN_Target_Cell, 1),
3487 M_TYPE (Target_Cell_3G_AdditionsR8_t, EUTRAN_Target_Cell, EUTRAN_Target_Cell_t),
3488 M_NEXT_EXIST (Target_Cell_3G_AdditionsR8_t, Exist_Individual_Priorities, 1),
3489 M_TYPE (Target_Cell_3G_AdditionsR8_t, Individual_Priorities, Individual_Priorities_t),
3490CSN_DESCR_END (Target_Cell_3G_AdditionsR8_t)
3491
3492static const
3493CSN_DESCR_BEGIN (Target_Cell_3G_AdditionsR5_t)
3494 M_NEXT_EXIST (Target_Cell_3G_AdditionsR5_t, Exist_G_RNTI_Extention, 1),
3495 M_UINT (Target_Cell_3G_AdditionsR5_t, G_RNTI_Extention, 4),
3496 M_NEXT_EXIST_OR_NULL (Target_Cell_3G_AdditionsR5_t, Exist_AdditionsR8, 1),
3497 M_TYPE (Target_Cell_3G_AdditionsR5_t, AdditionsR8, Target_Cell_3G_AdditionsR8_t),
3498CSN_DESCR_END (Target_Cell_3G_AdditionsR5_t)
3499
3500static const
3501CSN_DESCR_BEGIN(Target_Cell_3G_t)
3502 /* 00 -- Message escape */
3503 M_FIXED (Target_Cell_3G_t, 2, 0x00),
3504 M_UINT (Target_Cell_3G_t, IMMEDIATE_REL, 1),
3505 M_NEXT_EXIST (Target_Cell_3G_t, Exist_FDD_Description, 1),
3506 M_TYPE (Target_Cell_3G_t, FDD_Target_Cell, FDD_Target_Cell_t),
3507 M_NEXT_EXIST (Target_Cell_3G_t, Exist_TDD_Description, 1),
3508 M_TYPE (Target_Cell_3G_t, TDD_Target_Cell, TDD_Target_Cell_t),
3509 M_NEXT_EXIST_OR_NULL (Target_Cell_3G_t, Exist_AdditionsR5, 1),
3510 M_TYPE (Target_Cell_3G_t, AdditionsR5, Target_Cell_3G_AdditionsR5_t),
3511CSN_DESCR_END (Target_Cell_3G_t)
3512
3513static const
3514CSN_DESCR_BEGIN(Packet_Cell_Change_Order_t)
3515 M_UINT (Packet_Cell_Change_Order_t, MESSAGE_TYPE, 6),
3516 M_UINT (Packet_Cell_Change_Order_t, PAGE_MODE, 2),
3517
3518 M_TYPE (Packet_Cell_Change_Order_t, ID, PacketCellChangeOrderID_t),
3519
3520 M_UNION (Packet_Cell_Change_Order_t, 2),
3521 M_TYPE (Packet_Cell_Change_Order_t, u.Target_Cell_GSM, Target_Cell_GSM_t),
3522 M_TYPE (Packet_Cell_Change_Order_t, u.Target_Cell_3G, Target_Cell_3G_t),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04003523
3524 M_PADDING_BITS(Packet_Cell_Change_Order_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03003525CSN_DESCR_END (Packet_Cell_Change_Order_t)
3526
3527/*< Packet (Enhanced) Measurement Report message contents > */
3528static const
3529CSN_DESCR_BEGIN(BA_USED_t)
3530 M_UINT (BA_USED_t, BA_USED, 1),
3531 M_UINT (BA_USED_t, BA_USED_3G, 1),
3532CSN_DESCR_END (BA_USED_t)
3533
3534static const
3535CSN_DESCR_BEGIN(Serving_Cell_Data_t)
3536 M_UINT (Serving_Cell_Data_t, RXLEV_SERVING_CELL, 6),
3537 M_FIXED (Serving_Cell_Data_t, 1, 0),
3538CSN_DESCR_END (Serving_Cell_Data_t)
3539
3540static const
3541CSN_DESCR_BEGIN(NC_Measurements_t)
3542 M_UINT (NC_Measurements_t, FREQUENCY_N, 6),
3543
3544 M_NEXT_EXIST (NC_Measurements_t, Exist_BSIC_N, 1),
3545 M_UINT (NC_Measurements_t, BSIC_N, 6),
3546 M_UINT (NC_Measurements_t, RXLEV_N, 6),
3547CSN_DESCR_END (NC_Measurements_t)
3548
3549static const
3550CSN_DESCR_BEGIN(RepeatedInvalid_BSIC_Info_t)
3551 M_UINT (RepeatedInvalid_BSIC_Info_t, BCCH_FREQ_N, 5),
3552 M_UINT (RepeatedInvalid_BSIC_Info_t, BSIC_N, 6),
3553 M_UINT (RepeatedInvalid_BSIC_Info_t, RXLEV_N, 6),
3554CSN_DESCR_END (RepeatedInvalid_BSIC_Info_t)
3555
3556static const
3557CSN_DESCR_BEGIN(REPORTING_QUANTITY_Instance_t)
3558 M_NEXT_EXIST (REPORTING_QUANTITY_Instance_t, Exist_REPORTING_QUANTITY, 1),
3559 M_UINT (REPORTING_QUANTITY_Instance_t, REPORTING_QUANTITY, 6),
3560CSN_DESCR_END (REPORTING_QUANTITY_Instance_t)
3561
3562static const
3563CSN_DESCR_BEGIN(NC_Measurement_Report_t)
3564 M_UINT (NC_Measurement_Report_t, NC_MODE, 1),
3565 M_TYPE (NC_Measurement_Report_t, Serving_Cell_Data, Serving_Cell_Data_t),
3566 M_UINT (NC_Measurement_Report_t, NUMBER_OF_NC_MEASUREMENTS, 3),
3567 M_VAR_TARRAY (NC_Measurement_Report_t, NC_Measurements, NC_Measurements_t, NUMBER_OF_NC_MEASUREMENTS),
3568CSN_DESCR_END (NC_Measurement_Report_t)
3569
3570static const
3571CSN_DESCR_BEGIN(ENH_NC_Measurement_Report_t)
3572 M_UINT (ENH_NC_Measurement_Report_t, NC_MODE, 1),
3573 M_UNION (ENH_NC_Measurement_Report_t, 2),
3574 M_TYPE (ENH_NC_Measurement_Report_t, u.BA_USED, BA_USED_t),
3575 M_UINT (ENH_NC_Measurement_Report_t, u.PSI3_CHANGE_MARK, 2),
3576 M_UINT (ENH_NC_Measurement_Report_t, PMO_USED, 1),
3577 M_UINT (ENH_NC_Measurement_Report_t, BSIC_Seen, 1),
3578 M_UINT (ENH_NC_Measurement_Report_t, SCALE, 1),
3579 M_NEXT_EXIST (ENH_NC_Measurement_Report_t, Exist_Serving_Cell_Data, 1),
3580 M_TYPE (ENH_NC_Measurement_Report_t, Serving_Cell_Data, Serving_Cell_Data_t),
Pau Espin Pedrol81b40cb2020-03-23 15:23:51 +01003581 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 +03003582 M_NEXT_EXIST (ENH_NC_Measurement_Report_t, Exist_ReportBitmap, 1),
3583 M_VAR_TARRAY (ENH_NC_Measurement_Report_t, REPORTING_QUANTITY_Instances, REPORTING_QUANTITY_Instance_t, Count_REPORTING_QUANTITY_Instances),
3584CSN_DESCR_END (ENH_NC_Measurement_Report_t)
3585
3586
3587static const
3588CSN_DESCR_BEGIN(EXT_Measurement_Report_t)
3589 M_UINT (EXT_Measurement_Report_t, EXT_REPORTING_TYPE, 2),
3590
3591 M_NEXT_EXIST (EXT_Measurement_Report_t, Exist_I_LEVEL, 1),
3592
3593 M_NEXT_EXIST (EXT_Measurement_Report_t, Slot[0].Exist, 1),
3594 M_UINT (EXT_Measurement_Report_t, Slot[0].I_LEVEL, 6),
3595
3596 M_NEXT_EXIST (EXT_Measurement_Report_t, Slot[1].Exist, 1),
3597 M_UINT (EXT_Measurement_Report_t, Slot[1].I_LEVEL, 6),
3598
3599 M_NEXT_EXIST (EXT_Measurement_Report_t, Slot[2].Exist, 1),
3600 M_UINT (EXT_Measurement_Report_t, Slot[2].I_LEVEL, 6),
3601
3602 M_NEXT_EXIST (EXT_Measurement_Report_t, Slot[3].Exist, 1),
3603 M_UINT (EXT_Measurement_Report_t, Slot[3].I_LEVEL, 6),
3604
3605 M_NEXT_EXIST (EXT_Measurement_Report_t, Slot[4].Exist, 1),
3606 M_UINT (EXT_Measurement_Report_t, Slot[4].I_LEVEL, 6),
3607
3608 M_NEXT_EXIST (EXT_Measurement_Report_t, Slot[5].Exist, 1),
3609 M_UINT (EXT_Measurement_Report_t, Slot[5].I_LEVEL, 6),
3610
3611 M_NEXT_EXIST (EXT_Measurement_Report_t, Slot[6].Exist, 1),
3612 M_UINT (EXT_Measurement_Report_t, Slot[6].I_LEVEL, 6),
3613
3614 M_NEXT_EXIST (EXT_Measurement_Report_t, Slot[7].Exist, 1),
3615 M_UINT (EXT_Measurement_Report_t, Slot[7].I_LEVEL, 6),
3616
3617 M_UINT (EXT_Measurement_Report_t, NUMBER_OF_EXT_MEASUREMENTS, 5),
3618 M_VAR_TARRAY (EXT_Measurement_Report_t, EXT_Measurements, NC_Measurements_t, NUMBER_OF_EXT_MEASUREMENTS),
3619CSN_DESCR_END (EXT_Measurement_Report_t)
3620
3621static const
3622CSN_DESCR_BEGIN (Measurements_3G_t)
3623 M_UINT (Measurements_3G_t, CELL_LIST_INDEX_3G, 7),
3624 M_UINT (Measurements_3G_t, REPORTING_QUANTITY, 6),
3625CSN_DESCR_END (Measurements_3G_t)
3626
3627static const
3628CSN_DESCR_BEGIN (EUTRAN_Measurement_Report_Body_t)
3629 M_UINT (EUTRAN_Measurement_Report_Body_t, EUTRAN_FREQUENCY_INDEX, 3),
3630 M_UINT (EUTRAN_Measurement_Report_Body_t, CELL_IDENTITY, 9),
3631 M_UINT (EUTRAN_Measurement_Report_Body_t, REPORTING_QUANTITY, 6),
3632CSN_DESCR_END (EUTRAN_Measurement_Report_Body_t)
3633
3634static const
3635CSN_DESCR_BEGIN (EUTRAN_Measurement_Report_t)
3636 M_UINT_OFFSET (EUTRAN_Measurement_Report_t, N_EUTRAN, 2, 1),
3637 M_VAR_TARRAY (EUTRAN_Measurement_Report_t, Report, EUTRAN_Measurement_Report_Body_t, N_EUTRAN),
3638CSN_DESCR_END (EUTRAN_Measurement_Report_t)
3639
3640static const
3641CSN_DESCR_BEGIN(UTRAN_CSG_Measurement_Report_t)
3642 M_UINT (UTRAN_CSG_Measurement_Report_t, UTRAN_CGI, 28),
3643 M_NEXT_EXIST (UTRAN_CSG_Measurement_Report_t, Exist_PLMN_ID, 1),
3644 M_TYPE (UTRAN_CSG_Measurement_Report_t, Plmn_ID, PLMN_t),
3645 M_UINT (UTRAN_CSG_Measurement_Report_t, CSG_ID, 27),
Anders Broman8ea3cbe2020-01-28 17:36:33 +01003646 M_UINT (UTRAN_CSG_Measurement_Report_t, Access_Mode, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03003647 M_UINT (UTRAN_CSG_Measurement_Report_t, REPORTING_QUANTITY, 6),
3648CSN_DESCR_END (UTRAN_CSG_Measurement_Report_t)
3649
3650static const
3651CSN_DESCR_BEGIN(EUTRAN_CSG_Measurement_Report_t)
Anders Broman8ea3cbe2020-01-28 17:36:33 +01003652 M_UINT (EUTRAN_CSG_Measurement_Report_t, EUTRAN_CGI, 28),
3653 M_UINT (EUTRAN_CSG_Measurement_Report_t, Tracking_Area_Code, 16),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03003654 M_NEXT_EXIST (EUTRAN_CSG_Measurement_Report_t, Exist_PLMN_ID, 1),
3655 M_TYPE (EUTRAN_CSG_Measurement_Report_t, Plmn_ID, PLMN_t),
Anders Broman8ea3cbe2020-01-28 17:36:33 +01003656 M_UINT (EUTRAN_CSG_Measurement_Report_t, CSG_ID, 27),
3657 M_UINT (EUTRAN_CSG_Measurement_Report_t, Access_Mode, 1),
3658 M_UINT (EUTRAN_CSG_Measurement_Report_t, REPORTING_QUANTITY, 6),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03003659CSN_DESCR_END (EUTRAN_CSG_Measurement_Report_t)
3660
3661static const
3662CSN_DESCR_BEGIN (PMR_AdditionsR9_t)
3663 M_NEXT_EXIST (PMR_AdditionsR9_t, Exist_UTRAN_CSG_Meas_Rpt, 1),
3664 M_TYPE (PMR_AdditionsR9_t, UTRAN_CSG_Meas_Rpt, UTRAN_CSG_Measurement_Report_t),
3665 M_NEXT_EXIST (PMR_AdditionsR9_t, Exist_EUTRAN_CSG_Meas_Rpt, 1),
3666 M_TYPE (PMR_AdditionsR9_t, EUTRAN_CSG_Meas_Rpt, EUTRAN_CSG_Measurement_Report_t),
3667CSN_DESCR_END (PMR_AdditionsR9_t)
3668
3669static const
3670CSN_DESCR_BEGIN (PMR_AdditionsR8_t)
3671 M_NEXT_EXIST (PMR_AdditionsR8_t, Exist_EUTRAN_Meas_Rpt, 1),
3672 M_TYPE (PMR_AdditionsR8_t, EUTRAN_Meas_Rpt, EUTRAN_Measurement_Report_t),
3673 M_NEXT_EXIST_OR_NULL(PMR_AdditionsR8_t, Exist_AdditionsR9, 1),
3674 M_TYPE (PMR_AdditionsR8_t, AdditionsR9, PMR_AdditionsR9_t),
3675CSN_DESCR_END (PMR_AdditionsR8_t)
3676
3677static const
3678CSN_DESCR_BEGIN (PMR_AdditionsR5_t)
Pascal Quantine4a243c2020-01-28 18:08:15 +01003679 M_NEXT_EXIST (PMR_AdditionsR5_t, Exist_GRNTI, 3),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03003680 M_UINT (PMR_AdditionsR5_t, GRNTI, 4),
3681 M_NEXT_EXIST_OR_NULL (PMR_AdditionsR5_t, Exist_AdditionsR8, 1),
3682 M_TYPE (PMR_AdditionsR5_t, AdditionsR8, PMR_AdditionsR8_t),
3683CSN_DESCR_END (PMR_AdditionsR5_t)
3684
3685static const
3686CSN_DESCR_BEGIN (PMR_AdditionsR99_t)
3687 M_NEXT_EXIST (PMR_AdditionsR99_t, Exist_Info3G, 4),
3688 M_UNION (PMR_AdditionsR99_t, 2),
3689 M_TYPE (PMR_AdditionsR99_t, u.BA_USED, BA_USED_t),
3690 M_UINT (PMR_AdditionsR99_t, u.PSI3_CHANGE_MARK, 2),
3691 M_UINT (PMR_AdditionsR99_t, PMO_USED, 1),
3692
3693 M_NEXT_EXIST (PMR_AdditionsR99_t, Exist_MeasurementReport3G, 2),
3694 M_UINT_OFFSET (PMR_AdditionsR99_t, N_3G, 3, 1), /* offset 1 */
3695 M_VAR_TARRAY_OFFSET (PMR_AdditionsR99_t, Measurements_3G, Measurements_3G_t, N_3G),
3696
3697 M_NEXT_EXIST_OR_NULL (PMR_AdditionsR99_t, Exist_AdditionsR5, 1),
3698 M_TYPE (PMR_AdditionsR99_t, AdditionsR5, PMR_AdditionsR5_t),
3699CSN_DESCR_END (PMR_AdditionsR99_t)
3700
3701static const
3702CSN_DESCR_BEGIN(EMR_ServingCell_t)
3703 /*CSN_MEMBER_BIT (EMR_ServingCell_t, DTX_USED),*/
Anders Broman8ea3cbe2020-01-28 17:36:33 +01003704 M_UINT (EMR_ServingCell_t, DTX_USED, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03003705 M_UINT (EMR_ServingCell_t, RXLEV_VAL, 6),
3706 M_UINT (EMR_ServingCell_t, RX_QUAL_FULL, 3),
3707 M_UINT (EMR_ServingCell_t, MEAN_BEP, 5),
3708 M_UINT (EMR_ServingCell_t, CV_BEP, 3),
3709 M_UINT (EMR_ServingCell_t, NBR_RCVD_BLOCKS, 5),
3710CSN_DESCR_END(EMR_ServingCell_t)
3711
3712static const
3713CSN_DESCR_BEGIN (EnhancedMeasurementReport_t)
3714 M_UINT (EnhancedMeasurementReport_t, RR_Short_PD, 1),
3715 M_UINT (EnhancedMeasurementReport_t, MESSAGE_TYPE, 5),
3716 M_UINT (EnhancedMeasurementReport_t, ShortLayer2_Header, 2),
3717 M_TYPE (EnhancedMeasurementReport_t, BA_USED, BA_USED_t),
3718 M_UINT (EnhancedMeasurementReport_t, BSIC_Seen, 1),
3719 M_UINT (EnhancedMeasurementReport_t, SCALE, 1),
3720 M_NEXT_EXIST (EnhancedMeasurementReport_t, Exist_ServingCellData, 1),
3721 M_TYPE (EnhancedMeasurementReport_t, ServingCellData, EMR_ServingCell_t),
Pau Espin Pedrol81b40cb2020-03-23 15:23:51 +01003722 M_REC_TARRAY (EnhancedMeasurementReport_t, RepeatedInvalid_BSIC_Info, RepeatedInvalid_BSIC_Info_t,
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03003723 Count_RepeatedInvalid_BSIC_Info),
3724 M_NEXT_EXIST (EnhancedMeasurementReport_t, Exist_ReportBitmap, 1),
3725 M_VAR_TARRAY (EnhancedMeasurementReport_t, REPORTING_QUANTITY_Instances, REPORTING_QUANTITY_Instance_t, Count_REPORTING_QUANTITY_Instances),
3726CSN_DESCR_END (EnhancedMeasurementReport_t)
3727
3728static const
3729CSN_DESCR_BEGIN (Packet_Measurement_Report_t)
3730 /* Mac header */
3731 M_UINT (Packet_Measurement_Report_t, PayloadType, 2),
3732 M_UINT (Packet_Measurement_Report_t, spare, 5),
3733 M_UINT (Packet_Measurement_Report_t, R, 1),
3734 M_UINT (Packet_Measurement_Report_t, MESSAGE_TYPE, 6),
3735 /* Mac header */
3736
3737 M_UINT (Packet_Measurement_Report_t, TLLI, 32),
3738
3739 M_NEXT_EXIST (Packet_Measurement_Report_t, Exist_PSI5_CHANGE_MARK, 1),
3740 M_UINT (Packet_Measurement_Report_t, PSI5_CHANGE_MARK, 2),
3741
3742 M_UNION (Packet_Measurement_Report_t, 2),
3743 M_TYPE (Packet_Measurement_Report_t, u.NC_Measurement_Report, NC_Measurement_Report_t),
3744 M_TYPE (Packet_Measurement_Report_t, u.EXT_Measurement_Report, EXT_Measurement_Report_t),
3745
3746 M_NEXT_EXIST_OR_NULL(Packet_Measurement_Report_t, Exist_AdditionsR99, 1),
3747 M_TYPE (Packet_Measurement_Report_t, AdditionsR99, PMR_AdditionsR99_t),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04003748
3749 M_PADDING_BITS (Packet_Measurement_Report_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03003750CSN_DESCR_END (Packet_Measurement_Report_t)
3751
3752static const
3753CSN_DESCR_BEGIN (PEMR_AdditionsR9_t)
3754 M_NEXT_EXIST (PEMR_AdditionsR9_t, Exist_UTRAN_CSG_Target_Cell, 1),
3755 M_TYPE (PEMR_AdditionsR9_t, UTRAN_CSG_Target_Cell, UTRAN_CSG_Target_Cell_t),
3756 M_NEXT_EXIST (PEMR_AdditionsR9_t, Exist_EUTRAN_CSG_Target_Cell, 1),
3757 M_TYPE (PEMR_AdditionsR9_t, EUTRAN_CSG_Target_Cell, EUTRAN_CSG_Target_Cell_t),
3758CSN_DESCR_END (PEMR_AdditionsR9_t)
3759
3760static const
3761CSN_DESCR_BEGIN (Bitmap_Report_Quantity_t)
3762 M_NEXT_EXIST (Bitmap_Report_Quantity_t, Exist_REPORTING_QUANTITY, 1),
3763 M_UINT (Bitmap_Report_Quantity_t, REPORTING_QUANTITY, 6),
3764CSN_DESCR_END (Bitmap_Report_Quantity_t)
3765
3766static const
3767CSN_DESCR_BEGIN (PEMR_AdditionsR8_t)
3768 M_UINT_OFFSET (PEMR_AdditionsR8_t, BITMAP_LENGTH, 7, 1),
3769 M_VAR_TARRAY (PEMR_AdditionsR8_t, Bitmap_Report_Quantity, Bitmap_Report_Quantity_t, BITMAP_LENGTH),
3770 M_NEXT_EXIST (PEMR_AdditionsR8_t, Exist_EUTRAN_Meas_Rpt, 1),
3771 M_TYPE (PEMR_AdditionsR8_t, EUTRAN_Meas_Rpt, EUTRAN_Measurement_Report_t),
3772 M_NEXT_EXIST_OR_NULL(PEMR_AdditionsR8_t, Exist_AdditionsR9, 1),
3773 M_TYPE (PEMR_AdditionsR8_t, AdditionsR9, PEMR_AdditionsR9_t),
3774CSN_DESCR_END (PEMR_AdditionsR8_t)
3775
3776static const
3777CSN_DESCR_BEGIN (PEMR_AdditionsR5_t)
3778 M_NEXT_EXIST (PEMR_AdditionsR5_t, Exist_GRNTI_Ext, 1),
3779 M_UINT (PEMR_AdditionsR5_t, GRNTI_Ext, 4),
3780 M_NEXT_EXIST_OR_NULL(PEMR_AdditionsR5_t, Exist_AdditionsR8, 1),
3781 M_TYPE (PEMR_AdditionsR5_t, AdditionsR8, PEMR_AdditionsR8_t),
3782CSN_DESCR_END (PEMR_AdditionsR5_t)
3783
3784
3785static const
3786CSN_DESCR_BEGIN (Packet_Enh_Measurement_Report_t)
3787 /* Mac header */
3788 M_UINT (Packet_Enh_Measurement_Report_t, PayloadType, 2),
3789 M_UINT (Packet_Enh_Measurement_Report_t, spare, 5),
3790 M_UINT (Packet_Enh_Measurement_Report_t, R, 1),
3791 M_UINT (Packet_Enh_Measurement_Report_t, MESSAGE_TYPE, 6),
3792 /* Mac header */
3793
3794 M_UINT (Packet_Enh_Measurement_Report_t, TLLI, 32),
3795
3796 M_TYPE (Packet_Enh_Measurement_Report_t, Measurements, ENH_NC_Measurement_Report_t),
3797
3798 M_NEXT_EXIST_OR_NULL(Packet_Enh_Measurement_Report_t, Exist_AdditionsR5, 1),
3799 M_TYPE (Packet_Enh_Measurement_Report_t, AdditionsR5, PEMR_AdditionsR5_t),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04003800
3801 M_PADDING_BITS(Packet_Enh_Measurement_Report_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03003802CSN_DESCR_END (Packet_Enh_Measurement_Report_t)
3803
3804/*< Packet Measurement Order message contents >*/
3805static const
3806CSN_DESCR_BEGIN(EXT_Frequency_List_t)
3807 M_UINT (EXT_Frequency_List_t, START_FREQUENCY, 10),
3808 M_UINT (EXT_Frequency_List_t, NR_OF_FREQUENCIES, 5),
3809 M_UINT (EXT_Frequency_List_t, FREQ_DIFF_LENGTH, 3),
3810
3811/* TBD: Count_FREQUENCY_DIFF
3812 * guint8 FREQUENCY_DIFF[31];
3813 * bit (FREQ_DIFF_LENGTH) * NR_OF_FREQUENCIES --> MAX is bit(7) * 31
3814 */
3815CSN_DESCR_END (EXT_Frequency_List_t)
3816
3817static const
3818CSN_DESCR_BEGIN (Packet_Measurement_Order_t)
3819 M_UINT (Packet_Measurement_Order_t, MESSAGE_TYPE, 6),
3820 M_UINT (Packet_Measurement_Order_t, PAGE_MODE, 2),
3821
3822 M_TYPE (Packet_Measurement_Order_t, ID, PacketDownlinkID_t), /* reuse the PDA ID type */
3823
3824 M_UINT (Packet_Measurement_Order_t, PMO_INDEX, 3),
3825 M_UINT (Packet_Measurement_Order_t, PMO_COUNT, 3),
3826
3827 M_NEXT_EXIST (Packet_Measurement_Order_t, Exist_NC_Measurement_Parameters, 1),
3828 M_TYPE (Packet_Measurement_Order_t, NC_Measurement_Parameters, NC_Measurement_Parameters_with_Frequency_List_t),
3829
3830 M_NEXT_EXIST (Packet_Measurement_Order_t, Exist_EXT_Measurement_Parameters, 1),
3831 M_FIXED (Packet_Measurement_Order_t, 2, 0x0), /* EXT_Measurement_Parameters not handled */
3832
3833 M_NEXT_EXIST_OR_NULL (Packet_Measurement_Order_t, Exist_AdditionsR98, 1),
3834 M_TYPE (Packet_Measurement_Order_t, AdditionsR98, PMO_AdditionsR98_t),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04003835
3836 M_PADDING_BITS (Packet_Measurement_Order_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03003837CSN_DESCR_END (Packet_Measurement_Order_t)
3838
3839static const
3840CSN_DESCR_BEGIN(CCN_Measurement_Report_t)
3841 M_UINT (CCN_Measurement_Report_t, RXLEV_SERVING_CELL, 6),
3842 M_FIXED (CCN_Measurement_Report_t, 1, 0),
3843 M_UINT (CCN_Measurement_Report_t, NUMBER_OF_NC_MEASUREMENTS, 3),
3844 M_VAR_TARRAY (CCN_Measurement_Report_t, NC_Measurements, NC_Measurements_t, NUMBER_OF_NC_MEASUREMENTS),
3845CSN_DESCR_END (CCN_Measurement_Report_t)
3846
3847static const
3848CSN_DESCR_BEGIN(Target_Cell_GSM_Notif_t)
3849 M_UINT (Target_Cell_GSM_Notif_t, ARFCN, 10),
3850 M_UINT (Target_Cell_GSM_Notif_t, BSIC, 6),
3851CSN_DESCR_END (Target_Cell_GSM_Notif_t)
3852
3853static const
3854CSN_DESCR_BEGIN(FDD_Target_Cell_Notif_t)
3855 M_UINT (FDD_Target_Cell_Notif_t, FDD_ARFCN, 14),
3856 M_NEXT_EXIST (FDD_Target_Cell_Notif_t, Exist_Bandwith_FDD, 1),
3857 M_UINT (FDD_Target_Cell_Notif_t, BANDWITH_FDD, 3),
3858 M_UINT (FDD_Target_Cell_Notif_t, SCRAMBLING_CODE, 9),
3859CSN_DESCR_END (FDD_Target_Cell_Notif_t)
3860
3861static const
3862CSN_DESCR_BEGIN(TDD_Target_Cell_Notif_t)
3863 M_UINT (TDD_Target_Cell_Notif_t, TDD_ARFCN, 14),
3864 M_NEXT_EXIST (TDD_Target_Cell_Notif_t, Exist_Bandwith_TDD, 1),
3865 M_UINT (TDD_Target_Cell_Notif_t, BANDWITH_TDD, 3),
3866 M_UINT (TDD_Target_Cell_Notif_t, CELL_PARAMETER, 7),
3867 M_UINT (TDD_Target_Cell_Notif_t, Sync_Case_TSTD, 1),
3868CSN_DESCR_END (TDD_Target_Cell_Notif_t)
3869
3870static const
3871CSN_DESCR_BEGIN(Target_Cell_3G_Notif_t)
3872 M_NEXT_EXIST (Target_Cell_3G_Notif_t, Exist_FDD_Description, 1),
3873 M_TYPE (Target_Cell_3G_Notif_t, FDD_Target_Cell_Notif, FDD_Target_Cell_Notif_t),
3874 M_NEXT_EXIST (Target_Cell_3G_Notif_t, Exist_TDD_Description, 1),
3875 M_TYPE (Target_Cell_3G_Notif_t, TDD_Target_Cell, TDD_Target_Cell_Notif_t),
3876 M_UINT (Target_Cell_3G_Notif_t, REPORTING_QUANTITY, 6),
3877CSN_DESCR_END (Target_Cell_3G_Notif_t)
3878
3879static const
3880CSN_DESCR_BEGIN(Target_EUTRAN_Cell_Notif_t)
3881 M_UINT (Target_EUTRAN_Cell_Notif_t, EARFCN, 16),
3882 M_NEXT_EXIST (Target_EUTRAN_Cell_Notif_t, Exist_Measurement_Bandwidth, 1),
3883 M_UINT (Target_EUTRAN_Cell_Notif_t, Measurement_Bandwidth, 3),
3884 M_UINT (Target_EUTRAN_Cell_Notif_t, Physical_Layer_Cell_Identity, 9),
3885 M_UINT (Target_EUTRAN_Cell_Notif_t, Reporting_Quantity, 6),
3886CSN_DESCR_END (Target_EUTRAN_Cell_Notif_t)
3887
3888static const
3889CSN_DESCR_BEGIN(Eutran_Ccn_Measurement_Report_Cell_t)
3890 M_UINT (Eutran_Ccn_Measurement_Report_Cell_t, EUTRAN_FREQUENCY_INDEX, 3),
3891 M_UINT (Eutran_Ccn_Measurement_Report_Cell_t, CELL_IDENTITY, 9),
3892 M_UINT (Eutran_Ccn_Measurement_Report_Cell_t, REPORTING_QUANTITY, 6),
3893CSN_DESCR_END (Eutran_Ccn_Measurement_Report_Cell_t)
3894
3895
3896static const
3897CSN_DESCR_BEGIN(Eutran_Ccn_Measurement_Report_t)
Anders Broman8ea3cbe2020-01-28 17:36:33 +01003898 M_UINT (Eutran_Ccn_Measurement_Report_t, ThreeG_BA_USED, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03003899 M_UINT_OFFSET(Eutran_Ccn_Measurement_Report_t, N_EUTRAN, 2, 1),
3900 M_VAR_TARRAY (Eutran_Ccn_Measurement_Report_t, Eutran_Ccn_Measurement_Report_Cell, Eutran_Ccn_Measurement_Report_Cell_t, N_EUTRAN),
3901CSN_DESCR_END (Eutran_Ccn_Measurement_Report_t)
3902
3903static const
3904CSN_DESCR_BEGIN(Target_Cell_4G_Notif_t)
3905 M_NEXT_EXIST (Target_Cell_4G_Notif_t, Exist_Arfcn, 2),
3906 M_UINT (Target_Cell_4G_Notif_t, Arfcn, 10),
3907 M_UINT (Target_Cell_4G_Notif_t, bsic, 6),
3908 M_NEXT_EXIST (Target_Cell_4G_Notif_t, Exist_3G_Target_Cell, 1),
3909 M_TYPE (Target_Cell_4G_Notif_t, Target_Cell_3G_Notif, Target_Cell_3G_Notif_t),
3910 M_NEXT_EXIST (Target_Cell_4G_Notif_t, Exist_Eutran_Target_Cell, 1),
3911 M_TYPE (Target_Cell_4G_Notif_t, Target_EUTRAN_Cell, Target_EUTRAN_Cell_Notif_t),
3912 M_NEXT_EXIST (Target_Cell_4G_Notif_t, Exist_Eutran_Ccn_Measurement_Report, 1),
3913 M_TYPE (Target_Cell_4G_Notif_t, Eutran_Ccn_Measurement_Report, Eutran_Ccn_Measurement_Report_t),
3914CSN_DESCR_END (Target_Cell_4G_Notif_t)
3915
3916static const
3917CSN_DESCR_BEGIN(Target_Cell_CSG_Notif_t)
3918 M_FIXED (Target_Cell_CSG_Notif_t, 1, 0x00),
3919 M_UNION (Target_Cell_CSG_Notif_t, 2),
3920 M_TYPE (Target_Cell_CSG_Notif_t, u.UTRAN_CSG_Measurement_Report, UTRAN_CSG_Measurement_Report_t),
3921 M_TYPE (Target_Cell_CSG_Notif_t, u.EUTRAN_CSG_Measurement_Report, EUTRAN_CSG_Measurement_Report_t),
3922 M_NEXT_EXIST (Target_Cell_CSG_Notif_t, Exist_Eutran_Ccn_Measurement_Report, 1),
3923 M_TYPE (Target_Cell_CSG_Notif_t, Eutran_Ccn_Measurement_Report, Eutran_Ccn_Measurement_Report_t),
3924CSN_DESCR_END (Target_Cell_CSG_Notif_t)
3925
3926static const
3927CSN_DESCR_BEGIN(Target_Other_RAT_2_Notif_t)
3928 /* 110 vs 1110 */
3929 M_UNION (Target_Other_RAT_2_Notif_t, 2),
3930 M_TYPE (Target_Other_RAT_2_Notif_t, u.Target_Cell_4G_Notif, Target_Cell_4G_Notif_t),
3931 M_TYPE (Target_Other_RAT_2_Notif_t, u.Target_Cell_CSG_Notif, Target_Cell_CSG_Notif_t),
3932CSN_DESCR_END (Target_Other_RAT_2_Notif_t)
3933
3934static const
3935CSN_DESCR_BEGIN(Target_Other_RAT_Notif_t)
3936 /* 10 vs 110 */
3937 M_UNION (Target_Other_RAT_Notif_t, 2),
3938 M_TYPE (Target_Other_RAT_Notif_t, u.Target_Cell_3G_Notif, Target_Cell_3G_Notif_t),
3939 M_TYPE (Target_Other_RAT_Notif_t, u.Target_Other_RAT_2_Notif, Target_Other_RAT_2_Notif_t),
3940CSN_DESCR_END (Target_Other_RAT_Notif_t)
3941
3942static const
3943CSN_DESCR_BEGIN(Target_Cell_t)
3944 /* 0 vs 10 */
3945 M_UNION (Target_Cell_t, 2),
3946 M_TYPE (Target_Cell_t, u.Target_Cell_GSM_Notif, Target_Cell_GSM_Notif_t),
3947 M_TYPE (Target_Cell_t, u.Target_Other_RAT_Notif, Target_Other_RAT_Notif_t),
3948CSN_DESCR_END (Target_Cell_t)
3949
3950static const
3951CSN_DESCR_BEGIN (PCCN_AdditionsR6_t)
3952 M_NEXT_EXIST (PCCN_AdditionsR6_t, Exist_BA_USED_3G, 1),
3953 M_UINT (PCCN_AdditionsR6_t, BA_USED_3G, 1),
3954
3955 M_UINT_OFFSET (PCCN_AdditionsR6_t, N_3G, 3, 1), /* offset 1 */
3956 M_VAR_TARRAY_OFFSET (PCCN_AdditionsR6_t, Measurements_3G, Measurements_3G_t, N_3G),
3957CSN_DESCR_END (PCCN_AdditionsR6_t)
3958
3959/*< Packet Cell Change Notification message contents > */
3960static const
3961CSN_DESCR_BEGIN(Packet_Cell_Change_Notification_t)
3962 /* Mac header */
3963 M_UINT (Packet_Cell_Change_Notification_t, PayloadType, 2),
3964 M_UINT (Packet_Cell_Change_Notification_t, spare, 5),
3965 M_UINT (Packet_Cell_Change_Notification_t, R, 1),
3966 M_UINT (Packet_Cell_Change_Notification_t, MESSAGE_TYPE, 6),
3967 /* Mac header */
3968
3969 M_TYPE (Packet_Cell_Change_Notification_t, Global_TFI, Global_TFI_t),
3970 M_TYPE (Packet_Cell_Change_Notification_t, Target_Cell, Target_Cell_t),
3971
3972 M_UNION (Packet_Cell_Change_Notification_t, 2),
3973 M_UINT (Packet_Cell_Change_Notification_t, u.BA_IND, 1),
3974 M_UINT (Packet_Cell_Change_Notification_t, u.PSI3_CHANGE_MARK, 2),
3975
3976 M_UINT (Packet_Cell_Change_Notification_t, PMO_USED, 1),
3977 M_UINT (Packet_Cell_Change_Notification_t, PCCN_SENDING, 1),
3978 M_TYPE (Packet_Cell_Change_Notification_t, CCN_Measurement_Report, CCN_Measurement_Report_t),
3979
3980 M_NEXT_EXIST_OR_NULL(Packet_Cell_Change_Notification_t, Exist_AdditionsR6, 1),
3981 M_TYPE (Packet_Cell_Change_Notification_t, AdditionsR6, PCCN_AdditionsR6_t),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04003982
3983 M_PADDING_BITS(Packet_Cell_Change_Notification_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03003984CSN_DESCR_END (Packet_Cell_Change_Notification_t)
3985
3986/*< Packet Cell Change Continue message contents > */
3987static const
3988CSN_DESCR_BEGIN(Packet_Cell_Change_Continue_t)
3989 M_UINT (Packet_Cell_Change_Continue_t, MESSAGE_TYPE, 6),
3990 M_UINT (Packet_Cell_Change_Continue_t, PAGE_MODE, 2),
3991 M_FIXED (Packet_Cell_Change_Continue_t, 1, 0x00),
3992 M_TYPE (Packet_Cell_Change_Continue_t, Global_TFI, Global_TFI_t),
3993
3994 M_NEXT_EXIST (Packet_Cell_Change_Continue_t, Exist_ID, 3),
3995 M_UINT (Packet_Cell_Change_Continue_t, ARFCN, 10),
3996 M_UINT (Packet_Cell_Change_Continue_t, BSIC, 6),
3997 M_UINT (Packet_Cell_Change_Continue_t, CONTAINER_ID, 2),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04003998
3999 M_PADDING_BITS(Packet_Cell_Change_Continue_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004000CSN_DESCR_END (Packet_Cell_Change_Continue_t)
4001
4002/*< Packet Neighbour Cell Data message contents > */
4003static const
4004CSN_DESCR_BEGIN(PNCD_Container_With_ID_t)
4005 M_UINT (PNCD_Container_With_ID_t, ARFCN, 10),
4006 M_UINT (PNCD_Container_With_ID_t, BSIC, 6),
4007 M_UINT_ARRAY (PNCD_Container_With_ID_t, CONTAINER, 8, 17),/* 8*17 bits */
4008CSN_DESCR_END (PNCD_Container_With_ID_t)
4009
4010static const
4011CSN_DESCR_BEGIN(PNCD_Container_Without_ID_t)
4012 M_UINT_ARRAY (PNCD_Container_Without_ID_t, CONTAINER, 8, 19),/* 8*19 bits */
4013CSN_DESCR_END (PNCD_Container_Without_ID_t)
4014
4015static const
4016CSN_ChoiceElement_t PNCDContainer[] =
4017{
Pau Espin Pedrol7cce8252020-01-24 16:41:14 +01004018 {1, 0x0, 0, M_TYPE(PNCDContainer_t, u.PNCD_Container_Without_ID, PNCD_Container_Without_ID_t)},
4019 {1, 0x1, 0, M_TYPE(PNCDContainer_t, u.PNCD_Container_With_ID, PNCD_Container_With_ID_t)},
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004020};
4021
4022static const
4023CSN_DESCR_BEGIN(PNCDContainer_t)
4024 M_CHOICE (PNCDContainer_t, UnionType, PNCDContainer, ElementsOf(PNCDContainer)),
4025CSN_DESCR_END (PNCDContainer_t)
4026
4027static const
4028CSN_DESCR_BEGIN(Packet_Neighbour_Cell_Data_t)
4029 M_UINT (Packet_Neighbour_Cell_Data_t, MESSAGE_TYPE, 6),
4030 M_UINT (Packet_Neighbour_Cell_Data_t, PAGE_MODE, 2),
4031 M_FIXED (Packet_Neighbour_Cell_Data_t, 1, 0x00),
4032 M_TYPE (Packet_Neighbour_Cell_Data_t, Global_TFI, Global_TFI_t),
4033
4034 M_UINT (Packet_Neighbour_Cell_Data_t, CONTAINER_ID, 2),
4035 M_UINT (Packet_Neighbour_Cell_Data_t, spare, 1),
4036 M_UINT (Packet_Neighbour_Cell_Data_t, CONTAINER_INDEX, 5),
4037
4038 M_TYPE (Packet_Neighbour_Cell_Data_t, Container, PNCDContainer_t),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04004039 M_PADDING_BITS(Packet_Neighbour_Cell_Data_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004040CSN_DESCR_END (Packet_Neighbour_Cell_Data_t)
4041
4042/*< Packet Serving Cell Data message contents > */
4043static const
4044CSN_DESCR_BEGIN(Packet_Serving_Cell_Data_t)
4045 M_UINT (Packet_Serving_Cell_Data_t, MESSAGE_TYPE, 6),
4046 M_UINT (Packet_Serving_Cell_Data_t, PAGE_MODE, 2),
4047 M_FIXED (Packet_Serving_Cell_Data_t, 1, 0x00),
4048 M_TYPE (Packet_Serving_Cell_Data_t, Global_TFI, Global_TFI_t),
4049
4050 M_UINT (Packet_Serving_Cell_Data_t, spare, 4),
4051 M_UINT (Packet_Serving_Cell_Data_t, CONTAINER_INDEX, 5),
4052 M_UINT_ARRAY (Packet_Serving_Cell_Data_t, CONTAINER, 8, 19),/* 8*19 bits */
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04004053 M_PADDING_BITS(Packet_Serving_Cell_Data_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004054CSN_DESCR_END (Packet_Serving_Cell_Data_t)
4055
4056
4057/* Enhanced Measurement Report */
4058static const
4059CSN_DESCR_BEGIN (ServingCellData_t)
4060 M_UINT (ServingCellData_t, RXLEV_SERVING_CELL, 6),
4061 M_FIXED (ServingCellData_t, 1, 0),
4062CSN_DESCR_END (ServingCellData_t)
4063
4064static const
4065CSN_DESCR_BEGIN (Repeated_Invalid_BSIC_Info_t)
4066 M_UINT (Repeated_Invalid_BSIC_Info_t, BCCH_FREQ_NCELL, 5),
4067 M_UINT (Repeated_Invalid_BSIC_Info_t, BSIC, 6),
4068 M_UINT (Repeated_Invalid_BSIC_Info_t, RXLEV_NCELL, 5),
4069CSN_DESCR_END (Repeated_Invalid_BSIC_Info_t)
4070
4071static const
4072CSN_DESCR_BEGIN (REPORTING_QUANTITY_t)
4073 M_NEXT_EXIST (REPORTING_QUANTITY_t, Exist_REPORTING_QUANTITY, 1),
4074 M_UINT (REPORTING_QUANTITY_t, REPORTING_QUANTITY, 6),
4075CSN_DESCR_END (REPORTING_QUANTITY_t)
4076
4077
4078static const
4079CSN_DESCR_BEGIN (NC_MeasurementReport_t)
Anders Broman8ea3cbe2020-01-28 17:36:33 +01004080 M_UINT (NC_MeasurementReport_t, NC_MODE, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004081 M_UNION (NC_MeasurementReport_t, 2),
4082 M_TYPE (NC_MeasurementReport_t, u.BA_USED, BA_USED_t),
Anders Broman8ea3cbe2020-01-28 17:36:33 +01004083 M_UINT (NC_MeasurementReport_t, u.PSI3_CHANGE_MARK, 2),
4084 M_UINT (NC_MeasurementReport_t, PMO_USED, 1),
4085 M_UINT (NC_MeasurementReport_t, SCALE, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004086
4087 M_NEXT_EXIST (NC_MeasurementReport_t, Exist_ServingCellData, 1),
4088 M_TYPE (NC_MeasurementReport_t, ServingCellData, ServingCellData_t),
4089
4090 M_REC_TARRAY (NC_MeasurementReport_t, Repeated_Invalid_BSIC_Info, Repeated_Invalid_BSIC_Info_t, Count_Repeated_Invalid_BSIC_Info),
4091
4092 M_NEXT_EXIST (NC_MeasurementReport_t, Exist_Repeated_REPORTING_QUANTITY, 1),
4093 M_VAR_TARRAY (NC_MeasurementReport_t, Repeated_REPORTING_QUANTITY, REPORTING_QUANTITY_t, Count_Repeated_Reporting_Quantity),
4094CSN_DESCR_END (NC_MeasurementReport_t)
4095
4096
4097
4098/*< Packet Handover Command message content > */
4099static const
4100CSN_DESCR_BEGIN (GlobalTimeslotDescription_t)
4101 M_UNION (GlobalTimeslotDescription_t, 2),
4102 M_UINT (GlobalTimeslotDescription_t, u.MS_TimeslotAllocation, 8),
4103 M_TYPE (GlobalTimeslotDescription_t, u.Power_Control_Parameters, Power_Control_Parameters_t),
4104CSN_DESCR_END (GlobalTimeslotDescription_t)
4105
4106static const
4107CSN_DESCR_BEGIN (PHO_DownlinkAssignment_t)
4108 M_UINT (PHO_DownlinkAssignment_t, TimeslotAllocation, 8),
4109 M_UINT (PHO_DownlinkAssignment_t, PFI, 7),
Anders Broman8ea3cbe2020-01-28 17:36:33 +01004110 M_UINT (PHO_DownlinkAssignment_t, RLC_Mode, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004111 M_UINT (PHO_DownlinkAssignment_t, TFI_Assignment, 5),
Anders Broman8ea3cbe2020-01-28 17:36:33 +01004112 M_UINT (PHO_DownlinkAssignment_t, ControlACK, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004113
4114 M_NEXT_EXIST (PHO_DownlinkAssignment_t, Exist_EGPRS_WindowSize, 1),
4115 M_UINT (PHO_DownlinkAssignment_t, EGPRS_WindowSize, 5),
4116CSN_DESCR_END (PHO_DownlinkAssignment_t)
4117
4118static const
4119CSN_DESCR_BEGIN (PHO_USF_1_7_t)
4120 M_NEXT_EXIST (PHO_USF_1_7_t, Exist_USF, 1),
4121 M_UINT (PHO_USF_1_7_t, USF, 3),
4122CSN_DESCR_END (PHO_USF_1_7_t)
4123
4124static const
4125CSN_DESCR_BEGIN (USF_AllocationArray_t)
4126 M_UINT (USF_AllocationArray_t, USF_0, 3),
4127 M_VAR_TARRAY_OFFSET (USF_AllocationArray_t, USF_1_7, PHO_USF_1_7_t, NBR_OfAllocatedTimeslots),
4128CSN_DESCR_END (USF_AllocationArray_t)
4129
4130static const
4131CSN_DESCR_BEGIN (PHO_UplinkAssignment_t)
4132 M_UINT (PHO_UplinkAssignment_t, PFI, 7),
Anders Broman8ea3cbe2020-01-28 17:36:33 +01004133 M_UINT (PHO_UplinkAssignment_t, RLC_Mode, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004134 M_UINT (PHO_UplinkAssignment_t, TFI_Assignment, 5),
4135
4136 M_NEXT_EXIST (PHO_UplinkAssignment_t, Exist_ChannelCodingCommand, 1),
4137 M_UINT (PHO_UplinkAssignment_t, ChannelCodingCommand, 2),
4138
4139 M_NEXT_EXIST (PHO_UplinkAssignment_t, Exist_EGPRS_ChannelCodingCommand, 1),
4140 M_UINT (PHO_UplinkAssignment_t, EGPRS_ChannelCodingCommand, 4),
4141
4142 M_NEXT_EXIST (PHO_UplinkAssignment_t, Exist_EGPRS_WindowSize, 1),
4143 M_UINT (PHO_UplinkAssignment_t, EGPRS_WindowSize, 5),
4144
Anders Broman8ea3cbe2020-01-28 17:36:33 +01004145 M_UINT (PHO_UplinkAssignment_t, USF_Granularity, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004146
4147 M_NEXT_EXIST (PHO_UplinkAssignment_t, Exist_TBF_TimeslotAllocation, 1),
4148 M_LEFT_VAR_BMP (PHO_UplinkAssignment_t, TBF_TimeslotAllocation, u.USF_AllocationArray.NBR_OfAllocatedTimeslots, 0),
4149
4150 M_UNION (PHO_UplinkAssignment_t, 2),
4151 M_UINT (PHO_UplinkAssignment_t, u.USF_SingleAllocation, 3),
4152 M_TYPE (PHO_UplinkAssignment_t, u.USF_AllocationArray, USF_AllocationArray_t),
4153CSN_DESCR_END (PHO_UplinkAssignment_t)
4154
4155static const
4156CSN_DESCR_BEGIN (GlobalTimeslotDescription_UA_t)
4157 M_TYPE (GlobalTimeslotDescription_UA_t, GlobalTimeslotDescription, GlobalTimeslotDescription_t),
Pascal Quantin46374692020-01-28 18:03:22 +01004158 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 +03004159
4160 M_TYPE (GlobalTimeslotDescription_UA_t, PHO_UA, PHO_UplinkAssignment_t),
4161 M_FIXED (GlobalTimeslotDescription_UA_t, 1, 0x0), /* Escape recursive */
4162CSN_DESCR_END (GlobalTimeslotDescription_UA_t)
4163
4164static const
4165CSN_DESCR_BEGIN (PHO_GPRS_t)
4166 M_NEXT_EXIST (PHO_GPRS_t, Exist_ChannelCodingCommand, 1),
4167 M_UINT (PHO_GPRS_t, ChannelCodingCommand, 2),
4168
4169 M_NEXT_EXIST (PHO_GPRS_t, Exist_GlobalTimeslotDescription_UA, 1),
4170 M_TYPE (PHO_GPRS_t, GTD_UA, GlobalTimeslotDescription_UA_t),
4171
4172 M_NEXT_EXIST (PHO_GPRS_t, Exist_DownlinkAssignment, 2), /* Don't use M_REC_TARRAY as we don't support multiple TBFs */
4173 M_TYPE (PHO_GPRS_t, DownlinkAssignment, PHO_DownlinkAssignment_t),
4174 M_FIXED (PHO_GPRS_t, 1, 0x0), /* Escape recursive */
4175CSN_DESCR_END (PHO_GPRS_t)
4176
4177static const
4178CSN_DESCR_BEGIN (EGPRS_Description_t)
4179 M_NEXT_EXIST (EGPRS_Description_t, Exist_EGPRS_WindowSize, 1),
4180 M_UINT (EGPRS_Description_t, EGPRS_WindowSize, 5),
4181
4182 M_UINT (EGPRS_Description_t, LinkQualityMeasurementMode, 2),
4183 M_NEXT_EXIST (EGPRS_Description_t, Exist_BEP_Period2, 1),
4184 M_UINT (EGPRS_Description_t, BEP_Period2, 4),
4185CSN_DESCR_END (EGPRS_Description_t)
4186
4187static const
4188CSN_DESCR_BEGIN (DownlinkTBF_t)
4189 M_NEXT_EXIST (DownlinkTBF_t, Exist_EGPRS_Description, 1),
4190 M_TYPE (DownlinkTBF_t, EGPRS_Description, EGPRS_Description_t),
4191
4192 M_NEXT_EXIST (DownlinkTBF_t, Exist_DownlinkAssignment, 2), /* Don't use M_REC_TARRAY as we don't support multiple TBFs */
4193 M_TYPE (DownlinkTBF_t, DownlinkAssignment, PHO_DownlinkAssignment_t),
4194 M_FIXED (DownlinkTBF_t, 1, 0x0), /* Escape recursive */
4195CSN_DESCR_END (DownlinkTBF_t)
4196
4197static const
4198CSN_DESCR_BEGIN (PHO_EGPRS_t)
4199 M_NEXT_EXIST (PHO_EGPRS_t, Exist_EGPRS_WindowSize, 1),
4200 M_UINT (PHO_EGPRS_t, EGPRS_WindowSize, 5),
4201
4202 M_NEXT_EXIST (PHO_EGPRS_t, Exist_EGPRS_ChannelCodingCommand, 1),
4203 M_UINT (PHO_EGPRS_t, EGPRS_ChannelCodingCommand, 4),
4204
4205 M_NEXT_EXIST (PHO_EGPRS_t, Exist_BEP_Period2, 1),
4206 M_UINT (PHO_EGPRS_t, BEP_Period2, 4),
4207
4208 M_NEXT_EXIST (PHO_EGPRS_t, Exist_GlobalTimeslotDescription_UA, 1),
4209 M_TYPE (PHO_EGPRS_t, GTD_UA, GlobalTimeslotDescription_UA_t),
4210
Pascal Quantin46374692020-01-28 18:03:22 +01004211 M_NEXT_EXIST (PHO_EGPRS_t, Exist_DownlinkTBF, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004212 M_TYPE (PHO_EGPRS_t, DownlinkTBF, DownlinkTBF_t),
4213CSN_DESCR_END (PHO_EGPRS_t)
4214
4215static const
4216CSN_DESCR_BEGIN(PHO_TimingAdvance_t)
4217 M_TYPE (PHO_TimingAdvance_t, GlobalPacketTimingAdvance, Global_Packet_Timing_Advance_t),
4218 M_NEXT_EXIST (PHO_TimingAdvance_t, Exist_PacketExtendedTimingAdvance, 1),
4219 M_UINT (PHO_TimingAdvance_t, PacketExtendedTimingAdvance, 2),
4220CSN_DESCR_END (PHO_TimingAdvance_t)
4221
4222static const
Vincent Helfree525bf92020-01-28 18:14:30 +01004223CSN_DESCR_BEGIN(NAS_Container_For_PS_HO_t)
4224 M_UINT (NAS_Container_For_PS_HO_t, NAS_ContainerLength, 7),
4225 M_UINT (NAS_Container_For_PS_HO_t, Spare_1a, 1),
4226 M_UINT (NAS_Container_For_PS_HO_t, Spare_1b, 1),
4227 M_UINT (NAS_Container_For_PS_HO_t, Spare_1c, 1),
4228 M_UINT (NAS_Container_For_PS_HO_t, Old_XID, 1),
4229 M_UINT (NAS_Container_For_PS_HO_t, Spare_1e, 1),
4230 M_UINT (NAS_Container_For_PS_HO_t, Type_of_Ciphering_Algo, 3),
4231 M_UINT (NAS_Container_For_PS_HO_t, IOV_UI_value, 32),
4232CSN_DESCR_END (NAS_Container_For_PS_HO_t)
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004233
4234static const
4235CSN_DESCR_BEGIN(PS_HandoverTo_UTRAN_Payload_t)
4236 M_UINT (PS_HandoverTo_UTRAN_Payload_t, RRC_ContainerLength, 8),
4237 M_VAR_ARRAY (PS_HandoverTo_UTRAN_Payload_t, RRC_Container, RRC_ContainerLength, 0),
4238CSN_DESCR_END (PS_HandoverTo_UTRAN_Payload_t)
4239
4240
4241static const
4242CSN_DESCR_BEGIN(PHO_RadioResources_t)
4243 M_NEXT_EXIST (PHO_RadioResources_t, Exist_HandoverReference, 1),
4244 M_UINT (PHO_RadioResources_t, HandoverReference, 8),
4245
4246 M_UINT (PHO_RadioResources_t, ARFCN, 10),
4247 M_UINT (PHO_RadioResources_t, SI, 2),
Anders Broman8ea3cbe2020-01-28 17:36:33 +01004248 M_UINT (PHO_RadioResources_t, NCI, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004249 M_UINT (PHO_RadioResources_t, BSIC, 6),
4250 M_NEXT_EXIST (PHO_RadioResources_t, Exist_CCN_Active, 1),
Anders Broman8ea3cbe2020-01-28 17:36:33 +01004251 M_UINT (PHO_RadioResources_t, CCN_Active, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004252
4253 M_NEXT_EXIST (PHO_RadioResources_t, Exist_CCN_Active_3G, 1),
Anders Broman8ea3cbe2020-01-28 17:36:33 +01004254 M_UINT (PHO_RadioResources_t, CCN_Active_3G, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004255
4256 M_NEXT_EXIST (PHO_RadioResources_t, Exist_CCN_Support_Description, 1),
4257 M_TYPE (PHO_RadioResources_t, CCN_Support_Description, CCN_Support_Description_t),
4258
4259 M_TYPE (PHO_RadioResources_t, Frequency_Parameters, Frequency_Parameters_t),
4260 M_UINT (PHO_RadioResources_t, NetworkControlOrder, 2),
4261 M_NEXT_EXIST (PHO_RadioResources_t, Exist_PHO_TimingAdvance, 1),
4262 M_TYPE (PHO_RadioResources_t, PHO_TimingAdvance, PHO_TimingAdvance_t),
4263
Anders Broman8ea3cbe2020-01-28 17:36:33 +01004264 M_UINT (PHO_RadioResources_t, Extended_Dynamic_Allocation, 1),
4265 M_UINT (PHO_RadioResources_t, RLC_Reset, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004266 M_NEXT_EXIST (PHO_RadioResources_t, Exist_PO_PR, 2),
4267 M_UINT (PHO_RadioResources_t, PO, 4),
Anders Broman8ea3cbe2020-01-28 17:36:33 +01004268 M_UINT (PHO_RadioResources_t, PR_Mode, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004269
4270
4271 M_NEXT_EXIST (PHO_RadioResources_t, Exist_UplinkControlTimeslot, 1),
4272 M_UINT (PHO_RadioResources_t, UplinkControlTimeslot, 3),
4273
4274 M_UNION (PHO_RadioResources_t, 2),
4275 M_TYPE (PHO_RadioResources_t, u.PHO_GPRS_Mode, PHO_GPRS_t),
4276 M_TYPE (PHO_RadioResources_t, u.PHO_EGPRS_Mode, PHO_EGPRS_t),
4277CSN_DESCR_END (PHO_RadioResources_t)
4278
4279static const
4280CSN_DESCR_BEGIN(PS_HandoverTo_A_GB_ModePayload_t)
4281 M_FIXED (PS_HandoverTo_A_GB_ModePayload_t, 2, 0x00), /* For future extension to enum. */
4282 M_TYPE (PS_HandoverTo_A_GB_ModePayload_t, PHO_RadioResources, PHO_RadioResources_t),
4283
4284 M_NEXT_EXIST (PS_HandoverTo_A_GB_ModePayload_t, Exist_NAS_Container, 1),
Vincent Helfree525bf92020-01-28 18:14:30 +01004285 M_TYPE (PS_HandoverTo_A_GB_ModePayload_t, NAS_Container, NAS_Container_For_PS_HO_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004286CSN_DESCR_END (PS_HandoverTo_A_GB_ModePayload_t)
4287
4288static const
4289CSN_DESCR_BEGIN(Packet_Handover_Command_t)
4290 M_UINT (Packet_Handover_Command_t, MessageType, 6),
4291 M_UINT (Packet_Handover_Command_t, PageMode, 2),
4292
4293 M_FIXED (Packet_Handover_Command_t, 1, 0x00), /* 0 fixed */
4294 M_TYPE (Packet_Handover_Command_t, Global_TFI, Global_TFI_t),
4295
4296 M_UINT (Packet_Handover_Command_t, ContainerID, 2),
4297
4298 M_UNION (Packet_Handover_Command_t, 4),
4299 M_TYPE (Packet_Handover_Command_t, u.PS_HandoverTo_A_GB_ModePayload, PS_HandoverTo_A_GB_ModePayload_t),
4300 M_TYPE (Packet_Handover_Command_t, u.PS_HandoverTo_UTRAN_Payload, PS_HandoverTo_UTRAN_Payload_t),
4301 CSN_ERROR (Packet_Handover_Command_t, "10 <extension> not implemented", CSN_ERROR_STREAM_NOT_SUPPORTED),
4302 CSN_ERROR (Packet_Handover_Command_t, "11 <extension> not implemented", CSN_ERROR_STREAM_NOT_SUPPORTED),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04004303
4304 M_PADDING_BITS(Packet_Handover_Command_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004305CSN_DESCR_END (Packet_Handover_Command_t)
4306
4307/*< End Packet Handover Command >*/
4308
4309/*< Packet Physical Information message content > */
4310
4311static const
4312CSN_DESCR_BEGIN(Packet_PhysicalInformation_t)
4313 M_UINT (Packet_PhysicalInformation_t, MessageType, 6),
4314 M_UINT (Packet_PhysicalInformation_t, PageMode, 2),
4315
4316 M_TYPE (Packet_PhysicalInformation_t, Global_TFI, Global_TFI_t),
4317
4318 M_UINT (Packet_PhysicalInformation_t, TimingAdvance, 8),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04004319 M_PADDING_BITS(Packet_PhysicalInformation_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004320CSN_DESCR_END (Packet_PhysicalInformation_t)
4321
4322/*< End Packet Physical Information > */
4323
4324
4325/*< ADDITIONAL MS RADIO ACCESS CAPABILITIES content > */
4326static const
4327CSN_ChoiceElement_t AdditionalMsRadAccessCapID[] =
4328{
Pau Espin Pedrol7cce8252020-01-24 16:41:14 +01004329 {1, 0, 0, M_TYPE(AdditionalMsRadAccessCapID_t, u.Global_TFI, Global_TFI_t)},
4330 {1, 0x01, 0, M_UINT(AdditionalMsRadAccessCapID_t, u.TLLI, 32)},
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004331};
4332
4333static const
4334CSN_DESCR_BEGIN(AdditionalMsRadAccessCapID_t)
4335 M_CHOICE (AdditionalMsRadAccessCapID_t, UnionType, AdditionalMsRadAccessCapID, ElementsOf(AdditionalMsRadAccessCapID)),
4336CSN_DESCR_END (AdditionalMsRadAccessCapID_t)
4337
4338
4339static const
4340CSN_DESCR_BEGIN (Additional_MS_Rad_Access_Cap_t)
4341 /* Mac header */
4342 M_UINT (Additional_MS_Rad_Access_Cap_t, PayloadType, 2),
4343 M_UINT (Additional_MS_Rad_Access_Cap_t, spare, 5),
4344 M_UINT (Additional_MS_Rad_Access_Cap_t, R, 1),
4345 M_UINT (Additional_MS_Rad_Access_Cap_t, MESSAGE_TYPE, 6),
4346 /* Mac header */
4347
4348 M_TYPE (Additional_MS_Rad_Access_Cap_t, ID, AdditionalMsRadAccessCapID_t),
Pau Espin Pedrolde635482020-03-25 20:26:02 +01004349 M_TYPE (Additional_MS_Rad_Access_Cap_t, MS_Radio_Access_capability2, MS_Radio_Access_capability2_t),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04004350 M_PADDING_BITS (Additional_MS_Rad_Access_Cap_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004351CSN_DESCR_END (Additional_MS_Rad_Access_Cap_t)
4352
4353
4354/*< End ADDITIONAL MS RADIO ACCESS CAPABILITIES > */
4355
4356
4357/*< Packet Pause content > */
4358
4359static const
4360CSN_DESCR_BEGIN (Packet_Pause_t)
4361 M_UINT (Packet_Pause_t, MESSAGE_TYPE, 2),
4362 M_UINT (Packet_Pause_t, TLLI, 32),
4363 M_BITMAP (Packet_Pause_t, RAI, 48),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04004364 M_PADDING_BITS (Packet_Pause_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004365CSN_DESCR_END (Packet_Pause_t)
4366
4367
4368/*< End Packet Pause > */
4369
4370
4371/*< Packet System Information Type 1 message content >*/
Pascal Quantin29248d62020-01-28 17:13:17 +01004372CSN_DESCR_BEGIN(PSI1_AdditionsR6_t)
4373 M_UINT (PSI1_AdditionsR6_t, LB_MS_TXPWR_MAX_CCH, 5),
4374CSN_DESCR_END (PSI1_AdditionsR6_t)
4375
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004376static const
Pascal Quantin29248d62020-01-28 17:13:17 +01004377CSN_DESCR_BEGIN (PSI1_AdditionsR99_t)
4378 M_UINT (PSI1_AdditionsR99_t, MSCR, 1),
4379 M_UINT (PSI1_AdditionsR99_t, SGSNR, 1),
4380 M_UINT (PSI1_AdditionsR99_t, BandIndicator, 1),
4381 M_NEXT_EXIST_OR_NULL (PSI1_AdditionsR99_t, Exist_AdditionsR6, 1),
4382 M_TYPE (PSI1_AdditionsR99_t, AdditionsR6, PSI1_AdditionsR6_t),
4383CSN_DESCR_END (PSI1_AdditionsR99_t)
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004384
4385static const
4386CSN_DESCR_BEGIN(PCCCH_Organization_t)
4387 M_UINT (PCCCH_Organization_t, BS_PCC_REL, 1),
4388 M_UINT (PCCCH_Organization_t, BS_PBCCH_BLKS, 2),
4389 M_UINT (PCCCH_Organization_t, BS_PAG_BLKS_RES, 4),
4390 M_UINT (PCCCH_Organization_t, BS_PRACH_BLKS, 4),
4391CSN_DESCR_END (PCCCH_Organization_t)
4392
4393
4394static const
4395CSN_DESCR_BEGIN(PSI1_t)
Pascal Quantin29248d62020-01-28 17:13:17 +01004396 M_UINT (PSI1_t, MESSAGE_TYPE, 6),
4397 M_UINT (PSI1_t, PAGE_MODE, 2),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004398
Pascal Quantin29248d62020-01-28 17:13:17 +01004399 M_UINT (PSI1_t, PBCCH_CHANGE_MARK, 3),
4400 M_UINT (PSI1_t, PSI_CHANGE_FIELD, 4),
4401 M_UINT (PSI1_t, PSI1_REPEAT_PERIOD, 4),
4402 M_UINT (PSI1_t, PSI_COUNT_LR, 6),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004403
Pascal Quantin29248d62020-01-28 17:13:17 +01004404 M_NEXT_EXIST (PSI1_t, Exist_PSI_COUNT_HR, 1),
4405 M_UINT (PSI1_t, PSI_COUNT_HR, 4),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004406
Pascal Quantin29248d62020-01-28 17:13:17 +01004407 M_UINT (PSI1_t, MEASUREMENT_ORDER, 1),
4408 M_TYPE (PSI1_t, GPRS_Cell_Options, GPRS_Cell_Options_t),
4409 M_TYPE (PSI1_t, PRACH_Control, PRACH_Control_t),
4410 M_TYPE (PSI1_t, PCCCH_Organization, PCCCH_Organization_t),
4411 M_TYPE (PSI1_t, Global_Power_Control_Parameters, Global_Power_Control_Parameters_t),
4412 M_UINT (PSI1_t, PSI_STATUS_IND, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004413
Pascal Quantin29248d62020-01-28 17:13:17 +01004414 M_NEXT_EXIST_OR_NULL (PSI1_t, Exist_AdditionsR99, 1),
4415 M_TYPE (PSI1_t, AdditionsR99, PSI1_AdditionsR99_t),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04004416
4417 M_PADDING_BITS(PSI1_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004418CSN_DESCR_END (PSI1_t)
4419/*< End Packet System Information Type 1 message content >*/
4420
4421
4422/*< Packet System Information Type 2 message content >*/
4423
4424static const
4425CSN_DESCR_BEGIN(LAI_t)
4426 M_TYPE (LAI_t, PLMN, PLMN_t),
4427 M_UINT (LAI_t, LAC, 16),
4428CSN_DESCR_END (LAI_t)
4429
4430static const
4431CSN_DESCR_BEGIN(Cell_Identification_t)
4432 M_TYPE (Cell_Identification_t, LAI, LAI_t),
4433 M_UINT (Cell_Identification_t, RAC, 8),
4434 M_UINT (Cell_Identification_t, Cell_Identity, 16),
4435CSN_DESCR_END (Cell_Identification_t)
4436
4437static const
4438CSN_DESCR_BEGIN(Non_GPRS_Cell_Options_t)
Anders Broman8ea3cbe2020-01-28 17:36:33 +01004439 M_UINT (Non_GPRS_Cell_Options_t, ATT, 1),
Pau Espin Pedrol034e32f2020-01-28 17:14:26 +01004440
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004441 M_NEXT_EXIST (Non_GPRS_Cell_Options_t, Exist_T3212, 1),
4442 M_UINT (Non_GPRS_Cell_Options_t, T3212, 8),
Pau Espin Pedrol034e32f2020-01-28 17:14:26 +01004443
Anders Broman8ea3cbe2020-01-28 17:36:33 +01004444 M_UINT (Non_GPRS_Cell_Options_t, NECI, 1),
4445 M_UINT (Non_GPRS_Cell_Options_t, PWRC, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004446 M_UINT (Non_GPRS_Cell_Options_t, DTX, 2),
4447 M_UINT (Non_GPRS_Cell_Options_t, RADIO_LINK_TIMEOUT, 4),
4448 M_UINT (Non_GPRS_Cell_Options_t, BS_AG_BLKS_RES, 3),
4449 M_UINT (Non_GPRS_Cell_Options_t, CCCH_CONF, 3),
4450 M_UINT (Non_GPRS_Cell_Options_t, BS_PA_MFRMS, 3),
4451 M_UINT (Non_GPRS_Cell_Options_t, MAX_RETRANS, 2),
4452 M_UINT (Non_GPRS_Cell_Options_t, TX_INTEGER, 4),
Anders Broman8ea3cbe2020-01-28 17:36:33 +01004453 M_UINT (Non_GPRS_Cell_Options_t, EC, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004454 M_UINT (Non_GPRS_Cell_Options_t, MS_TXPWR_MAX_CCCH, 5),
4455
4456 M_NEXT_EXIST (Non_GPRS_Cell_Options_t, Exist_Extension_Bits, 1),
4457 M_TYPE (Non_GPRS_Cell_Options_t, Extension_Bits, Extension_Bits_t),
4458CSN_DESCR_END (Non_GPRS_Cell_Options_t)
4459
4460static const
4461CSN_DESCR_BEGIN(Reference_Frequency_t)
4462 M_UINT(Reference_Frequency_t, NUMBER, 4),
4463 M_UINT_OFFSET(Reference_Frequency_t, Length, 4, 3),
4464 M_VAR_ARRAY (Reference_Frequency_t, Contents[0], Length, 0),
4465CSN_DESCR_END (Reference_Frequency_t)
4466
4467static const
4468CSN_DESCR_BEGIN(PSI2_MA_t)
4469 M_UINT(PSI2_MA_t, NUMBER, 4),
4470 M_TYPE(PSI2_MA_t, Mobile_Allocation, GPRS_Mobile_Allocation_t),
4471CSN_DESCR_END (PSI2_MA_t)
4472
4473static const
4474CSN_DESCR_BEGIN(Non_Hopping_PCCCH_Carriers_t)
4475 M_UINT(Non_Hopping_PCCCH_Carriers_t, ARFCN, 10),
4476 M_UINT(Non_Hopping_PCCCH_Carriers_t, TIMESLOT_ALLOCATION, 8),
4477CSN_DESCR_END (Non_Hopping_PCCCH_Carriers_t)
4478
4479static const
4480CSN_DESCR_BEGIN(NonHoppingPCCCH_t)
Pau Espin Pedrol81b40cb2020-03-23 15:23:51 +01004481 M_REC_TARRAY (NonHoppingPCCCH_t, Carriers, Non_Hopping_PCCCH_Carriers_t, Count_Carriers),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004482CSN_DESCR_END (NonHoppingPCCCH_t)
4483
4484static const
4485CSN_DESCR_BEGIN(Hopping_PCCCH_Carriers_t)
4486 M_UINT(Hopping_PCCCH_Carriers_t, MAIO, 6),
4487 M_UINT(Hopping_PCCCH_Carriers_t, TIMESLOT_ALLOCATION, 8),
4488CSN_DESCR_END (Hopping_PCCCH_Carriers_t)
4489
4490static const
4491CSN_DESCR_BEGIN(HoppingPCCCH_t)
4492 M_UINT(HoppingPCCCH_t, MA_NUMBER, 4),
Pau Espin Pedrol81b40cb2020-03-23 15:23:51 +01004493 M_REC_TARRAY (HoppingPCCCH_t, Carriers, Hopping_PCCCH_Carriers_t, Count_Carriers),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004494CSN_DESCR_END (HoppingPCCCH_t)
4495
4496static const
4497CSN_DESCR_BEGIN(PCCCH_Description_t)
4498 M_UINT(PCCCH_Description_t, TSC, 3),
4499 M_UNION (PCCCH_Description_t, 2),
4500 M_TYPE (PCCCH_Description_t, u.NonHopping, NonHoppingPCCCH_t),
4501 M_TYPE (PCCCH_Description_t, u.Hopping, HoppingPCCCH_t),
4502CSN_DESCR_END (PCCCH_Description_t)
4503
4504static const
4505CSN_DESCR_BEGIN(PSI2_t)
4506 M_UINT (PSI2_t, MESSAGE_TYPE, 6),
4507 M_UINT (PSI2_t, PAGE_MODE, 2),
4508
4509 M_UINT (PSI2_t, CHANGE_MARK, 2),
4510 M_UINT (PSI2_t, INDEX, 3),
4511 M_UINT (PSI2_t, COUNT, 3),
4512
4513 M_NEXT_EXIST (PSI2_t, Exist_Cell_Identification, 1),
4514 M_TYPE (PSI2_t, Cell_Identification, Cell_Identification_t),
4515
4516 M_NEXT_EXIST (PSI2_t, Exist_Non_GPRS_Cell_Options, 1),
4517 M_TYPE (PSI2_t, Non_GPRS_Cell_Options, Non_GPRS_Cell_Options_t),
4518
Pau Espin Pedrol81b40cb2020-03-23 15:23:51 +01004519 M_REC_TARRAY (PSI2_t, Reference_Frequency, Reference_Frequency_t, Count_Reference_Frequency),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004520 M_TYPE (PSI2_t, Cell_Allocation, Cell_Allocation_t),
Pau Espin Pedrol81b40cb2020-03-23 15:23:51 +01004521 M_REC_TARRAY (PSI2_t, GPRS_MA, PSI2_MA_t, Count_GPRS_MA),
4522 M_REC_TARRAY (PSI2_t, PCCCH_Description, PCCCH_Description_t, Count_PCCCH_Description),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04004523 M_PADDING_BITS(PSI2_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004524CSN_DESCR_END (PSI2_t)
4525/*< End Packet System Information Type 2 message content >*/
4526
4527
4528
4529/*< Packet System Information Type 3 message content >*/
4530static const
4531CSN_DESCR_BEGIN(Serving_Cell_params_t)
Anders Broman8ea3cbe2020-01-28 17:36:33 +01004532 M_UINT (Serving_Cell_params_t, CELL_BAR_ACCESS_2, 1),
4533 M_UINT (Serving_Cell_params_t, EXC_ACC, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004534 M_UINT (Serving_Cell_params_t, GPRS_RXLEV_ACCESS_MIN, 6),
4535 M_UINT (Serving_Cell_params_t, GPRS_MS_TXPWR_MAX_CCH, 5),
4536 M_NEXT_EXIST (Serving_Cell_params_t, Exist_HCS, 1),
4537 M_TYPE (Serving_Cell_params_t, HCS, HCS_t),
4538 M_UINT (Serving_Cell_params_t, MULTIBAND_REPORTING, 2),
4539CSN_DESCR_END (Serving_Cell_params_t)
4540
4541
4542static const
4543CSN_DESCR_BEGIN(Gen_Cell_Sel_t)
4544 M_UINT (Gen_Cell_Sel_t, GPRS_CELL_RESELECT_HYSTERESIS, 3),
Anders Broman8ea3cbe2020-01-28 17:36:33 +01004545 M_UINT (Gen_Cell_Sel_t, C31_HYST, 1),
4546 M_UINT (Gen_Cell_Sel_t, C32_QUAL, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004547 M_FIXED (Gen_Cell_Sel_t, 1, 0x01),
Pau Espin Pedrol034e32f2020-01-28 17:14:26 +01004548
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004549 M_NEXT_EXIST (Gen_Cell_Sel_t, Exist_T_RESEL, 1),
4550 M_UINT (Gen_Cell_Sel_t, T_RESEL, 3),
4551
4552 M_NEXT_EXIST (Gen_Cell_Sel_t, Exist_RA_RESELECT_HYSTERESIS, 1),
4553 M_UINT (Gen_Cell_Sel_t, RA_RESELECT_HYSTERESIS, 3),
4554CSN_DESCR_END (Gen_Cell_Sel_t)
4555
4556
4557static const
4558CSN_DESCR_BEGIN(COMPACT_Cell_Sel_t)
4559 M_UINT (COMPACT_Cell_Sel_t, bsic, 6),
Anders Broman8ea3cbe2020-01-28 17:36:33 +01004560 M_UINT (COMPACT_Cell_Sel_t, CELL_BAR_ACCESS_2, 1),
4561 M_UINT (COMPACT_Cell_Sel_t, EXC_ACC, 1),
4562 M_UINT (COMPACT_Cell_Sel_t, SAME_RA_AS_SERVING_CELL, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004563 M_NEXT_EXIST (COMPACT_Cell_Sel_t, Exist_GPRS_RXLEV_ACCESS_MIN, 2),
4564 M_UINT (COMPACT_Cell_Sel_t, GPRS_RXLEV_ACCESS_MIN, 6),
4565 M_UINT (COMPACT_Cell_Sel_t, GPRS_MS_TXPWR_MAX_CCH, 5),
4566 M_NEXT_EXIST (COMPACT_Cell_Sel_t, Exist_GPRS_TEMPORARY_OFFSET, 2),
4567 M_UINT (COMPACT_Cell_Sel_t, GPRS_TEMPORARY_OFFSET, 3),
4568 M_UINT (COMPACT_Cell_Sel_t, GPRS_PENALTY_TIME, 5),
4569 M_NEXT_EXIST (COMPACT_Cell_Sel_t, Exist_GPRS_RESELECT_OFFSET, 1),
4570 M_UINT (COMPACT_Cell_Sel_t, GPRS_RESELECT_OFFSET, 5),
4571 M_NEXT_EXIST (COMPACT_Cell_Sel_t, Exist_Hcs_Parm, 1),
4572 M_TYPE (COMPACT_Cell_Sel_t, HCS_Param, HCS_t),
4573 M_NEXT_EXIST (COMPACT_Cell_Sel_t, Exist_TIME_GROUP, 1),
4574 M_UINT (COMPACT_Cell_Sel_t, TIME_GROUP, 2),
4575 M_NEXT_EXIST (COMPACT_Cell_Sel_t, Exist_GUAR_CONSTANT_PWR_BLKS, 1),
4576 M_UINT (COMPACT_Cell_Sel_t, GUAR_CONSTANT_PWR_BLKS, 2),
4577CSN_DESCR_END (COMPACT_Cell_Sel_t)
4578
4579static const
4580CSN_DESCR_BEGIN(COMPACT_Neighbour_Cell_Param_Remaining_t)
4581 /* this FREQ_DIFF_LENGTH is not initialised, it should be the SAME as COMPACT_Neighbour_Cell_Param_t.FREQ_DIFF_LENGTH.
4582 * 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.
4583 */
4584 M_VAR_BITMAP (COMPACT_Neighbour_Cell_Param_Remaining_t, FREQUENCY_DIFF, FREQ_DIFF_LENGTH, 0),
4585 M_TYPE (COMPACT_Neighbour_Cell_Param_Remaining_t, COMPACT_Cell_Sel_Remain_Cells, COMPACT_Cell_Sel_t),
4586CSN_DESCR_END (COMPACT_Neighbour_Cell_Param_Remaining_t)
4587
4588
4589static const
4590CSN_DESCR_BEGIN(COMPACT_Neighbour_Cell_Param_t)
4591 M_UINT (COMPACT_Neighbour_Cell_Param_t, START_FREQUENCY, 10),
4592 M_TYPE (COMPACT_Neighbour_Cell_Param_t, COMPACT_Cell_Sel, COMPACT_Cell_Sel_t),
4593 M_UINT (COMPACT_Neighbour_Cell_Param_t, NR_OF_REMAINING_CELLS, 4),
4594 M_UINT_OFFSET(COMPACT_Neighbour_Cell_Param_t, FREQ_DIFF_LENGTH, 3, 1),
4595 M_VAR_TARRAY (COMPACT_Neighbour_Cell_Param_t, COMPACT_Neighbour_Cell_Param_Remaining, COMPACT_Neighbour_Cell_Param_Remaining_t, NR_OF_REMAINING_CELLS),
4596CSN_DESCR_END (COMPACT_Neighbour_Cell_Param_t)
4597
4598
4599static const
4600CSN_DESCR_BEGIN(COMPACT_Info_t)
4601 M_TYPE (COMPACT_Info_t, Cell_Identification, Cell_Identification_t),
4602 M_REC_TARRAY (COMPACT_Info_t, COMPACT_Neighbour_Cell_Param, COMPACT_Neighbour_Cell_Param_t, COMPACT_Neighbour_Cell_Param_Count),
4603CSN_DESCR_END (COMPACT_Info_t)
4604
4605
4606static const
4607CSN_DESCR_BEGIN(PSI3_AdditionR4_t)
4608 M_NEXT_EXIST (PSI3_AdditionR4_t, Exist_CCN_Support_Desc, 1),
4609 M_TYPE (PSI3_AdditionR4_t, CCN_Support_Desc, CCN_Support_Description_t),
4610CSN_DESCR_END (PSI3_AdditionR4_t)
4611
4612
4613static const
4614CSN_DESCR_BEGIN(PSI3_AdditionR99_t)
4615 M_FIXED (PSI3_AdditionR99_t, 2, 0x00),
4616 M_NEXT_EXIST (PSI3_AdditionR99_t, Exist_COMPACT_Info, 1),
4617 M_TYPE (PSI3_AdditionR99_t, COMPACT_Info, COMPACT_Info_t),
4618 M_FIXED (PSI3_AdditionR99_t, 1, 0x00),
4619 M_NEXT_EXIST (PSI3_AdditionR99_t, Exist_AdditionR4, 1),
4620 M_TYPE (PSI3_AdditionR99_t, AdditionR4, PSI3_AdditionR4_t),
4621CSN_DESCR_END (PSI3_AdditionR99_t)
4622
4623
4624static const
4625CSN_DESCR_BEGIN(PSI3_AdditionR98_t)
4626 M_TYPE (PSI3_AdditionR98_t, Scell_LSA_ID_Info, LSA_ID_Info_t),
4627
4628 M_NEXT_EXIST (PSI3_AdditionR98_t, Exist_LSA_Parameters, 1),
4629 M_TYPE (PSI3_AdditionR98_t, LSA_Parameters, LSA_Parameters_t),
4630
4631 M_NEXT_EXIST (PSI3_AdditionR98_t, Exist_AdditionR99, 1),
4632 M_TYPE (PSI3_AdditionR98_t, AdditionR99, PSI3_AdditionR99_t),
4633CSN_DESCR_END (PSI3_AdditionR98_t)
4634
4635
4636static const
4637CSN_DESCR_BEGIN(PSI3_t)
4638 M_UINT (PSI3_t, MESSAGE_TYPE, 6),
4639 M_UINT (PSI3_t, PAGE_MODE, 2),
4640 M_UINT (PSI3_t, CHANGE_MARK, 2),
4641 M_UINT (PSI3_t, BIS_COUNT, 4),
4642 M_TYPE (PSI3_t, Serving_Cell_params, Serving_Cell_params_t),
4643 M_TYPE (PSI3_t, General_Cell_Selection, Gen_Cell_Sel_t),
4644 M_TYPE (PSI3_t, NeighbourCellList, NeighbourCellList_t),
Pau Espin Pedrol034e32f2020-01-28 17:14:26 +01004645
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004646 M_NEXT_EXIST (PSI3_t, Exist_AdditionR98, 1),
4647 M_TYPE (PSI3_t, AdditionR98, PSI3_AdditionR98_t),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04004648
4649 M_PADDING_BITS(PSI3_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004650CSN_DESCR_END (PSI3_t)
4651/*< End Packet System Information Type 3 message content >*/
4652
4653
4654/*< Packet System Information Type 5 message content >*/
4655static const
4656CSN_DESCR_BEGIN(MeasurementParams_t)
4657 M_NEXT_EXIST (MeasurementParams_t, Exist_MULTI_BAND_REPORTING, 1),
4658 M_UINT (MeasurementParams_t, MULTI_BAND_REPORTING, 2),
4659
4660 M_NEXT_EXIST (MeasurementParams_t, Exist_SERVING_BAND_REPORTING, 1),
4661 M_UINT (MeasurementParams_t, SERVING_BAND_REPORTING, 2),
4662
4663 M_NEXT_EXIST (MeasurementParams_t, Exist_SCALE_ORD, 1),
4664 M_UINT (MeasurementParams_t, SCALE_ORD, 2),
4665
4666 M_NEXT_EXIST (MeasurementParams_t, Exist_OffsetThreshold900, 1),
4667 M_TYPE (MeasurementParams_t, OffsetThreshold900, OffsetThreshold_t),
4668
4669 M_NEXT_EXIST (MeasurementParams_t, Exist_OffsetThreshold1800, 1),
4670 M_TYPE (MeasurementParams_t, OffsetThreshold1800, OffsetThreshold_t),
4671
4672 M_NEXT_EXIST (MeasurementParams_t, Exist_OffsetThreshold400, 1),
4673 M_TYPE (MeasurementParams_t, OffsetThreshold400, OffsetThreshold_t),
4674
4675 M_NEXT_EXIST (MeasurementParams_t, Exist_OffsetThreshold1900, 1),
4676 M_TYPE (MeasurementParams_t, OffsetThreshold1900, OffsetThreshold_t),
4677
4678 M_NEXT_EXIST (MeasurementParams_t, Exist_OffsetThreshold850, 1),
4679 M_TYPE (MeasurementParams_t, OffsetThreshold850, OffsetThreshold_t),
4680CSN_DESCR_END (MeasurementParams_t)
4681
4682static const
4683CSN_DESCR_BEGIN(GPRSMeasurementParams3G_PSI5_t)
4684 M_NEXT_EXIST (GPRSMeasurementParams3G_PSI5_t, existRepParamsFDD, 2),
4685 M_UINT (GPRSMeasurementParams3G_PSI5_t, RepQuantFDD, 1),
4686 M_UINT (GPRSMeasurementParams3G_PSI5_t, MultiratReportingFDD, 2),
Pau Espin Pedrol034e32f2020-01-28 17:14:26 +01004687
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004688 M_NEXT_EXIST (GPRSMeasurementParams3G_PSI5_t, existReportingParamsFDD, 2),
4689 M_UINT (GPRSMeasurementParams3G_PSI5_t, ReportingOffsetFDD, 3),
4690 M_UINT (GPRSMeasurementParams3G_PSI5_t, ReportingThresholdFDD, 3),
Pau Espin Pedrol034e32f2020-01-28 17:14:26 +01004691
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004692 M_NEXT_EXIST (GPRSMeasurementParams3G_PSI5_t, existMultiratReportingTDD, 1),
4693 M_UINT (GPRSMeasurementParams3G_PSI5_t, MultiratReportingTDD, 2),
Pau Espin Pedrol034e32f2020-01-28 17:14:26 +01004694
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004695 M_NEXT_EXIST (GPRSMeasurementParams3G_PSI5_t, existOffsetThresholdTDD, 2),
4696 M_UINT (GPRSMeasurementParams3G_PSI5_t, ReportingOffsetTDD, 3),
4697 M_UINT (GPRSMeasurementParams3G_PSI5_t, ReportingThresholdTDD, 3),
4698CSN_DESCR_END (GPRSMeasurementParams3G_PSI5_t)
4699
4700static const
4701CSN_DESCR_BEGIN(ENH_Reporting_Parameters_t)
4702 M_UINT (ENH_Reporting_Parameters_t, REPORT_TYPE, 1),
4703 M_UINT (ENH_Reporting_Parameters_t, REPORTING_RATE, 1),
4704 M_UINT (ENH_Reporting_Parameters_t, INVALID_BSIC_REPORTING, 1),
4705
4706 M_NEXT_EXIST (ENH_Reporting_Parameters_t, Exist_NCC_PERMITTED, 1),
4707 M_UINT (ENH_Reporting_Parameters_t, NCC_PERMITTED, 8),
Pau Espin Pedrol034e32f2020-01-28 17:14:26 +01004708
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004709 M_NEXT_EXIST (ENH_Reporting_Parameters_t, Exist_GPRSMeasurementParams, 1),
4710 M_TYPE (ENH_Reporting_Parameters_t, GPRSMeasurementParams, MeasurementParams_t),
Pau Espin Pedrol034e32f2020-01-28 17:14:26 +01004711
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004712 M_NEXT_EXIST (ENH_Reporting_Parameters_t, Exist_GPRSMeasurementParams3G, 1),
4713 M_TYPE (ENH_Reporting_Parameters_t, GPRSMeasurementParams3G, GPRSMeasurementParams3G_PSI5_t),
4714CSN_DESCR_END (ENH_Reporting_Parameters_t)
4715
4716static const
4717CSN_DESCR_BEGIN(PSI5_AdditionsR7)
4718 M_NEXT_EXIST (PSI5_AdditionsR7, Exist_OffsetThreshold_700, 1),
4719 M_TYPE (PSI5_AdditionsR7, OffsetThreshold_700, OffsetThreshold_t),
4720
4721 M_NEXT_EXIST (PSI5_AdditionsR7, Exist_OffsetThreshold_810, 1),
4722 M_TYPE (PSI5_AdditionsR7, OffsetThreshold_810, OffsetThreshold_t),
4723CSN_DESCR_END (PSI5_AdditionsR7)
4724
4725static const
4726CSN_DESCR_BEGIN(PSI5_AdditionsR5)
4727 M_NEXT_EXIST (PSI5_AdditionsR5, Exist_GPRS_AdditionalMeasurementParams3G, 1),
4728 M_TYPE (PSI5_AdditionsR5, GPRS_AdditionalMeasurementParams3G, GPRS_AdditionalMeasurementParams3G_t),
Pau Espin Pedrol034e32f2020-01-28 17:14:26 +01004729
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004730 M_NEXT_EXIST (PSI5_AdditionsR5, Exist_AdditionsR7, 1),
4731 M_TYPE (PSI5_AdditionsR5, AdditionsR7, PSI5_AdditionsR7),
4732CSN_DESCR_END (PSI5_AdditionsR5)
4733
4734static const
4735CSN_DESCR_BEGIN(PSI5_AdditionsR99)
4736 M_NEXT_EXIST (PSI5_AdditionsR99, Exist_ENH_Reporting_Param, 1),
4737 M_TYPE (PSI5_AdditionsR99, ENH_Reporting_Param, ENH_Reporting_Parameters_t),
4738
4739 M_NEXT_EXIST (PSI5_AdditionsR99, Exist_AdditionsR5, 1),
4740 M_TYPE (PSI5_AdditionsR99, AdditionisR5, PSI5_AdditionsR5),
4741CSN_DESCR_END (PSI5_AdditionsR99)
4742
4743static const
4744CSN_DESCR_BEGIN(PSI5_t)
4745 M_UINT (PSI5_t, MESSAGE_TYPE, 6),
4746 M_UINT (PSI5_t, PAGE_MODE, 2),
4747 M_UINT (PSI5_t, CHANGE_MARK, 2),
4748 M_UINT (PSI5_t, INDEX, 3),
4749 M_UINT (PSI5_t, COUNT, 3),
4750
4751 M_NEXT_EXIST (PSI5_t, Eixst_NC_Meas_Param, 1),
4752 M_TYPE (PSI5_t, NC_Meas_Param, NC_Measurement_Parameters_t),
4753
4754 M_FIXED (PSI5_t, 1, 0x00),
4755
4756 M_NEXT_EXIST (PSI5_t, Exist_AdditionsR99, 1),
4757 M_TYPE (PSI5_t, AdditionsR99, PSI5_AdditionsR99),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04004758
4759 M_PADDING_BITS(PSI5_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004760CSN_DESCR_END (PSI5_t)
4761/*< End Packet System Information Type 5 message content >*/
4762
4763
4764/*< Packet System Information Type 13 message content >*/
4765static const
4766CSN_DESCR_BEGIN(PSI13_AdditionsR6)
4767 M_NEXT_EXIST (PSI13_AdditionsR6, Exist_LB_MS_TXPWR_MAX_CCH, 1),
4768 M_UINT (PSI13_AdditionsR6, LB_MS_TXPWR_MAX_CCH, 5),
4769 M_UINT (PSI13_AdditionsR6, SI2n_SUPPORT, 2),
4770CSN_DESCR_END (PSI13_AdditionsR6)
4771
4772static const
4773CSN_DESCR_BEGIN(PSI13_AdditionsR4)
4774 M_UINT (PSI13_AdditionsR4, SI_STATUS_IND, 1),
4775 M_NEXT_EXIST (PSI13_AdditionsR4, Exist_AdditionsR6, 1),
4776 M_TYPE (PSI13_AdditionsR4, AdditionsR6, PSI13_AdditionsR6),
4777CSN_DESCR_END (PSI13_AdditionsR4)
4778
4779static const
4780CSN_DESCR_BEGIN(PSI13_AdditionR99)
4781 M_UINT (PSI13_AdditionR99, SGSNR, 1),
4782 M_NEXT_EXIST (PSI13_AdditionR99, Exist_AdditionsR4, 1),
4783 M_TYPE (PSI13_AdditionR99, AdditionsR4, PSI13_AdditionsR4),
4784CSN_DESCR_END (PSI13_AdditionR99)
4785
4786static const
4787CSN_DESCR_BEGIN(PSI13_t)
4788 M_UINT (PSI13_t, MESSAGE_TYPE, 6),
4789 M_UINT (PSI13_t, PAGE_MODE, 2),
4790 M_UINT (PSI13_t, BCCH_CHANGE_MARK, 3),
4791 M_UINT (PSI13_t, SI_CHANGE_FIELD, 4),
Pau Espin Pedrol034e32f2020-01-28 17:14:26 +01004792
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004793 M_NEXT_EXIST (PSI13_t, Exist_MA, 2),
4794 M_UINT (PSI13_t, SI13_CHANGE_MARK, 2),
4795 M_TYPE (PSI13_t, GPRS_Mobile_Allocation, GPRS_Mobile_Allocation_t),
4796
4797 M_UNION (PSI13_t, 2),
4798 M_TYPE (PSI13_t, u.PBCCH_Not_present, PBCCH_Not_present_t),
4799 M_TYPE (PSI13_t, u.PBCCH_present, PBCCH_present_t),
4800
4801 M_NEXT_EXIST (PSI13_t, Exist_AdditionsR99, 1),
4802 M_TYPE (PSI13_t, AdditionsR99, PSI13_AdditionR99),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04004803
4804 M_PADDING_BITS(PSI13_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004805CSN_DESCR_END (PSI13_t)
4806/*< End Packet System Information Type 13 message content >*/
4807
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004808/* SI1_RestOctet_t */
4809
4810static const
4811CSN_DESCR_BEGIN (SI1_RestOctet_t)
4812 M_NEXT_EXIST_LH(SI1_RestOctet_t, Exist_NCH_Position, 1),
4813 M_UINT (SI1_RestOctet_t, NCH_Position, 5),
4814
4815 M_UINT_LH (SI1_RestOctet_t, BandIndicator, 1),
4816CSN_DESCR_END (SI1_RestOctet_t)
4817
4818/* SI3_Rest_Octet_t */
4819static const
4820CSN_DESCR_BEGIN(Selection_Parameters_t)
4821 M_UINT (Selection_Parameters_t, CBQ, 1),
4822 M_UINT (Selection_Parameters_t, CELL_RESELECT_OFFSET, 6),
4823 M_UINT (Selection_Parameters_t, TEMPORARY_OFFSET, 3),
4824 M_UINT (Selection_Parameters_t, PENALTY_TIME, 5),
4825CSN_DESCR_END (Selection_Parameters_t)
4826
4827static const
4828CSN_DESCR_BEGIN (SI3_Rest_Octet_t)
4829 M_NEXT_EXIST_LH(SI3_Rest_Octet_t, Exist_Selection_Parameters, 1),
4830 M_TYPE (SI3_Rest_Octet_t, Selection_Parameters, Selection_Parameters_t),
4831
4832 M_NEXT_EXIST_LH(SI3_Rest_Octet_t, Exist_Power_Offset, 1),
4833 M_UINT (SI3_Rest_Octet_t, Power_Offset, 2),
4834
4835 M_UINT_LH (SI3_Rest_Octet_t, System_Information_2ter_Indicator, 1),
4836 M_UINT_LH (SI3_Rest_Octet_t, Early_Classmark_Sending_Control, 1),
4837
4838 M_NEXT_EXIST_LH(SI3_Rest_Octet_t, Exist_WHERE, 1),
4839 M_UINT (SI3_Rest_Octet_t, WHERE, 3),
4840
4841 M_NEXT_EXIST_LH(SI3_Rest_Octet_t, Exist_GPRS_Indicator, 2),
4842 M_UINT (SI3_Rest_Octet_t, RA_COLOUR, 3),
4843 M_UINT (SI3_Rest_Octet_t, SI13_POSITION, 1),
4844
4845 M_UINT_LH (SI3_Rest_Octet_t, ECS_Restriction3G, 1),
4846
4847 M_NEXT_EXIST_LH(SI3_Rest_Octet_t, ExistSI2quaterIndicator, 1),
4848 M_UINT (SI3_Rest_Octet_t, SI2quaterIndicator, 1),
4849CSN_DESCR_END (SI3_Rest_Octet_t)
4850
4851static const
4852CSN_DESCR_BEGIN (SI4_Rest_Octet_t)
4853 M_NEXT_EXIST_LH(SI4_Rest_Octet_t, Exist_Selection_Parameters, 1),
4854 M_TYPE (SI4_Rest_Octet_t, Selection_Parameters, Selection_Parameters_t),
4855
4856 M_NEXT_EXIST_LH(SI4_Rest_Octet_t, Exist_Power_Offset, 1),
4857 M_UINT (SI4_Rest_Octet_t, Power_Offset, 2),
4858
4859 M_NEXT_EXIST_LH(SI4_Rest_Octet_t, Exist_GPRS_Indicator, 2),
4860 M_UINT (SI4_Rest_Octet_t, RA_COLOUR, 3),
4861 M_UINT (SI4_Rest_Octet_t, SI13_POSITION, 1),
4862CSN_DESCR_END (SI4_Rest_Octet_t)
4863
4864/* SI6_RestOctet_t */
4865
4866static const
4867CSN_DESCR_BEGIN(PCH_and_NCH_Info_t)
4868 M_UINT (PCH_and_NCH_Info_t, PagingChannelRestructuring, 1),
4869 M_UINT (PCH_and_NCH_Info_t, NLN_SACCH, 2),
4870
4871 M_NEXT_EXIST (PCH_and_NCH_Info_t, Exist_CallPriority, 1),
4872 M_UINT (PCH_and_NCH_Info_t, CallPriority, 3),
4873
4874 M_UINT (PCH_and_NCH_Info_t, NLN_Status, 1),
4875CSN_DESCR_END (PCH_and_NCH_Info_t)
4876
4877static const
4878CSN_DESCR_BEGIN (SI6_RestOctet_t)
4879 M_NEXT_EXIST_LH(SI6_RestOctet_t, Exist_PCH_and_NCH_Info, 1),
4880 M_TYPE (SI6_RestOctet_t, PCH_and_NCH_Info, PCH_and_NCH_Info_t),
4881
4882 M_NEXT_EXIST_LH(SI6_RestOctet_t, Exist_VBS_VGCS_Options, 1),
4883 M_UINT (SI6_RestOctet_t, VBS_VGCS_Options, 2),
4884
4885 M_NEXT_EXIST_LH(SI6_RestOctet_t, Exist_DTM_Support, 2),
4886 M_UINT (SI6_RestOctet_t, RAC, 8),
4887 M_UINT (SI6_RestOctet_t, MAX_LAPDm, 3),
4888
4889 M_UINT_LH (SI6_RestOctet_t, BandIndicator, 1),
4890CSN_DESCR_END (SI6_RestOctet_t)
4891
Pau Espin Pedrol20848c32020-03-23 17:13:20 +01004892
4893// ----------------------------------------------------------------------------
4894// osmo-pcu RLCMAC APIs
4895// ----------------------------------------------------------------------------
4896static const struct value_string rlcmac_ul_msg_names[] = {
4897 { MT_PACKET_CELL_CHANGE_FAILURE, "Pkt Cell Change Failure" },
4898 { MT_PACKET_CONTROL_ACK, "Pkt Control Ack" },
4899 { MT_PACKET_DOWNLINK_ACK_NACK , "Pkt DL ACK/NACK" },
4900 { MT_PACKET_UPLINK_DUMMY_CONTROL_BLOCK, "Pkt UL Dummy Ctrl Block" },
4901 { MT_PACKET_MEASUREMENT_REPORT, "Pkt Meas Report" },
4902 { MT_PACKET_RESOURCE_REQUEST, "Pkt Resource Req" },
4903 { MT_PACKET_MOBILE_TBF_STATUS, "Pkt Mobile TBF Status" },
4904 { MT_PACKET_PSI_STATUS, "Pkt PSI Status" },
4905 { MT_EGPRS_PACKET_DOWNLINK_ACK_NACK, "EGPRS Pkt DL ACK/NACK" },
4906 { MT_PACKET_PAUSE, "Pkt Pause" },
4907 { MT_PACKET_ENHANCED_MEASUREMENT_REPORT,"Pkt Enchanced Meas Report" },
4908 { MT_ADDITIONAL_MS_RAC, "Additional MS RAC" },
4909 { MT_PACKET_CELL_CHANGE_NOTIFICATION, "Pkt Cell Changte Notification" },
4910 { MT_PACKET_SI_STATUS, "Pkt SI Status" },
4911 { MT_ENHANCED_MEASUREMENT_REPORT, "Enchanced Meas Report" },
4912 { 0, NULL }
4913};
4914
4915static const struct value_string rlcmac_dl_msg_names[] = {
4916 { MT_PACKET_CELL_CHANGE_ORDER, "Pkt Cell Change Order" },
4917 { MT_PACKET_DOWNLINK_ASSIGNMENT, "Pkt DL ASS" },
4918 { MT_PACKET_MEASUREMENT_ORDER, "Pkt Meas Order" },
4919 { MT_PACKET_POLLING_REQ, "Pkt Polling Req" },
4920 { MT_PACKET_POWER_CONTROL_TIMING_ADVANCE, "Pkt PWR CTRL TA" },
4921 { MT_PACKET_QUEUEING_NOTIFICATION, "Pkt Queueing Notification" },
4922 { MT_PACKET_TIMESLOT_RECONFIGURE, "Pkt TS Reconf" },
4923 { MT_PACKET_TBF_RELEASE, "Pkt TBF Release" },
4924 { MT_PACKET_UPLINK_ACK_NACK, "Pkt UL ACK/NACK" },
4925 { MT_PACKET_UPLINK_ASSIGNMENT, "Pkt UL ASS" },
4926 { MT_PACKET_CELL_CHANGE_CONTINUE, "Pkt Cell Change Continue" },
4927 { MT_PACKET_NEIGHBOUR_CELL_DATA, "Pkt Neightbour Cell Data" },
4928 { MT_PACKET_SERVING_CELL_DATA, "Pkt Serving Cell Data" },
4929 { MT_PACKET_HANDOVER_COMMAND, "Pkt Handover Cmd" },
4930 { MT_PACKET_PHYSICAL_INFORMATION, "Pkt Physical Info" },
4931 { MT_PACKET_ACCESS_REJECT, "Pkt Access Reject" },
4932 { MT_PACKET_PAGING_REQUEST, "Pkt Paging Request" },
4933 { MT_PACKET_PDCH_RELEASE, "Pkt PDCH Release" },
4934 { MT_PACKET_PRACH_PARAMETERS, "Pkt PRACH Params" },
4935 { MT_PACKET_DOWNLINK_DUMMY_CONTROL_BLOCK, "Pkt DL Dummy Ctrl Block" },
4936 { MT_PACKET_SYSTEM_INFO_6, "Pkt SI 6" },
4937 { MT_PACKET_SYSTEM_INFO_1, "Pkt SI 1" },
4938 { MT_PACKET_SYSTEM_INFO_2, "Pkt SI 2" },
4939 { MT_PACKET_SYSTEM_INFO_3, "Pkt SI 3" },
4940 { MT_PACKET_SYSTEM_INFO_3_BIS, "Pkt SI 3bis" },
4941 { MT_PACKET_SYSTEM_INFO_4, "Pkt SI 4" },
4942 { MT_PACKET_SYSTEM_INFO_5, "Pkt SI 5" },
4943 { MT_PACKET_SYSTEM_INFO_13, "Pkt SI 13" },
4944 { MT_PACKET_SYSTEM_INFO_7, "Pkt SI 7" },
4945 { MT_PACKET_SYSTEM_INFO_8, "Pkt SI 8" },
4946 { MT_PACKET_SYSTEM_INFO_14, "Pkt SI 14" },
4947 { MT_PACKET_SYSTEM_INFO_3_TER, "Pkt SI 3ter" },
4948 { MT_PACKET_SYSTEM_INFO_3_QUATER, "Pkt SI 3quater" },
4949 { MT_PACKET_SYSTEM_INFO_15, "Pkt SI 15" },
4950 { 0, NULL }
4951};
4952
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01004953/* Returns 0 on success, negative on error. */
4954int decode_gsm_rlcmac_uplink(bitvec * vector, RlcMacUplink_t * data)
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004955{
4956 csnStream_t ar;
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01004957 int ret;
Ivan Kluchnikov9b06ff02012-06-15 10:13:30 +04004958 unsigned readIndex = 0;
Alexander Couzensccde5c92017-02-04 03:10:08 +01004959 guint8 payload_type = bitvec_read_field(vector, &readIndex, 2);
Pau Espin Pedrol20848c32020-03-23 17:13:20 +01004960 const char *msg_type_name;
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004961
4962 if (payload_type == PAYLOAD_TYPE_DATA)
4963 {
Pau Espin Pedrolea9de4a2020-02-03 18:57:21 +01004964 LOGP(DRLCMACDATA, LOGL_NOTICE, "Payload Type: DATA (0), not implemented\n");
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01004965 return CSN_ERROR_GENERAL;
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004966 }
4967 else if (payload_type == PAYLOAD_TYPE_RESERVED)
4968 {
Pau Espin Pedrolea9de4a2020-02-03 18:57:21 +01004969 LOGP(DRLCMACDATA, LOGL_NOTICE, "Payload Type: RESERVED (3)\n");
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01004970 return CSN_ERROR_GENERAL;
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004971 }
Pau Espin Pedrolac2b8662020-02-03 18:58:24 +01004972
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04004973 data->NrOfBits = 23 * 8;
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004974 csnStreamInit(&ar, 0, data->NrOfBits);
4975 readIndex += 6;
Alexander Couzensccde5c92017-02-04 03:10:08 +01004976 data->u.MESSAGE_TYPE = bitvec_read_field(vector, &readIndex, 6);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004977 readIndex = 0;
Pau Espin Pedrolac2b8662020-02-03 18:58:24 +01004978
4979 /* recursive csnStreamDecoder call uses LOGPC everywhere, so we need to start the log somewhere... */
Pau Espin Pedrol20848c32020-03-23 17:13:20 +01004980 msg_type_name = get_value_string(rlcmac_ul_msg_names, data->u.MESSAGE_TYPE);
4981 LOGP(DCSN1, LOGL_INFO, "csnStreamDecoder (type: %s (%d)): ",
4982 msg_type_name, data->u.MESSAGE_TYPE);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004983 switch (data->u.MESSAGE_TYPE)
4984 {
4985 case MT_PACKET_CELL_CHANGE_FAILURE:
4986 {
4987 /*
4988 * data is the pointer to the unpack struct that hold the unpack value
4989 * CSNDESCR is an array that holds the different element types
4990 * ar is the csn context holding the bitcount, offset and output
4991 */
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07004992 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_Cell_Change_Failure_t), vector, &readIndex, &data->u.Packet_Cell_Change_Failure);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004993 break;
4994 }
4995 case MT_PACKET_CONTROL_ACK:
4996 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07004997 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_Control_Acknowledgement_t), vector, &readIndex, &data->u.Packet_Control_Acknowledgement);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004998 break;
4999 }
5000 case MT_PACKET_DOWNLINK_ACK_NACK:
5001 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005002 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_Downlink_Ack_Nack_t), vector, &readIndex, &data->u.Packet_Downlink_Ack_Nack);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005003 break;
5004 }
5005 case MT_PACKET_UPLINK_DUMMY_CONTROL_BLOCK:
5006 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005007 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 +03005008 break;
5009 }
5010 case MT_PACKET_MEASUREMENT_REPORT:
5011 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005012 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_Measurement_Report_t), vector, &readIndex, &data->u.Packet_Measurement_Report);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005013 break;
5014 }
5015 case MT_PACKET_RESOURCE_REQUEST:
5016 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005017 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_Resource_Request_t), vector, &readIndex, &data->u.Packet_Resource_Request);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005018 break;
5019 }
5020
5021 case MT_PACKET_MOBILE_TBF_STATUS:
5022 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005023 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_Mobile_TBF_Status_t), vector, &readIndex, &data->u.Packet_Mobile_TBF_Status);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005024 break;
5025 }
5026 case MT_PACKET_PSI_STATUS:
5027 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005028 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_PSI_Status_t), vector, &readIndex, &data->u.Packet_PSI_Status);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005029 break;
5030 }
5031 case MT_EGPRS_PACKET_DOWNLINK_ACK_NACK:
5032 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005033 ret = csnStreamDecoder(&ar, CSNDESCR(EGPRS_PD_AckNack_t), vector, &readIndex, &data->u.Egprs_Packet_Downlink_Ack_Nack);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005034 break;
5035 }
5036 case MT_PACKET_PAUSE:
5037 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005038 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_Pause_t), vector, &readIndex, &data->u.Packet_Pause);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005039 break;
5040 }
5041 case MT_PACKET_ENHANCED_MEASUREMENT_REPORT:
5042 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005043 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_Enh_Measurement_Report_t), vector, &readIndex, &data->u.Packet_Enh_Measurement_Report);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005044 break;
5045 }
5046 case MT_ADDITIONAL_MS_RAC:
5047 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005048 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 +03005049 break;
5050 }
5051 case MT_PACKET_CELL_CHANGE_NOTIFICATION:
5052 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005053 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_Cell_Change_Notification_t), vector, &readIndex, &data->u.Packet_Cell_Change_Notification);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005054 break;
5055 }
5056 case MT_PACKET_SI_STATUS:
5057 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005058 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_SI_Status_t), vector, &readIndex, &data->u.Packet_SI_Status);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005059 break;
5060 }
5061 default:
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01005062 ret = -1;
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005063 break;
5064 }
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01005065
Pau Espin Pedrolac2b8662020-02-03 18:58:24 +01005066 /* recursive csnStreamDecoder call uses LOGPC everywhere without trailing
5067 newline, so as a caller we are responisble for submitting it */
5068 LOGPC(DCSN1, LOGL_INFO, "\n");
5069
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01005070 if (ret > 0) {
Pau Espin Pedrol20848c32020-03-23 17:13:20 +01005071 LOGP(DRLCMACDATA, LOGL_NOTICE, "%s: Got %d remaining bits unhandled by decoder at the end of bitvec\n", msg_type_name, ret);
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01005072 ret = 0;
5073 }
5074
5075 return ret;
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005076}
5077
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01005078/* Returns 0 on success, negative on error. */
5079int decode_gsm_rlcmac_downlink(bitvec * vector, RlcMacDownlink_t * data)
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005080{
5081 csnStream_t ar;
5082 /* See RLC/MAC downlink control block structure in TS 44.060 / 10.3.1 */
5083 gint bit_offset = 0;
5084 gint bit_length;
Ivan Kluchnikov9b06ff02012-06-15 10:13:30 +04005085 unsigned readIndex = 0;
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01005086 int ret;
Pau Espin Pedrol20848c32020-03-23 17:13:20 +01005087 const char *msg_type_name;
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01005088
Alexander Couzensccde5c92017-02-04 03:10:08 +01005089 data->PAYLOAD_TYPE = bitvec_read_field(vector, &readIndex, 2);
5090 data->RRBP = bitvec_read_field(vector, &readIndex, 2);
5091 data->SP = bitvec_read_field(vector, &readIndex, 1);
5092 data->USF = bitvec_read_field(vector, &readIndex, 3);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005093
5094 if (data->PAYLOAD_TYPE == PAYLOAD_TYPE_DATA)
5095 {
Pau Espin Pedrolea9de4a2020-02-03 18:57:21 +01005096 LOGP(DRLCMACDATA, LOGL_NOTICE, "Payload Type: DATA (0), not implemented\n");
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01005097 return CSN_ERROR_GENERAL;
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005098 }
5099 else if (data->PAYLOAD_TYPE == PAYLOAD_TYPE_RESERVED)
5100 {
Pau Espin Pedrolea9de4a2020-02-03 18:57:21 +01005101 LOGP(DRLCMACDATA, LOGL_NOTICE, "Payload Type: RESERVED (3)\n");
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01005102 return CSN_ERROR_GENERAL;
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005103 }
5104 /* We can decode the message */
5105 else
5106 {
5107 /* First print the message type and create a tree item */
5108 bit_offset = 8;
5109 if (data->PAYLOAD_TYPE == PAYLOAD_TYPE_CTRL_OPT_OCTET)
5110 {
Alexander Couzensccde5c92017-02-04 03:10:08 +01005111 data->RBSN = bitvec_read_field(vector, &readIndex, 1);
5112 data->RTI = bitvec_read_field(vector, &readIndex, 5);
5113 data->FS = bitvec_read_field(vector, &readIndex, 1);
5114 data->AC = bitvec_read_field(vector, &readIndex, 1);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005115 bit_offset += 8;
5116 if (data->AC == 1)
5117 {
Alexander Couzensccde5c92017-02-04 03:10:08 +01005118 data->PR = bitvec_read_field(vector, &readIndex, 2);
5119 data->TFI = bitvec_read_field(vector, &readIndex, 5);
5120 data->D = bitvec_read_field(vector, &readIndex, 1);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005121 bit_offset += 8;
5122 }
5123 if ((data->RBSN == 1) && (data->FS == 0))
5124 {
Alexander Couzensccde5c92017-02-04 03:10:08 +01005125 data->RBSNe = bitvec_read_field(vector, &readIndex, 3);
5126 data->FSe = bitvec_read_field(vector, &readIndex, 1);
5127 data->spare = bitvec_read_field(vector, &readIndex, 4);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005128 bit_offset += 8;
5129 }
5130 }
Alexander Couzensccde5c92017-02-04 03:10:08 +01005131 data->u.MESSAGE_TYPE = bitvec_read_field(vector, &readIndex, 6);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005132 }
5133
5134 /* Initialize the contexts */
5135 bit_length = 23*8 - bit_offset;
5136 data->NrOfBits = bit_length;
5137 readIndex = bit_offset;
5138
5139 csnStreamInit(&ar, bit_offset, bit_length);
5140
Pau Espin Pedrolac2b8662020-02-03 18:58:24 +01005141 /* recursive csnStreamDecoder call uses LOGPC everywhere, so we need to start the log somewhere... */
Pau Espin Pedrol20848c32020-03-23 17:13:20 +01005142 msg_type_name = get_value_string(rlcmac_dl_msg_names, data->u.MESSAGE_TYPE);
5143 LOGP(DCSN1, LOGL_INFO, "csnStreamDecoder (type: %s (%d): ",
5144 msg_type_name, data->u.MESSAGE_TYPE);
Pau Espin Pedrolac2b8662020-02-03 18:58:24 +01005145
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005146 switch (data->u.MESSAGE_TYPE)
5147 {
5148 case MT_PACKET_ACCESS_REJECT:
5149 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005150 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_Access_Reject_t), vector, &readIndex, &data->u.Packet_Access_Reject);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005151 break;
5152 }
5153 case MT_PACKET_CELL_CHANGE_ORDER:
5154 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005155 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_Cell_Change_Order_t), vector, &readIndex, &data->u.Packet_Cell_Change_Order);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005156 break;
5157 }
5158 case MT_PACKET_CELL_CHANGE_CONTINUE:
5159 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005160 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_Cell_Change_Continue_t), vector, &readIndex, &data->u.Packet_Cell_Change_Continue);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005161 break;
5162 }
5163 case MT_PACKET_DOWNLINK_ASSIGNMENT:
5164 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005165 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_Downlink_Assignment_t), vector, &readIndex, &data->u.Packet_Downlink_Assignment);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005166 break;
5167 }
5168 case MT_PACKET_MEASUREMENT_ORDER:
5169 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005170 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_Measurement_Order_t), vector, &readIndex, &data->u.Packet_Measurement_Order);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005171 break;
5172 }
5173 case MT_PACKET_NEIGHBOUR_CELL_DATA:
5174 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005175 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_Neighbour_Cell_Data_t), vector, &readIndex, &data->u.Packet_Neighbour_Cell_Data);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005176 break;
5177 }
5178 case MT_PACKET_SERVING_CELL_DATA:
5179 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005180 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_Serving_Cell_Data_t), vector, &readIndex, &data->u.Packet_Serving_Cell_Data);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005181 break;
5182 }
5183 case MT_PACKET_PAGING_REQUEST:
5184 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005185 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_Paging_Request_t), vector, &readIndex, &data->u.Packet_Paging_Request);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005186 break;
5187 }
5188 case MT_PACKET_PDCH_RELEASE:
5189 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005190 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_PDCH_Release_t), vector, &readIndex, &data->u.Packet_PDCH_Release);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005191 break;
5192 }
5193 case MT_PACKET_POLLING_REQ:
5194 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005195 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_Polling_Request_t), vector, &readIndex, &data->u.Packet_Polling_Request);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005196 break;
5197 }
5198 case MT_PACKET_POWER_CONTROL_TIMING_ADVANCE:
5199 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005200 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 +03005201 break;
5202 }
5203 case MT_PACKET_PRACH_PARAMETERS:
5204 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005205 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_PRACH_Parameters_t), vector, &readIndex, &data->u.Packet_PRACH_Parameters);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005206 break;
5207 }
5208 case MT_PACKET_QUEUEING_NOTIFICATION:
5209 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005210 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_Queueing_Notification_t), vector, &readIndex, &data->u.Packet_Queueing_Notification);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005211 break;
5212 }
5213 case MT_PACKET_TIMESLOT_RECONFIGURE:
5214 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005215 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_Timeslot_Reconfigure_t), vector, &readIndex, &data->u.Packet_Timeslot_Reconfigure);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005216 break;
5217 }
5218 case MT_PACKET_TBF_RELEASE:
5219 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005220 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_TBF_Release_t), vector, &readIndex, &data->u.Packet_TBF_Release);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005221 break;
5222 }
5223 case MT_PACKET_UPLINK_ACK_NACK:
5224 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005225 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_Uplink_Ack_Nack_t), vector, &readIndex, &data->u.Packet_Uplink_Ack_Nack);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005226 break;
5227 }
5228 case MT_PACKET_UPLINK_ASSIGNMENT:
5229 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005230 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_Uplink_Assignment_t), vector, &readIndex, &data->u.Packet_Uplink_Assignment);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005231 break;
5232 }
5233 case MT_PACKET_HANDOVER_COMMAND:
5234 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005235 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_Handover_Command_t), vector, &readIndex, &data->u.Packet_Handover_Command);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005236 break;
5237 }
5238 case MT_PACKET_PHYSICAL_INFORMATION:
5239 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005240 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_PhysicalInformation_t), vector, &readIndex, &data->u.Packet_Handover_Command);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005241 break;
5242 }
5243 case MT_PACKET_DOWNLINK_DUMMY_CONTROL_BLOCK:
5244 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005245 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 +03005246 break;
5247 }
5248 case MT_PACKET_SYSTEM_INFO_1:
5249 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005250 ret = csnStreamDecoder(&ar, CSNDESCR(PSI1_t), vector, &readIndex, &data->u.PSI1);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005251 break;
5252 }
5253 case MT_PACKET_SYSTEM_INFO_2:
5254 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005255 ret = csnStreamDecoder(&ar, CSNDESCR(PSI2_t), vector, &readIndex, &data->u.PSI2);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005256 break;
5257 }
5258 case MT_PACKET_SYSTEM_INFO_3:
5259 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005260 ret = csnStreamDecoder(&ar, CSNDESCR(PSI3_t), vector, &readIndex, &data->u.PSI3);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005261 break;
5262 }
5263 case MT_PACKET_SYSTEM_INFO_5:
5264 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005265 ret = csnStreamDecoder(&ar, CSNDESCR(PSI5_t), vector, &readIndex, &data->u.PSI5);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005266 break;
5267 }
5268 case MT_PACKET_SYSTEM_INFO_13:
5269 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005270 ret = csnStreamDecoder(&ar, CSNDESCR(PSI13_t), vector, &readIndex, &data->u.PSI13);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005271 break;
5272 }
5273 default:
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01005274 ret = CSN_ERROR_GENERAL;
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005275 break;
5276 }
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01005277
Pau Espin Pedrolac2b8662020-02-03 18:58:24 +01005278 /* recursive csnStreamDecoder call uses LOGPC everywhere without trailing
5279 newline, so as a caller we are responisble for submitting it */
5280 LOGPC(DCSN1, LOGL_INFO, "\n");
5281
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01005282 if (ret > 0) {
Pau Espin Pedrol20848c32020-03-23 17:13:20 +01005283 LOGP(DRLCMACDATA, LOGL_NOTICE, "%s: Got %d remaining bits unhandled by decoder at the end of bitvec\n", msg_type_name, ret);
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01005284 ret = 0;
5285 }
5286
5287 return ret;
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005288}
5289
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01005290/* Returns 0 on success, negative on error. */
5291int encode_gsm_rlcmac_uplink(bitvec * vector, RlcMacUplink_t * data)
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005292{
5293 csnStream_t ar;
Ivan Kluchnikov9b06ff02012-06-15 10:13:30 +04005294 unsigned writeIndex = 0;
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01005295 int ret;
Pau Espin Pedrol20848c32020-03-23 17:13:20 +01005296 const char *msg_type_name;
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01005297
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04005298 data->NrOfBits = 23 * 8;
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005299 csnStreamInit(&ar, 0, data->NrOfBits);
5300 writeIndex = 0;
Pau Espin Pedrolac2b8662020-02-03 18:58:24 +01005301
5302 /* recursive csnStreamEncoder call uses LOGPC everywhere, so we need to start the log somewhere... */
Pau Espin Pedrol20848c32020-03-23 17:13:20 +01005303 msg_type_name = get_value_string(rlcmac_ul_msg_names, data->u.MESSAGE_TYPE);
5304 LOGP(DCSN1, LOGL_INFO, "csnStreamEncoder (type: %s (%d)): ",
5305 msg_type_name, data->u.MESSAGE_TYPE);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005306 switch (data->u.MESSAGE_TYPE)
5307 {
5308 case MT_PACKET_CELL_CHANGE_FAILURE:
5309 {
5310 /*
5311 * data is the pointer to the unpack struct that hold the unpack value
5312 * CSNDESCR is an array that holds the different element types
5313 * ar is the csn context holding the bitcount, offset and output
5314 */
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005315 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_Cell_Change_Failure_t), vector, &writeIndex, &data->u.Packet_Cell_Change_Failure);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005316 break;
5317 }
5318 case MT_PACKET_CONTROL_ACK:
5319 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005320 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_Control_Acknowledgement_t), vector, &writeIndex, &data->u.Packet_Control_Acknowledgement);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005321 break;
5322 }
5323 case MT_PACKET_DOWNLINK_ACK_NACK:
5324 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005325 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_Downlink_Ack_Nack_t), vector, &writeIndex, &data->u.Packet_Downlink_Ack_Nack);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005326 break;
5327 }
5328 case MT_PACKET_UPLINK_DUMMY_CONTROL_BLOCK:
5329 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005330 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 +03005331 break;
5332 }
5333 case MT_PACKET_MEASUREMENT_REPORT:
5334 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005335 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_Measurement_Report_t), vector, &writeIndex, &data->u.Packet_Measurement_Report);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005336 break;
5337 }
5338 case MT_PACKET_RESOURCE_REQUEST:
5339 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005340 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_Resource_Request_t), vector, &writeIndex, &data->u.Packet_Resource_Request);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005341 break;
5342 }
5343
5344 case MT_PACKET_MOBILE_TBF_STATUS:
5345 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005346 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_Mobile_TBF_Status_t), vector, &writeIndex, &data->u.Packet_Mobile_TBF_Status);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005347 break;
5348 }
5349 case MT_PACKET_PSI_STATUS:
5350 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005351 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_PSI_Status_t), vector, &writeIndex, &data->u.Packet_PSI_Status);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005352 break;
5353 }
5354 case MT_EGPRS_PACKET_DOWNLINK_ACK_NACK:
5355 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005356 ret = csnStreamEncoder(&ar, CSNDESCR(EGPRS_PD_AckNack_t), vector, &writeIndex, &data->u.Egprs_Packet_Downlink_Ack_Nack);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005357 break;
5358 }
5359 case MT_PACKET_PAUSE:
5360 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005361 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_Pause_t), vector, &writeIndex, &data->u.Packet_Pause);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005362 break;
5363 }
5364 case MT_PACKET_ENHANCED_MEASUREMENT_REPORT:
5365 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005366 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_Enh_Measurement_Report_t), vector, &writeIndex, &data->u.Packet_Enh_Measurement_Report);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005367 break;
5368 }
5369 case MT_ADDITIONAL_MS_RAC:
5370 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005371 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 +03005372 break;
5373 }
5374 case MT_PACKET_CELL_CHANGE_NOTIFICATION:
5375 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005376 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_Cell_Change_Notification_t), vector, &writeIndex, &data->u.Packet_Cell_Change_Notification);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005377 break;
5378 }
5379 case MT_PACKET_SI_STATUS:
5380 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005381 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_SI_Status_t), vector, &writeIndex, &data->u.Packet_SI_Status);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005382 break;
5383 }
5384 default:
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01005385 ret = CSN_ERROR_GENERAL;
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005386 break;
5387 }
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01005388
Pau Espin Pedrolac2b8662020-02-03 18:58:24 +01005389 /* recursive csnStreamDecoder call uses LOGPC everywhere without trailing
5390 newline, so as a caller we are responisble for submitting it */
5391 LOGPC(DCSN1, LOGL_INFO, "\n");
5392
Vadim Yanitskiy773cb742020-03-06 08:26:16 +07005393 if (ret > 0 || ret == CSN_ERROR_NEED_MORE_BITS_TO_UNPACK) {
5394 LOGP(DRLCMACDATA, LOGL_ERROR, "Failed to encode an Uplink block: not enough bits "
5395 "in the output buffer (rc=%d)\n", ret);
5396 ret = CSN_ERROR_NEED_MORE_BITS_TO_UNPACK;
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01005397 }
5398
5399 return ret;
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005400}
5401
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01005402/* Returns 0 on success, negative on error. */
5403int encode_gsm_rlcmac_downlink(bitvec * vector, RlcMacDownlink_t * data)
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005404{
5405 csnStream_t ar;
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01005406 int ret;
Pau Espin Pedrol20848c32020-03-23 17:13:20 +01005407 const char *msg_type_name;
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005408 /* See RLC/MAC downlink control block structure in TS 44.060 / 10.3.1 */
5409 gint bit_offset = 0;
5410 gint bit_length;
Ivan Kluchnikov9b06ff02012-06-15 10:13:30 +04005411 unsigned writeIndex = 0;
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005412
5413 if (data->PAYLOAD_TYPE == PAYLOAD_TYPE_DATA)
5414 {
Pau Espin Pedrolea9de4a2020-02-03 18:57:21 +01005415 LOGP(DRLCMACDATA, LOGL_NOTICE, "Payload Type: DATA (0), not implemented\n");
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01005416 return CSN_ERROR_GENERAL;
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005417 }
5418 else if (data->PAYLOAD_TYPE == PAYLOAD_TYPE_RESERVED)
5419 {
Pau Espin Pedrolea9de4a2020-02-03 18:57:21 +01005420 LOGP(DRLCMACDATA, LOGL_NOTICE, "Payload Type: RESERVED (3)\n");
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01005421 return CSN_ERROR_GENERAL;
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005422 }
5423 /* We can decode the message */
5424 else
5425 {
5426 /* First print the message type and create a tree item */
Alexander Couzensccde5c92017-02-04 03:10:08 +01005427 bitvec_write_field(vector, &writeIndex, data->PAYLOAD_TYPE, 2);
5428 bitvec_write_field(vector, &writeIndex, data->RRBP, 2);
5429 bitvec_write_field(vector, &writeIndex, data->SP, 1);
5430 bitvec_write_field(vector, &writeIndex, data->USF, 3);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005431 bit_offset = 8;
5432 if (data->PAYLOAD_TYPE == PAYLOAD_TYPE_CTRL_OPT_OCTET)
5433 {
Alexander Couzensccde5c92017-02-04 03:10:08 +01005434 bitvec_write_field(vector, &writeIndex, data->RBSN, 1);
5435 bitvec_write_field(vector, &writeIndex, data->RTI, 5);
5436 bitvec_write_field(vector, &writeIndex, data->FS, 1);
5437 bitvec_write_field(vector, &writeIndex, data->AC, 1);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005438 bit_offset += 8;
5439 if (data->AC == 1)
5440 {
Alexander Couzensccde5c92017-02-04 03:10:08 +01005441 bitvec_write_field(vector, &writeIndex, data->PR, 2);
5442 bitvec_write_field(vector, &writeIndex, data->TFI, 5);
5443 bitvec_write_field(vector, &writeIndex, data->D, 1);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005444 bit_offset += 8;
5445 }
5446 if ((data->RBSN == 1) && (data->FS == 0))
5447 {
Alexander Couzensccde5c92017-02-04 03:10:08 +01005448 bitvec_write_field(vector, &writeIndex, data->RBSNe, 3);
5449 bitvec_write_field(vector, &writeIndex, data->FSe, 1);
5450 bitvec_write_field(vector, &writeIndex, data->spare, 4);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005451 bit_offset += 8;
5452 }
5453 }
5454 }
5455
5456 /* Initialize the contexts */
5457 bit_length = 23*8 - bit_offset;
5458 data->NrOfBits = bit_length;
5459
5460 csnStreamInit(&ar, bit_offset, bit_length);
5461
Pau Espin Pedrolac2b8662020-02-03 18:58:24 +01005462
5463 /* recursive csnStreamEncoder call uses LOGPC everywhere, so we need to start the log somewhere... */
Pau Espin Pedrol20848c32020-03-23 17:13:20 +01005464 msg_type_name = get_value_string(rlcmac_dl_msg_names, data->u.MESSAGE_TYPE);
5465 LOGP(DCSN1, LOGL_INFO, "csnStreamEncoder (type: %s (%d)): ",
5466 msg_type_name, data->u.MESSAGE_TYPE);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005467 switch (data->u.MESSAGE_TYPE)
5468 {
5469 case MT_PACKET_ACCESS_REJECT:
5470 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005471 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_Access_Reject_t), vector, &writeIndex, &data->u.Packet_Access_Reject);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005472 break;
5473 }
5474 case MT_PACKET_CELL_CHANGE_ORDER:
5475 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005476 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_Cell_Change_Order_t), vector, &writeIndex, &data->u.Packet_Cell_Change_Order);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005477 break;
5478 }
5479 case MT_PACKET_CELL_CHANGE_CONTINUE:
5480 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005481 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_Cell_Change_Continue_t), vector, &writeIndex, &data->u.Packet_Cell_Change_Continue);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005482 break;
5483 }
5484 case MT_PACKET_DOWNLINK_ASSIGNMENT:
5485 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005486 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_Downlink_Assignment_t), vector, &writeIndex, &data->u.Packet_Downlink_Assignment);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005487 break;
5488 }
5489 case MT_PACKET_MEASUREMENT_ORDER:
5490 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005491 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_Measurement_Order_t), vector, &writeIndex, &data->u.Packet_Measurement_Order);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005492 break;
5493 }
5494 case MT_PACKET_NEIGHBOUR_CELL_DATA:
5495 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005496 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_Neighbour_Cell_Data_t), vector, &writeIndex, &data->u.Packet_Neighbour_Cell_Data);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005497 break;
5498 }
5499 case MT_PACKET_SERVING_CELL_DATA:
5500 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005501 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_Serving_Cell_Data_t), vector, &writeIndex, &data->u.Packet_Serving_Cell_Data);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005502 break;
5503 }
5504 case MT_PACKET_PAGING_REQUEST:
5505 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005506 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_Paging_Request_t), vector, &writeIndex, &data->u.Packet_Paging_Request);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005507 break;
5508 }
5509 case MT_PACKET_PDCH_RELEASE:
5510 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005511 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_PDCH_Release_t), vector, &writeIndex, &data->u.Packet_PDCH_Release);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005512 break;
5513 }
5514 case MT_PACKET_POLLING_REQ:
5515 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005516 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_Polling_Request_t), vector, &writeIndex, &data->u.Packet_Polling_Request);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005517 break;
5518 }
5519 case MT_PACKET_POWER_CONTROL_TIMING_ADVANCE:
5520 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005521 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 +03005522 break;
5523 }
5524 case MT_PACKET_PRACH_PARAMETERS:
5525 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005526 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_PRACH_Parameters_t), vector, &writeIndex, &data->u.Packet_PRACH_Parameters);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005527 break;
5528 }
5529 case MT_PACKET_QUEUEING_NOTIFICATION:
5530 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005531 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_Queueing_Notification_t), vector, &writeIndex, &data->u.Packet_Queueing_Notification);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005532 break;
5533 }
5534 case MT_PACKET_TIMESLOT_RECONFIGURE:
5535 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005536 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_Timeslot_Reconfigure_t), vector, &writeIndex, &data->u.Packet_Timeslot_Reconfigure);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005537 break;
5538 }
5539 case MT_PACKET_TBF_RELEASE:
5540 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005541 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_TBF_Release_t), vector, &writeIndex, &data->u.Packet_TBF_Release);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005542 break;
5543 }
5544 case MT_PACKET_UPLINK_ACK_NACK:
5545 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005546 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_Uplink_Ack_Nack_t), vector, &writeIndex, &data->u.Packet_Uplink_Ack_Nack);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005547 break;
5548 }
5549 case MT_PACKET_UPLINK_ASSIGNMENT:
5550 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005551 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_Uplink_Assignment_t), vector, &writeIndex, &data->u.Packet_Uplink_Assignment);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005552 break;
5553 }
5554 case MT_PACKET_HANDOVER_COMMAND:
5555 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005556 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_Handover_Command_t), vector, &writeIndex, &data->u.Packet_Handover_Command);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005557 break;
5558 }
5559 case MT_PACKET_PHYSICAL_INFORMATION:
5560 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005561 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_PhysicalInformation_t), vector, &writeIndex, &data->u.Packet_Handover_Command);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005562 break;
5563 }
5564 case MT_PACKET_DOWNLINK_DUMMY_CONTROL_BLOCK:
5565 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005566 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 +03005567 break;
5568 }
5569 case MT_PACKET_SYSTEM_INFO_1:
5570 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005571 ret = csnStreamEncoder(&ar, CSNDESCR(PSI1_t), vector, &writeIndex, &data->u.PSI1);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005572 break;
5573 }
5574 case MT_PACKET_SYSTEM_INFO_2:
5575 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005576 ret = csnStreamEncoder(&ar, CSNDESCR(PSI2_t), vector, &writeIndex, &data->u.PSI2);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005577 break;
5578 }
5579 case MT_PACKET_SYSTEM_INFO_3:
5580 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005581 ret = csnStreamEncoder(&ar, CSNDESCR(PSI3_t), vector, &writeIndex, &data->u.PSI3);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005582 break;
5583 }
5584 case MT_PACKET_SYSTEM_INFO_5:
5585 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005586 ret = csnStreamEncoder(&ar, CSNDESCR(PSI5_t), vector, &writeIndex, &data->u.PSI5);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005587 break;
5588 }
5589 case MT_PACKET_SYSTEM_INFO_13:
5590 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005591 ret = csnStreamEncoder(&ar, CSNDESCR(PSI13_t), vector, &writeIndex, &data->u.PSI13);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005592 break;
5593 }
5594 default:
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01005595 ret = -1;
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005596 break;
5597 }
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01005598
Pau Espin Pedrolac2b8662020-02-03 18:58:24 +01005599 /* recursive csnStreamDecoder call uses LOGPC everywhere without trailing
5600 newline, so as a caller we are responisble for submitting it */
5601 LOGPC(DCSN1, LOGL_INFO, "\n");
5602
Vadim Yanitskiy773cb742020-03-06 08:26:16 +07005603 if (ret > 0 || ret == CSN_ERROR_NEED_MORE_BITS_TO_UNPACK) {
5604 LOGP(DRLCMACDATA, LOGL_ERROR, "Failed to encode a Downlink block: not enough bits "
5605 "in the output buffer (rc=%d)\n", ret);
5606 ret = CSN_ERROR_NEED_MORE_BITS_TO_UNPACK;
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01005607 }
5608
5609 return ret;
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005610}
Ivan Kluchnikovd5f01332012-02-05 01:41:25 +04005611
Ivan Kluchnikov835f91e2012-04-30 18:00:36 +04005612void decode_gsm_rlcmac_uplink_data(bitvec * vector, RlcMacUplinkDataBlock_t * data)
Ivan Kluchnikovd5f01332012-02-05 01:41:25 +04005613{
Ivan Kluchnikov9b06ff02012-06-15 10:13:30 +04005614 unsigned readIndex = 0;
Ivan Kluchnikovd5f01332012-02-05 01:41:25 +04005615 //unsigned dataLen = 0;
Alexander Couzensccde5c92017-02-04 03:10:08 +01005616 guint8 payload_type = bitvec_read_field(vector, &readIndex, 2);
Ivan Kluchnikovd5f01332012-02-05 01:41:25 +04005617 if (payload_type == PAYLOAD_TYPE_DATA)
5618 {
5619 readIndex = 0;
5620 // MAC header
Alexander Couzensccde5c92017-02-04 03:10:08 +01005621 data->PAYLOAD_TYPE = bitvec_read_field(vector, &readIndex, 2);
5622 data->CV = bitvec_read_field(vector, &readIndex, 4);
5623 data->SI = bitvec_read_field(vector, &readIndex, 1);
5624 data->R = bitvec_read_field(vector, &readIndex, 1);
Ivan Kluchnikova9f1ff22012-05-24 22:25:06 +04005625 LOGPC(DRLCMACDATA, LOGL_NOTICE, "PAYLOAD_TYPE = %u ", (unsigned)(data->PAYLOAD_TYPE));
5626 LOGPC(DRLCMACDATA, LOGL_NOTICE, "CV = %u ", (unsigned)(data->CV));
5627 LOGPC(DRLCMACDATA, LOGL_NOTICE, "SI = %u ", (unsigned)(data->SI));
5628 LOGPC(DRLCMACDATA, LOGL_NOTICE, "R = %u ", (unsigned)(data->R));
Ivan Kluchnikovd5f01332012-02-05 01:41:25 +04005629 // Octet 1
Alexander Couzensccde5c92017-02-04 03:10:08 +01005630 data->spare = bitvec_read_field(vector, &readIndex, 1);
5631 data->PI = bitvec_read_field(vector, &readIndex, 1);
5632 data->TFI = bitvec_read_field(vector, &readIndex, 5);
5633 data->TI = bitvec_read_field(vector, &readIndex, 1);
Ivan Kluchnikova9f1ff22012-05-24 22:25:06 +04005634 LOGPC(DRLCMACDATA, LOGL_NOTICE, "spare = %u ", (unsigned)(data->spare));
5635 LOGPC(DRLCMACDATA, LOGL_NOTICE, "PI = %u ", (unsigned)(data->PI));
5636 LOGPC(DRLCMACDATA, LOGL_NOTICE, "TFI = %u ", (unsigned)(data->TFI));
5637 LOGPC(DRLCMACDATA, LOGL_NOTICE, "TI = %u ", (unsigned)(data->TI));
Ivan Kluchnikovd5f01332012-02-05 01:41:25 +04005638
5639 // Octet 2
Alexander Couzensccde5c92017-02-04 03:10:08 +01005640 data->BSN = bitvec_read_field(vector, &readIndex, 7);
5641 data->E_1 = bitvec_read_field(vector, &readIndex, 1);
Ivan Kluchnikova9f1ff22012-05-24 22:25:06 +04005642 LOGPC(DRLCMACDATA, LOGL_NOTICE, "BSN = %u ", (unsigned)(data->BSN));
5643 LOGPC(DRLCMACDATA, LOGL_NOTICE, "E_1 = %u ", (unsigned)(data->E_1));
5644
Ivan Kluchnikovd5f01332012-02-05 01:41:25 +04005645
5646 if(data->E_1 == 0) // Extension octet follows immediately
5647 {
5648 // Octet 3 (optional)
5649 unsigned i = 0;
5650 do
5651 {
Alexander Couzensccde5c92017-02-04 03:10:08 +01005652 data->LENGTH_INDICATOR[i] = bitvec_read_field(vector, &readIndex, 6);
5653 data->M[i] = bitvec_read_field(vector, &readIndex, 1);
5654 data->E[i] = bitvec_read_field(vector, &readIndex, 1);
Ivan Kluchnikova9f1ff22012-05-24 22:25:06 +04005655 LOGPC(DRLCMACDATA, LOGL_NOTICE, "LENGTH_INDICATOR[%u] = %u ", i, (unsigned)(data->LENGTH_INDICATOR[i]));
5656 LOGPC(DRLCMACDATA, LOGL_NOTICE, "M[%u] = %u ", i, (unsigned)(data->M[i]));
5657 LOGPC(DRLCMACDATA, LOGL_NOTICE, "E[%u] = %u ", i, (unsigned)(data->E[i]));
Ivan Kluchnikovd5f01332012-02-05 01:41:25 +04005658 i++;
5659 } while((data->M[i-1] == 1)&&(data->E[i-1] == 0));
5660 }
5661 if(data->TI == 1) // TLLI field is present
5662 {
Alexander Couzensccde5c92017-02-04 03:10:08 +01005663 data->TLLI = bitvec_read_field(vector, &readIndex, 32);
Ivan Kluchnikova9f1ff22012-05-24 22:25:06 +04005664 LOGPC(DRLCMACDATA, LOGL_NOTICE, "TLLI = %08x ", data->TLLI);
Ivan Kluchnikovd5f01332012-02-05 01:41:25 +04005665 if (data->PI == 1) // PFI is present if TI field indicates presence of TLLI
5666 {
Alexander Couzensccde5c92017-02-04 03:10:08 +01005667 data->PFI = bitvec_read_field(vector, &readIndex, 7);
5668 data->E_2 = bitvec_read_field(vector, &readIndex, 1);
Ivan Kluchnikova9f1ff22012-05-24 22:25:06 +04005669 LOGPC(DRLCMACDATA, LOGL_NOTICE, "PFI = %u ", (unsigned)(data->PFI));
5670 LOGPC(DRLCMACDATA, LOGL_NOTICE, "E_2 = %u ", (unsigned)(data->E_2));
Ivan Kluchnikovd5f01332012-02-05 01:41:25 +04005671 }
5672 }
5673 unsigned dataLen = 23 - readIndex/8;
Ivan Kluchnikova9f1ff22012-05-24 22:25:06 +04005674 LOGPC(DRLCMACDATA, LOGL_NOTICE, "DATA[%u] = ", dataLen);
Ivan Kluchnikov1b517342013-12-30 14:26:06 +04005675 assert(dataLen <= 20);
Ivan Kluchnikovd5f01332012-02-05 01:41:25 +04005676 for (unsigned i = 0; i < dataLen; i++)
5677 {
Alexander Couzensccde5c92017-02-04 03:10:08 +01005678 data->RLC_DATA[i] = bitvec_read_field(vector, &readIndex, 8);
Ivan Kluchnikova9f1ff22012-05-24 22:25:06 +04005679 LOGPC(DRLCMACDATA, LOGL_NOTICE, "%02x", (unsigned)(data->RLC_DATA[i]));
Ivan Kluchnikovd5f01332012-02-05 01:41:25 +04005680 }
Ivan Kluchnikova9f1ff22012-05-24 22:25:06 +04005681 LOGPC(DRLCMACDATA, LOGL_NOTICE, "\n");
Ivan Kluchnikovd5f01332012-02-05 01:41:25 +04005682 }
5683 else
5684 {
Pau Espin Pedrolea9de4a2020-02-03 18:57:21 +01005685 LOGP(DRLCMACDATA, LOGL_NOTICE, "Payload Type: RESERVED (3)\n");
Ivan Kluchnikovd5f01332012-02-05 01:41:25 +04005686 return;
5687 }
5688}
Ivan Kluchnikov92ac6372012-02-20 15:04:25 +04005689
Ivan Kluchnikov835f91e2012-04-30 18:00:36 +04005690void encode_gsm_rlcmac_downlink_data(bitvec * vector, RlcMacDownlinkDataBlock_t * data)
Ivan Kluchnikov92ac6372012-02-20 15:04:25 +04005691{
Ivan Kluchnikov9b06ff02012-06-15 10:13:30 +04005692 unsigned writeIndex = 0;
Ivan Kluchnikov92ac6372012-02-20 15:04:25 +04005693
5694 if (data->PAYLOAD_TYPE == PAYLOAD_TYPE_DATA)
5695 {
5696 // MAC header
Alexander Couzensccde5c92017-02-04 03:10:08 +01005697 bitvec_write_field(vector, &writeIndex, data->PAYLOAD_TYPE, 2);
5698 bitvec_write_field(vector, &writeIndex, data->RRBP, 2);
5699 bitvec_write_field(vector, &writeIndex, data->SP, 1);
5700 bitvec_write_field(vector, &writeIndex, data->USF, 3);
Ivan Kluchnikova9f1ff22012-05-24 22:25:06 +04005701 LOGPC(DRLCMACDATA, LOGL_NOTICE, "PAYLOAD_TYPE = %u ", (unsigned)(data->PAYLOAD_TYPE));
5702 LOGPC(DRLCMACDATA, LOGL_NOTICE, "RRBP = %u ", (unsigned)(data->RRBP));
5703 LOGPC(DRLCMACDATA, LOGL_NOTICE, "SP = %u ", (unsigned)(data->SP));
5704 LOGPC(DRLCMACDATA, LOGL_NOTICE, "USF = %u ", (unsigned)(data->USF));
Pau Espin Pedrol034e32f2020-01-28 17:14:26 +01005705
Ivan Kluchnikov92ac6372012-02-20 15:04:25 +04005706 // Octet 1
Alexander Couzensccde5c92017-02-04 03:10:08 +01005707 bitvec_write_field(vector, &writeIndex, data->PR, 2);
5708 bitvec_write_field(vector, &writeIndex, data->TFI, 5);
5709 bitvec_write_field(vector, &writeIndex, data->FBI, 1);
Ivan Kluchnikova9f1ff22012-05-24 22:25:06 +04005710 LOGPC(DRLCMACDATA, LOGL_NOTICE, "PR = %u ", (unsigned)(data->PR));
5711 LOGPC(DRLCMACDATA, LOGL_NOTICE, "TFI = %u ", (unsigned)(data->TFI));
5712 LOGPC(DRLCMACDATA, LOGL_NOTICE, "FBI = %u ", (unsigned)(data->FBI));
5713
Ivan Kluchnikov92ac6372012-02-20 15:04:25 +04005714 // Octet 2
Alexander Couzensccde5c92017-02-04 03:10:08 +01005715 bitvec_write_field(vector, &writeIndex, data->BSN, 7);
5716 bitvec_write_field(vector, &writeIndex, data->E_1, 1);
Ivan Kluchnikova9f1ff22012-05-24 22:25:06 +04005717 LOGPC(DRLCMACDATA, LOGL_NOTICE, "BSN = %u ", (unsigned)(data->BSN));
5718 LOGPC(DRLCMACDATA, LOGL_NOTICE, "E_1 = %u ", (unsigned)(data->E_1));
5719
Ivan Kluchnikov92ac6372012-02-20 15:04:25 +04005720 // Octet 3 (optional)
5721 if(data->E_1 == 0)
5722 {
5723 unsigned i = 0;
5724 do
5725 {
Alexander Couzensccde5c92017-02-04 03:10:08 +01005726 bitvec_write_field(vector, &writeIndex, data->LENGTH_INDICATOR[i], 6);
5727 bitvec_write_field(vector, &writeIndex, data->M[i], 1);
5728 bitvec_write_field(vector, &writeIndex, data->E[i], 1);
Ivan Kluchnikova9f1ff22012-05-24 22:25:06 +04005729 LOGPC(DRLCMACDATA, LOGL_NOTICE, "LENGTH_INDICATOR[%u] = %u ", i, (unsigned)(data->LENGTH_INDICATOR[i]));
5730 LOGPC(DRLCMACDATA, LOGL_NOTICE, "M[%u] = %u ", i, (unsigned)(data->M[i]));
5731 LOGPC(DRLCMACDATA, LOGL_NOTICE, "E[%u] = %u ", i, (unsigned)(data->E[i]));
Ivan Kluchnikov92ac6372012-02-20 15:04:25 +04005732 i++;
5733 }
5734 while ((data->M[i-1] == 1) && (data->E[i-1] == 0));
5735 }
5736 unsigned dataNumOctets = 23 - writeIndex/8;
Ivan Kluchnikova9f1ff22012-05-24 22:25:06 +04005737 LOGPC(DRLCMACDATA, LOGL_NOTICE, "DATA[%u] = ", dataNumOctets);
Ivan Kluchnikov1b517342013-12-30 14:26:06 +04005738 assert(dataNumOctets <= 20);
Ivan Kluchnikov92ac6372012-02-20 15:04:25 +04005739 for (unsigned i = 0; i < dataNumOctets; i++)
5740 {
Alexander Couzensccde5c92017-02-04 03:10:08 +01005741 bitvec_write_field(vector, &writeIndex, data->RLC_DATA[i], 8);
Ivan Kluchnikova9f1ff22012-05-24 22:25:06 +04005742 LOGPC(DRLCMACDATA, LOGL_NOTICE, "%02x", (unsigned)(data->RLC_DATA[i]));
Ivan Kluchnikov92ac6372012-02-20 15:04:25 +04005743 }
Ivan Kluchnikova9f1ff22012-05-24 22:25:06 +04005744 LOGPC(DRLCMACDATA, LOGL_NOTICE, "\n");
Ivan Kluchnikov92ac6372012-02-20 15:04:25 +04005745 }
5746}
Jacob Erlbeck0df80be2016-01-20 12:14:55 +01005747
Pau Espin Pedrolcdbc5db2020-01-23 21:00:19 +01005748int decode_gsm_ra_cap(bitvec * vector, MS_Radio_Access_capability_t *data)
Jacob Erlbeck0df80be2016-01-20 12:14:55 +01005749{
5750 csnStream_t ar;
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01005751 int ret;
Jacob Erlbeck0df80be2016-01-20 12:14:55 +01005752 unsigned readIndex = 0;
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01005753
Jacob Erlbeck0df80be2016-01-20 12:14:55 +01005754 csnStreamInit(&ar, 0, 8 * vector->data_len);
Pau Espin Pedrolac2b8662020-02-03 18:58:24 +01005755
5756 /* recursive csnStreamEncoder call uses LOGPC everywhere, so we need to start the log somewhere... */
Vadim Yanitskiye60d9c72020-02-18 05:30:57 +07005757 LOGP(DCSN1, LOGL_INFO, "csnStreamDecoder (RAcap): ");
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005758 ret = csnStreamDecoder(&ar, CSNDESCR(MS_Radio_Access_capability_t), vector, &readIndex, data);
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01005759
Pau Espin Pedrolac2b8662020-02-03 18:58:24 +01005760 /* recursive csnStreamDecoder call uses LOGPC everywhere without trailing
5761 newline, so as a caller we are responisble for submitting it */
5762 LOGPC(DCSN1, LOGL_INFO, "\n");
5763
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01005764 if (ret > 0) {
Pau Espin Pedrol20848c32020-03-23 17:13:20 +01005765 LOGP(DRLCMACDATA, LOGL_NOTICE, "RAcap: Got %d remaining bits unhandled by decoder at the end of bitvec\n", ret);
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01005766 ret = 0;
5767 }
5768 return ret;
Jacob Erlbeck0df80be2016-01-20 12:14:55 +01005769}
Vadim Yanitskiyb47e53b2020-02-20 04:33:50 +07005770
5771/* This function is not actually used by osmo-pcu itself, and only needed for
5772 * the RLCMAC unit test. Having it here is better than making the internal
5773 * CSN.1 definitions (in particular, MS_Radio_Access_capability_t) non-static. */
5774int encode_gsm_ra_cap(bitvec *vector, MS_Radio_Access_capability_t *data)
5775{
5776 unsigned writeIndex = 0;
5777 csnStream_t ar;
5778 int ret;
5779
5780 csnStreamInit(&ar, 0, vector->data_len * 8);
5781
5782 /* recursive csnStreamEncoder call uses LOGPC everywhere, so we need to start the log somewhere... */
5783 LOGP(DCSN1, LOGL_INFO, "csnStreamEncoder (RAcap): ");
5784 ret = csnStreamEncoder(&ar, CSNDESCR(MS_Radio_Access_capability_t), vector, &writeIndex, data);
5785 LOGPC(DCSN1, LOGL_INFO, "\n");
5786
Vadim Yanitskiy773cb742020-03-06 08:26:16 +07005787 if (ret > 0 || ret == CSN_ERROR_NEED_MORE_BITS_TO_UNPACK) {
5788 LOGP(DRLCMACDATA, LOGL_ERROR, "Failed to encode MS RA Capability IE: not enough bits "
5789 "in the output buffer (rc=%d)\n", ret);
5790 ret = CSN_ERROR_NEED_MORE_BITS_TO_UNPACK;
Vadim Yanitskiyb47e53b2020-02-20 04:33:50 +07005791 }
5792
5793 return ret;
5794}