blob: 570c97b83048679b84676c77cdaf4be7d69a97ad [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.
Ivan Kluchnikov487a1412011-12-21 13:17:53 +030026 */
27
Pau Espin Pedrol20848c32020-03-23 17:13:20 +010028#include <osmocom/core/utils.h>
Pau Espin Pedrolb2653fe2020-03-26 15:14:01 +010029#include <osmocom/core/bitvec.h>
Pau Espin Pedrol20848c32020-03-23 17:13:20 +010030
Ivan Kluchnikov487a1412011-12-21 13:17:53 +030031#include "gsm_rlcmac.h"
Pau Espin Pedrolb2653fe2020-03-26 15:14:01 +010032#include "csn1.h"
Ivan Kluchnikov487a1412011-12-21 13:17:53 +030033/* Initialize the protocol and registered fields
34*/
Ivan Kluchnikov1b517342013-12-30 14:26:06 +040035#include <assert.h>
Pau Espin Pedrolf3ac06b2020-03-26 18:13:19 +010036#include <arpa/inet.h>
Ivan Kluchnikova9f1ff22012-05-24 22:25:06 +040037#include <gprs_debug.h>
Ivan Kluchnikov487a1412011-12-21 13:17:53 +030038
39/* Payload type as defined in TS 44.060 / 10.4.7 */
40#define PAYLOAD_TYPE_DATA 0
41#define PAYLOAD_TYPE_CTRL_NO_OPT_OCTET 1
42#define PAYLOAD_TYPE_CTRL_OPT_OCTET 2
43#define PAYLOAD_TYPE_RESERVED 3
44
45/* CSN1 structures */
46/*(not all parts of CSN_DESCR structure are always initialized.)*/
47static const
48CSN_DESCR_BEGIN(PLMN_t)
49 M_UINT (PLMN_t, MCC2, 4),
50 M_UINT (PLMN_t, MCC1, 4),
51 M_UINT (PLMN_t, MNC3, 4),
52 M_UINT (PLMN_t, MCC3, 4),
53 M_UINT (PLMN_t, MNC2, 4),
54 M_UINT (PLMN_t, MNC1, 4),
55CSN_DESCR_END (PLMN_t)
56
57static const
58CSN_DESCR_BEGIN(StartingTime_t)
59 M_UINT (StartingTime_t, N32, 5),
60 M_UINT (StartingTime_t, N51, 6),
61 M_UINT (StartingTime_t, N26, 5),
62CSN_DESCR_END (StartingTime_t)
63
64/*< Global TFI IE >*/
65static const
66CSN_DESCR_BEGIN(Global_TFI_t)
67 M_UNION (Global_TFI_t, 2),
68 M_UINT (Global_TFI_t, u.UPLINK_TFI, 5),
69 M_UINT (Global_TFI_t, u.DOWNLINK_TFI, 5),
70CSN_DESCR_END (Global_TFI_t)
71
72/*< Starting Frame Number Description IE >*/
73static const
74CSN_DESCR_BEGIN(Starting_Frame_Number_t)
75 M_UNION (Starting_Frame_Number_t, 2),
76 M_TYPE (Starting_Frame_Number_t, u.StartingTime, StartingTime_t),
77 M_UINT (Starting_Frame_Number_t, u.k, 13),
78CSN_DESCR_END(Starting_Frame_Number_t)
79
80/*< Ack/Nack Description IE >*/
81static const
82CSN_DESCR_BEGIN(Ack_Nack_Description_t)
83 M_UINT (Ack_Nack_Description_t, FINAL_ACK_INDICATION, 1),
84 M_UINT (Ack_Nack_Description_t, STARTING_SEQUENCE_NUMBER, 7),
85 M_BITMAP (Ack_Nack_Description_t, RECEIVED_BLOCK_BITMAP, 64),
86CSN_DESCR_END (Ack_Nack_Description_t)
87
88/*< Packet Timing Advance IE >*/
89static const
90CSN_DESCR_BEGIN(Packet_Timing_Advance_t)
91 M_NEXT_EXIST (Packet_Timing_Advance_t, Exist_TIMING_ADVANCE_VALUE, 1),
92 M_UINT (Packet_Timing_Advance_t, TIMING_ADVANCE_VALUE, 6),
93
94 M_NEXT_EXIST (Packet_Timing_Advance_t, Exist_IndexAndtimeSlot, 2),
95 M_UINT (Packet_Timing_Advance_t, TIMING_ADVANCE_INDEX, 4),
96 M_UINT (Packet_Timing_Advance_t, TIMING_ADVANCE_TIMESLOT_NUMBER, 3),
97CSN_DESCR_END (Packet_Timing_Advance_t)
98
99/*< Power Control Parameters IE >*/
100static const
101CSN_DESCR_BEGIN(GPRS_Power_Control_Parameters_t)
102 M_UINT (GPRS_Power_Control_Parameters_t, ALPHA, 4),
103 M_UINT (GPRS_Power_Control_Parameters_t, T_AVG_W, 5),
104 M_UINT (GPRS_Power_Control_Parameters_t, T_AVG_T, 5),
Anders Broman8ea3cbe2020-01-28 17:36:33 +0100105 M_UINT (GPRS_Power_Control_Parameters_t, PC_MEAS_CHAN, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300106 M_UINT (GPRS_Power_Control_Parameters_t, N_AVG_I, 4),
107CSN_DESCR_END (GPRS_Power_Control_Parameters_t)
108
109/*< Global Power Control Parameters IE >*/
110static const
111CSN_DESCR_BEGIN(Global_Power_Control_Parameters_t)
112 M_UINT (Global_Power_Control_Parameters_t, ALPHA, 4),
113 M_UINT (Global_Power_Control_Parameters_t, T_AVG_W, 5),
114 M_UINT (Global_Power_Control_Parameters_t, T_AVG_T, 5),
115 M_UINT (Global_Power_Control_Parameters_t, Pb, 4),
116 M_UINT (Global_Power_Control_Parameters_t, PC_MEAS_CHAN, 1),
117 M_UINT (Global_Power_Control_Parameters_t, INT_MEAS_CHANNEL_LIST_AVAIL, 1),
118 M_UINT (Global_Power_Control_Parameters_t, N_AVG_I, 4),
119CSN_DESCR_END (Global_Power_Control_Parameters_t)
120
121/*< Global Packet Timing Advance IE >*/
122static const
123CSN_DESCR_BEGIN(Global_Packet_Timing_Advance_t)
124 M_NEXT_EXIST (Global_Packet_Timing_Advance_t, Exist_TIMING_ADVANCE_VALUE, 1),
125 M_UINT (Global_Packet_Timing_Advance_t, TIMING_ADVANCE_VALUE, 6),
126
127 M_NEXT_EXIST (Global_Packet_Timing_Advance_t, Exist_UPLINK_TIMING_ADVANCE, 2),
128 M_UINT (Global_Packet_Timing_Advance_t, UPLINK_TIMING_ADVANCE_INDEX, 4),
129 M_UINT (Global_Packet_Timing_Advance_t, UPLINK_TIMING_ADVANCE_TIMESLOT_NUMBER, 3),
130
131 M_NEXT_EXIST (Global_Packet_Timing_Advance_t, Exist_DOWNLINK_TIMING_ADVANCE, 2),
132 M_UINT (Global_Packet_Timing_Advance_t, DOWNLINK_TIMING_ADVANCE_INDEX, 4),
133 M_UINT (Global_Packet_Timing_Advance_t, DOWNLINK_TIMING_ADVANCE_TIMESLOT_NUMBER, 3),
134CSN_DESCR_END (Global_Packet_Timing_Advance_t)
135
136/*< Channel Quality Report struct >*/
137static const
138CSN_DESCR_BEGIN(Channel_Quality_Report_t)
139 M_UINT (Channel_Quality_Report_t, C_VALUE, 6),
140 M_UINT (Channel_Quality_Report_t, RXQUAL, 3),
141 M_UINT (Channel_Quality_Report_t, SIGN_VAR, 6),
142
143 M_NEXT_EXIST (Channel_Quality_Report_t, Slot[0].Exist, 1),
144 M_UINT (Channel_Quality_Report_t, Slot[0].I_LEVEL_TN, 4),
145
146 M_NEXT_EXIST (Channel_Quality_Report_t, Slot[1].Exist, 1),
147 M_UINT (Channel_Quality_Report_t, Slot[1].I_LEVEL_TN, 4),
148
149 M_NEXT_EXIST (Channel_Quality_Report_t, Slot[2].Exist, 1),
150 M_UINT (Channel_Quality_Report_t, Slot[2].I_LEVEL_TN, 4),
151
152 M_NEXT_EXIST (Channel_Quality_Report_t, Slot[3].Exist, 1),
153 M_UINT (Channel_Quality_Report_t, Slot[3].I_LEVEL_TN, 4),
154
155 M_NEXT_EXIST (Channel_Quality_Report_t, Slot[4].Exist, 1),
156 M_UINT (Channel_Quality_Report_t, Slot[4].I_LEVEL_TN, 4),
157
158 M_NEXT_EXIST (Channel_Quality_Report_t, Slot[5].Exist, 1),
159 M_UINT (Channel_Quality_Report_t, Slot[5].I_LEVEL_TN, 4),
160
161 M_NEXT_EXIST (Channel_Quality_Report_t, Slot[6].Exist, 1),
162 M_UINT (Channel_Quality_Report_t, Slot[6].I_LEVEL_TN, 4),
163
164 M_NEXT_EXIST (Channel_Quality_Report_t, Slot[7].Exist, 1),
165 M_UINT (Channel_Quality_Report_t, Slot[7].I_LEVEL_TN, 4),
166CSN_DESCR_END (Channel_Quality_Report_t)
167
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400168/*< EGPRS Ack/Nack Description struct >*/
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300169static const
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400170CSN_DESCR_BEGIN (EGPRS_AckNack_Desc_t)
171 M_UINT (EGPRS_AckNack_Desc_t, FINAL_ACK_INDICATION, 1),
172 M_UINT (EGPRS_AckNack_Desc_t, BEGINNING_OF_WINDOW, 1),
173 M_UINT (EGPRS_AckNack_Desc_t, END_OF_WINDOW, 1),
174 M_UINT (EGPRS_AckNack_Desc_t, STARTING_SEQUENCE_NUMBER, 11),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300175
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400176 M_NEXT_EXIST (EGPRS_AckNack_Desc_t, Exist_CRBB, 3),
177 M_UINT (EGPRS_AckNack_Desc_t, CRBB_LENGTH, 7),
178 M_UINT (EGPRS_AckNack_Desc_t, CRBB_STARTING_COLOR_CODE, 1),
179 M_LEFT_VAR_BMP (EGPRS_AckNack_Desc_t, CRBB, CRBB_LENGTH, 0),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300180
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400181 M_LEFT_VAR_BMP_1(EGPRS_AckNack_Desc_t, URBB, URBB_LENGTH, 0),
182CSN_DESCR_END (EGPRS_AckNack_Desc_t)
183
184/*< EGPRS Ack/Nack Description IE >*/
Pau Espin Pedrol007056e2020-03-26 15:03:33 +0100185gint16 Egprs_Ack_Nack_Desc_w_len_Dissector(csnStream_t* ar, struct bitvec *vector, unsigned *readIndex, void* data)
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400186{
187 if (ar->direction == 0)
188 {
189 return csnStreamEncoder(ar, CSNDESCR(EGPRS_AckNack_Desc_t), vector, readIndex, data);
190 }
191 else
192 {
193 return csnStreamDecoder(ar, CSNDESCR(EGPRS_AckNack_Desc_t), vector, readIndex, data);
194 }
195}
196
197/* this intermediate structure is only required because M_SERIALIZE cannot be used as a member of M_UNION */
198static const
199CSN_DESCR_BEGIN(EGPRS_AckNack_w_len_t)
200 M_SERIALIZE (EGPRS_AckNack_w_len_t, Desc, 8, Egprs_Ack_Nack_Desc_w_len_Dissector),
201CSN_DESCR_END (EGPRS_AckNack_w_len_t)
202
203static const
204CSN_DESCR_BEGIN(EGPRS_AckNack_t)
205 M_UNION (EGPRS_AckNack_t, 2),
206 M_TYPE (EGPRS_AckNack_t, Desc, EGPRS_AckNack_Desc_t),
207 M_TYPE (EGPRS_AckNack_t, Desc, EGPRS_AckNack_w_len_t),
208CSN_DESCR_END (EGPRS_AckNack_t)
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300209
210/*<P1 Rest Octets>*/
211/*<P2 Rest Octets>*/
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100212#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300213static const
214CSN_DESCR_BEGIN(MobileAllocationIE_t)
215 M_UINT (MobileAllocationIE_t, Length, 8),
216 M_VAR_ARRAY (MobileAllocationIE_t, MA, Length, 0),
217CSN_DESCR_END (MobileAllocationIE_t)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100218#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300219
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100220#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300221static const
222CSN_DESCR_BEGIN(SingleRFChannel_t)
223 M_UINT (SingleRFChannel_t, spare, 2),
224 M_UINT (SingleRFChannel_t, ARFCN, 10),
225CSN_DESCR_END (SingleRFChannel_t)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100226#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300227
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100228#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300229static const
230CSN_DESCR_BEGIN(RFHoppingChannel_t)
231 M_UINT (RFHoppingChannel_t, MAIO, 6),
232 M_UINT (RFHoppingChannel_t, HSN, 6),
233CSN_DESCR_END (RFHoppingChannel_t)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100234#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300235
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100236#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300237static const
238CSN_DESCR_BEGIN(MobileAllocation_or_Frequency_Short_List_t)
239 M_UNION (MobileAllocation_or_Frequency_Short_List_t, 2),
240 M_BITMAP (MobileAllocation_or_Frequency_Short_List_t, u.Frequency_Short_List, 64),
241 M_TYPE (MobileAllocation_or_Frequency_Short_List_t, u.MA, MobileAllocationIE_t),
242CSN_DESCR_END (MobileAllocation_or_Frequency_Short_List_t)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100243#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300244
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100245#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300246static const
247CSN_DESCR_BEGIN(Channel_Description_t)
248 M_UINT (Channel_Description_t, Channel_type_and_TDMA_offset, 5),
249 M_UINT (Channel_Description_t, TN, 3),
250 M_UINT (Channel_Description_t, TSC, 3),
251
252 M_UNION (Channel_Description_t, 2),
253 M_TYPE (Channel_Description_t, u.SingleRFChannel, SingleRFChannel_t),
254 M_TYPE (Channel_Description_t, u.RFHoppingChannel, RFHoppingChannel_t),
255CSN_DESCR_END(Channel_Description_t)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100256#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300257
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100258#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300259static const
260CSN_DESCR_BEGIN(Group_Channel_Description_t)
261 M_TYPE (Group_Channel_Description_t, Channel_Description, Channel_Description_t),
262
263 M_NEXT_EXIST (Group_Channel_Description_t, Exist_Hopping, 1),
264 M_TYPE (Group_Channel_Description_t, MA_or_Frequency_Short_List, MobileAllocation_or_Frequency_Short_List_t),
265CSN_DESCR_END (Group_Channel_Description_t)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100266#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300267
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100268#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300269static const
270CSN_DESCR_BEGIN(Group_Call_Reference_t)
271 M_UINT (Group_Call_Reference_t, value, 27),
Anders Broman8ea3cbe2020-01-28 17:36:33 +0100272 M_UINT (Group_Call_Reference_t, SF, 1),
273 M_UINT (Group_Call_Reference_t, AF, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300274 M_UINT (Group_Call_Reference_t, call_priority, 3),
275 M_UINT (Group_Call_Reference_t, Ciphering_information, 4),
276CSN_DESCR_END (Group_Call_Reference_t)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100277#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300278
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100279#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300280static const
281CSN_DESCR_BEGIN(Group_Call_information_t)
282 M_TYPE (Group_Call_information_t, Group_Call_Reference, Group_Call_Reference_t),
283
284 M_NEXT_EXIST (Group_Call_information_t, Exist_Group_Channel_Description, 1),
285 M_TYPE (Group_Call_information_t, Group_Channel_Description, Group_Channel_Description_t),
286CSN_DESCR_END (Group_Call_information_t)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100287#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300288
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100289#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300290static const
291CSN_DESCR_BEGIN (P1_Rest_Octets_t)
292 M_NEXT_EXIST_LH(P1_Rest_Octets_t, Exist_NLN_PCH_and_NLN_status, 2),
293 M_UINT (P1_Rest_Octets_t, NLN_PCH, 2),
294 M_UINT (P1_Rest_Octets_t, NLN_status, 1),
295
296 M_NEXT_EXIST_LH(P1_Rest_Octets_t, Exist_Priority1, 1),
297 M_UINT (P1_Rest_Octets_t, Priority1, 3),
298
299 M_NEXT_EXIST_LH(P1_Rest_Octets_t, Exist_Priority2, 1),
300 M_UINT (P1_Rest_Octets_t, Priority2, 3),
301
302 M_NEXT_EXIST_LH(P1_Rest_Octets_t, Exist_Group_Call_information, 1),
303 M_TYPE (P1_Rest_Octets_t, Group_Call_information, Group_Call_information_t),
304
305 M_UINT_LH (P1_Rest_Octets_t, Packet_Page_Indication_1, 1),
306 M_UINT_LH (P1_Rest_Octets_t, Packet_Page_Indication_2, 1),
307CSN_DESCR_END (P1_Rest_Octets_t)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100308#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300309
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100310#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300311static const
312CSN_DESCR_BEGIN (P2_Rest_Octets_t)
313 M_NEXT_EXIST_LH(P2_Rest_Octets_t, Exist_CN3, 1),
314 M_UINT (P2_Rest_Octets_t, CN3, 2),
315
316 M_NEXT_EXIST_LH(P2_Rest_Octets_t, Exist_NLN_and_status, 2),
317 M_UINT (P2_Rest_Octets_t, NLN, 2),
318 M_UINT (P2_Rest_Octets_t, NLN_status, 1),
319
320 M_NEXT_EXIST_LH(P2_Rest_Octets_t, Exist_Priority1, 1),
321 M_UINT (P2_Rest_Octets_t, Priority1, 3),
322
323 M_NEXT_EXIST_LH(P2_Rest_Octets_t, Exist_Priority2, 1),
324 M_UINT (P2_Rest_Octets_t, Priority2, 3),
325
326 M_NEXT_EXIST_LH(P2_Rest_Octets_t, Exist_Priority3, 1),
327 M_UINT (P2_Rest_Octets_t, Priority3, 3),
328
329 M_UINT_LH (P2_Rest_Octets_t, Packet_Page_Indication_3, 1),
330CSN_DESCR_END (P2_Rest_Octets_t)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100331#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300332
333/* <IA Rest Octets>
334 * Note!!
335 * - first two bits skipped and frequencyparameters skipped
336 * - additions for R99 and EGPRS added
337 */
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100338#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300339static const
340CSN_DESCR_BEGIN(DynamicAllocation_t)
341 M_UINT (DynamicAllocation_t, USF, 3),
342 M_UINT (DynamicAllocation_t, USF_GRANULARITY, 1),
343
344 M_NEXT_EXIST (DynamicAllocation_t, Exist_P0_PR_MODE, 2),
345 M_UINT (DynamicAllocation_t, P0, 4),
346 M_UINT (DynamicAllocation_t, PR_MODE, 1),
347CSN_DESCR_END (DynamicAllocation_t)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100348#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300349
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100350#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300351static const
352CSN_DESCR_BEGIN(EGPRS_TwoPhaseAccess_t)
353 M_NEXT_EXIST (EGPRS_TwoPhaseAccess_t, Exist_ALPHA, 1),
354 M_UINT (EGPRS_TwoPhaseAccess_t, ALPHA, 4),
355
356 M_UINT (EGPRS_TwoPhaseAccess_t, GAMMA, 5),
357 M_TYPE (EGPRS_TwoPhaseAccess_t, TBF_STARTING_TIME, StartingTime_t),
358 M_UINT (EGPRS_TwoPhaseAccess_t, NR_OF_RADIO_BLOCKS_ALLOCATED, 2),
359
360 M_NEXT_EXIST (EGPRS_TwoPhaseAccess_t, Exist_P0_BTS_PWR_CTRL_PR_MODE, 3),
361 M_UINT (EGPRS_TwoPhaseAccess_t, P0, 4),
362 M_UINT (EGPRS_TwoPhaseAccess_t, BTS_PWR_CTRL_MODE, 1),
363 M_UINT (EGPRS_TwoPhaseAccess_t, PR_MODE, 1),
364CSN_DESCR_END (EGPRS_TwoPhaseAccess_t)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100365#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300366
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100367#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300368static const
369CSN_DESCR_BEGIN(EGPRS_OnePhaseAccess_t)
370 M_UINT (EGPRS_OnePhaseAccess_t, TFI_ASSIGNMENT, 5),
371 M_UINT (EGPRS_OnePhaseAccess_t, POLLING, 1),
372
373 M_UNION (EGPRS_OnePhaseAccess_t, 2),
374 M_TYPE (EGPRS_OnePhaseAccess_t, Allocation.DynamicAllocation, DynamicAllocation_t),
375 CSN_ERROR (EGPRS_OnePhaseAccess_t, "1 <Fixed Allocation>", CSN_ERROR_STREAM_NOT_SUPPORTED),
376
377 M_UINT (EGPRS_OnePhaseAccess_t, EGPRS_CHANNEL_CODING_COMMAND, 4),
378 M_UINT (EGPRS_OnePhaseAccess_t, TLLI_BLOCK_CHANNEL_CODING, 1),
379
380 M_NEXT_EXIST (EGPRS_OnePhaseAccess_t, Exist_BEP_PERIOD2, 1),
381 M_UINT (EGPRS_OnePhaseAccess_t, BEP_PERIOD2, 4),
382
383 M_UINT (EGPRS_OnePhaseAccess_t, RESEGMENT, 1),
384 M_UINT (EGPRS_OnePhaseAccess_t, EGPRS_WindowSize, 5),
385
386 M_NEXT_EXIST (EGPRS_OnePhaseAccess_t, Exist_ALPHA, 1),
387 M_UINT (EGPRS_OnePhaseAccess_t, ALPHA, 4),
388
389 M_UINT (EGPRS_OnePhaseAccess_t, GAMMA, 5),
390
391 M_NEXT_EXIST (EGPRS_OnePhaseAccess_t, Exist_TIMING_ADVANCE_INDEX, 1),
392 M_UINT (EGPRS_OnePhaseAccess_t, TIMING_ADVANCE_INDEX, 4),
393
394 M_NEXT_EXIST (EGPRS_OnePhaseAccess_t, Exist_TBF_STARTING_TIME, 1),
395 M_TYPE (EGPRS_OnePhaseAccess_t, TBF_STARTING_TIME, StartingTime_t),
396CSN_DESCR_END (EGPRS_OnePhaseAccess_t)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100397#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300398
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100399#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300400static const
401CSN_DESCR_BEGIN(IA_EGPRS_00_t)
402 M_UINT (IA_EGPRS_00_t, ExtendedRA, 5),
403
404 M_REC_ARRAY (IA_EGPRS_00_t, AccessTechnologyType, NrOfAccessTechnologies, 4),
405
406 M_UNION (IA_EGPRS_00_t, 2),
407 M_TYPE (IA_EGPRS_00_t, Access.TwoPhaseAccess, EGPRS_TwoPhaseAccess_t),
408 M_TYPE (IA_EGPRS_00_t, Access.OnePhaseAccess, EGPRS_OnePhaseAccess_t),
409CSN_DESCR_END (IA_EGPRS_00_t)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100410#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300411
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100412#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300413static const
414CSN_ChoiceElement_t IA_EGPRS_Choice[] =
415{
Pau Espin Pedrol7cce8252020-01-24 16:41:14 +0100416 {2, 0x00, 0, M_TYPE (IA_EGPRS_t, u.IA_EGPRS_PUA, IA_EGPRS_00_t)},
417 {2, 0x01, 0, CSN_ERROR(IA_EGPRS_t, "01 <IA_EGPRS>", CSN_ERROR_STREAM_NOT_SUPPORTED)},
418 {1, 0x01, 0, CSN_ERROR(IA_EGPRS_t, "1 <IA_EGPRS>", CSN_ERROR_STREAM_NOT_SUPPORTED)}
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300419};
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100420#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300421
422/* Please observe the double usage of UnionType element.
423 * First, it is used to store the second bit of LL/LH identification of EGPRS contents.
424 * Thereafter, UnionType will be used to store the index to detected choice.
425 */
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100426#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300427static const
428CSN_DESCR_BEGIN(IA_EGPRS_t)
429 M_UINT (IA_EGPRS_t, UnionType , 1 ),
430 M_CHOICE (IA_EGPRS_t, UnionType, IA_EGPRS_Choice, ElementsOf(IA_EGPRS_Choice)),
431CSN_DESCR_END (IA_EGPRS_t)
432
433static const
434CSN_DESCR_BEGIN(IA_FreqParamsBeforeTime_t)
435 M_UINT (IA_FreqParamsBeforeTime_t, Length, 6),
436 M_UINT (IA_FreqParamsBeforeTime_t, MAIO, 6),
437 M_VAR_ARRAY (IA_FreqParamsBeforeTime_t, MobileAllocation, Length, 8),
438CSN_DESCR_END (IA_FreqParamsBeforeTime_t)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100439#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300440
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100441#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300442static const
443CSN_DESCR_BEGIN (GPRS_SingleBlockAllocation_t)
444 M_NEXT_EXIST (GPRS_SingleBlockAllocation_t, Exist_ALPHA, 1),
445 M_UINT (GPRS_SingleBlockAllocation_t, ALPHA, 4),
446
447 M_UINT (GPRS_SingleBlockAllocation_t, GAMMA, 5),
448 M_FIXED (GPRS_SingleBlockAllocation_t, 2, 0x01),
449 M_TYPE (GPRS_SingleBlockAllocation_t, TBF_STARTING_TIME, StartingTime_t), /*bit(16)*/
450
451 M_NEXT_EXIST_LH(GPRS_SingleBlockAllocation_t, Exist_P0_BTS_PWR_CTRL_PR_MODE, 3),
452 M_UINT (GPRS_SingleBlockAllocation_t, P0, 4),
453 M_UINT (GPRS_SingleBlockAllocation_t, BTS_PWR_CTRL_MODE, 1),
454 M_UINT (GPRS_SingleBlockAllocation_t, PR_MODE, 1),
455CSN_DESCR_END (GPRS_SingleBlockAllocation_t)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100456#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300457
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100458#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300459static const
460CSN_DESCR_BEGIN (GPRS_DynamicOrFixedAllocation_t)
461 M_UINT (GPRS_DynamicOrFixedAllocation_t, TFI_ASSIGNMENT, 5),
462 M_UINT (GPRS_DynamicOrFixedAllocation_t, POLLING, 1),
463
464 M_UNION (GPRS_DynamicOrFixedAllocation_t, 2),
465 M_TYPE (GPRS_DynamicOrFixedAllocation_t, Allocation.DynamicAllocation, DynamicAllocation_t),
466 CSN_ERROR (GPRS_DynamicOrFixedAllocation_t, "1 <Fixed Allocation>", CSN_ERROR_STREAM_NOT_SUPPORTED),
467
468 M_UINT (GPRS_DynamicOrFixedAllocation_t, CHANNEL_CODING_COMMAND, 2),
469 M_UINT (GPRS_DynamicOrFixedAllocation_t, TLLI_BLOCK_CHANNEL_CODING, 1),
470
471 M_NEXT_EXIST (GPRS_DynamicOrFixedAllocation_t, Exist_ALPHA, 1),
472 M_UINT (GPRS_DynamicOrFixedAllocation_t, ALPHA, 4),
473
474 M_UINT (GPRS_DynamicOrFixedAllocation_t, GAMMA, 5),
475
476 M_NEXT_EXIST (GPRS_DynamicOrFixedAllocation_t, Exist_TIMING_ADVANCE_INDEX, 1),
477 M_UINT (GPRS_DynamicOrFixedAllocation_t, TIMING_ADVANCE_INDEX, 4),
478
479 M_NEXT_EXIST (GPRS_DynamicOrFixedAllocation_t, Exist_TBF_STARTING_TIME, 1),
480 M_TYPE (GPRS_DynamicOrFixedAllocation_t, TBF_STARTING_TIME, StartingTime_t),
481CSN_DESCR_END (GPRS_DynamicOrFixedAllocation_t)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100482#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300483
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100484#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300485static const
486CSN_DESCR_BEGIN(PU_IA_AdditionsR99_t)
487 M_NEXT_EXIST (PU_IA_AdditionsR99_t, Exist_ExtendedRA, 1),
488 M_UINT (PU_IA_AdditionsR99_t, ExtendedRA, 5),
489CSN_DESCR_END (PU_IA_AdditionsR99_t)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100490#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300491
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100492#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300493static const
494CSN_DESCR_BEGIN (Packet_Uplink_ImmAssignment_t)
495 M_UNION (Packet_Uplink_ImmAssignment_t, 2),
496 M_TYPE (Packet_Uplink_ImmAssignment_t, Access.SingleBlockAllocation, GPRS_SingleBlockAllocation_t),
497 M_TYPE (Packet_Uplink_ImmAssignment_t, Access.DynamicOrFixedAllocation, GPRS_DynamicOrFixedAllocation_t),
498
499 M_NEXT_EXIST_OR_NULL_LH(Packet_Uplink_ImmAssignment_t, Exist_AdditionsR99, 1),
500 M_TYPE (Packet_Uplink_ImmAssignment_t, AdditionsR99, PU_IA_AdditionsR99_t),
501CSN_DESCR_END (Packet_Uplink_ImmAssignment_t)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100502#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300503
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100504#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300505static const
506CSN_DESCR_BEGIN(PD_IA_AdditionsR99_t)
507 M_UINT (PD_IA_AdditionsR99_t, EGPRS_WindowSize, 5),
508 M_UINT (PD_IA_AdditionsR99_t, LINK_QUALITY_MEASUREMENT_MODE, 2),
509
510 M_NEXT_EXIST (PD_IA_AdditionsR99_t, Exist_BEP_PERIOD2, 1),
511 M_UINT (PD_IA_AdditionsR99_t, BEP_PERIOD2, 4),
512CSN_DESCR_END (PD_IA_AdditionsR99_t)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100513#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300514
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100515#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300516static const
517CSN_DESCR_BEGIN(Packet_Downlink_ImmAssignment_t)
518 M_UINT (Packet_Downlink_ImmAssignment_t, TLLI, 32),
519
520 M_NEXT_EXIST (Packet_Downlink_ImmAssignment_t, Exist_TFI_to_TA_VALID, 6 + 1),
521 M_UINT (Packet_Downlink_ImmAssignment_t, TFI_ASSIGNMENT, 5),
522 M_UINT (Packet_Downlink_ImmAssignment_t, RLC_MODE, 1),
523 M_NEXT_EXIST (Packet_Downlink_ImmAssignment_t, Exist_ALPHA, 1),
524 M_UINT (Packet_Downlink_ImmAssignment_t, ALPHA, 4),
525 M_UINT (Packet_Downlink_ImmAssignment_t, GAMMA, 5),
526 M_UINT (Packet_Downlink_ImmAssignment_t, POLLING, 1),
527 M_UINT (Packet_Downlink_ImmAssignment_t, TA_VALID, 1),
528
529 M_NEXT_EXIST (Packet_Downlink_ImmAssignment_t, Exist_TIMING_ADVANCE_INDEX, 1),
530 M_UINT (Packet_Downlink_ImmAssignment_t, TIMING_ADVANCE_INDEX, 4),
531
532 M_NEXT_EXIST (Packet_Downlink_ImmAssignment_t, Exist_TBF_STARTING_TIME, 1),
533 M_TYPE (Packet_Downlink_ImmAssignment_t, TBF_STARTING_TIME, StartingTime_t),
534
535 M_NEXT_EXIST (Packet_Downlink_ImmAssignment_t, Exist_P0_PR_MODE, 3),
536 M_UINT (Packet_Downlink_ImmAssignment_t, P0, 4),
537 M_UINT (Packet_Downlink_ImmAssignment_t, BTS_PWR_CTRL_MODE, 1),
538 M_UINT (Packet_Downlink_ImmAssignment_t, PR_MODE, 1),
539
540 M_NEXT_EXIST_OR_NULL_LH(Packet_Downlink_ImmAssignment_t, Exist_AdditionsR99, 1),
541 M_TYPE (Packet_Downlink_ImmAssignment_t, AdditionsR99, PD_IA_AdditionsR99_t),
542CSN_DESCR_END (Packet_Downlink_ImmAssignment_t)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100543#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300544
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100545#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300546static const
547CSN_DESCR_BEGIN (Second_Part_Packet_Assignment_t)
548 M_NEXT_EXIST_OR_NULL_LH(Second_Part_Packet_Assignment_t, Exist_SecondPart, 2),
549 M_NEXT_EXIST (Second_Part_Packet_Assignment_t, Exist_ExtendedRA, 1),
550 M_UINT (Second_Part_Packet_Assignment_t, ExtendedRA, 5),
551CSN_DESCR_END (Second_Part_Packet_Assignment_t)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100552#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300553
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100554#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300555static const
556CSN_DESCR_BEGIN(IA_PacketAssignment_UL_DL_t)
557 M_UNION (IA_PacketAssignment_UL_DL_t, 2),
558 M_TYPE (IA_PacketAssignment_UL_DL_t, ul_dl.Packet_Uplink_ImmAssignment, Packet_Uplink_ImmAssignment_t),
559 M_TYPE (IA_PacketAssignment_UL_DL_t, ul_dl.Packet_Downlink_ImmAssignment, Packet_Downlink_ImmAssignment_t),
560CSN_DESCR_END (IA_PacketAssignment_UL_DL_t)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100561#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300562
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100563#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300564static const
565CSN_DESCR_BEGIN(IA_PacketAssignment_t)
566 M_UNION (IA_PacketAssignment_t, 2),
567 M_TYPE (IA_PacketAssignment_t, u.UplinkDownlinkAssignment, IA_PacketAssignment_UL_DL_t),
568 M_TYPE (IA_PacketAssignment_t, u.UplinkDownlinkAssignment, Second_Part_Packet_Assignment_t),
569CSN_DESCR_END (IA_PacketAssignment_t)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100570#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300571
572/* <Packet Polling Request> */
573static const
574CSN_ChoiceElement_t PacketPollingID[] =
575{
Pau Espin Pedrol7cce8252020-01-24 16:41:14 +0100576 {1, 0, 0, M_TYPE(PacketPollingID_t, u.Global_TFI, Global_TFI_t)},
577 {2, 0x02, 0, M_UINT(PacketPollingID_t, u.TLLI, 32)},
578 {3, 0x06, 0, M_UINT(PacketPollingID_t, u.TQI, 16)},
579/*{3, 0x07 , 0, M_TYPE(PacketUplinkID_t, u.Packet_Request_Reference, Packet_Request_Reference_t)},*/
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300580};
581
582static const
583CSN_DESCR_BEGIN(PacketPollingID_t)
584 M_CHOICE (PacketPollingID_t, UnionType, PacketPollingID, ElementsOf(PacketPollingID)),
585CSN_DESCR_END (PacketPollingID_t)
586
587static const
588CSN_DESCR_BEGIN(Packet_Polling_Request_t)
589 M_UINT (Packet_Polling_Request_t, MESSAGE_TYPE, 6),
590 M_UINT (Packet_Polling_Request_t, PAGE_MODE, 2),
591 M_TYPE (Packet_Polling_Request_t, ID, PacketPollingID_t),
Anders Broman8ea3cbe2020-01-28 17:36:33 +0100592 M_UINT (Packet_Polling_Request_t, TYPE_OF_ACK, 1),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400593 M_PADDING_BITS(Packet_Polling_Request_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300594CSN_DESCR_END (Packet_Polling_Request_t)
595
596static const
597CSN_DESCR_BEGIN(MobileAllocation_t)
598 M_UINT_OFFSET(MobileAllocation_t, MA_BitLength, 6, 1),
599 M_VAR_BITMAP (MobileAllocation_t, MA_BITMAP, MA_BitLength, 0),
600CSN_DESCR_END (MobileAllocation_t)
601
602static const
603CSN_DESCR_BEGIN(ARFCN_index_list_t)
604 M_REC_ARRAY (ARFCN_index_list_t, ARFCN_INDEX, ElementsOf_ARFCN_INDEX, 6),
605CSN_DESCR_END (ARFCN_index_list_t)
606
607static const
608CSN_DESCR_BEGIN(GPRS_Mobile_Allocation_t)
609 M_UINT (GPRS_Mobile_Allocation_t, HSN, 6),
610 M_REC_ARRAY (GPRS_Mobile_Allocation_t, RFL_NUMBER, ElementsOf_RFL_NUMBER, 4),
611 M_UNION (GPRS_Mobile_Allocation_t, 2),
612 M_TYPE (GPRS_Mobile_Allocation_t, u.MA, MobileAllocation_t),
613 M_TYPE (GPRS_Mobile_Allocation_t, u.ARFCN_index_list, ARFCN_index_list_t),
614CSN_DESCR_END (GPRS_Mobile_Allocation_t)
615
616/*< SI 13 Rest Octets >*/
617static const
618CSN_DESCR_BEGIN (Extension_Bits_t)
619 M_UINT_OFFSET (Extension_Bits_t, extension_length, 6, 1),
620 M_LEFT_VAR_BMP(Extension_Bits_t, Extension_Info, extension_length, 0),
621CSN_DESCR_END (Extension_Bits_t)
622
623static const
624CSN_DESCR_BEGIN(GPRS_Cell_Options_t)
625 M_UINT (GPRS_Cell_Options_t, NMO, 2),
Pascal Quantin29248d62020-01-28 17:13:17 +0100626 M_UINT (GPRS_Cell_Options_t, T3168, 3),
627 M_UINT (GPRS_Cell_Options_t, T3192, 3),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300628 M_UINT (GPRS_Cell_Options_t, DRX_TIMER_MAX, 3),
Anders Broman8ea3cbe2020-01-28 17:36:33 +0100629 M_UINT (GPRS_Cell_Options_t, ACCESS_BURST_TYPE, 1),
630 M_UINT (GPRS_Cell_Options_t, CONTROL_ACK_TYPE, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300631 M_UINT (GPRS_Cell_Options_t, BS_CV_MAX, 4),
632
633 M_NEXT_EXIST (GPRS_Cell_Options_t, Exist_PAN, 3),
634 M_UINT (GPRS_Cell_Options_t, PAN_DEC, 3),
635 M_UINT (GPRS_Cell_Options_t, PAN_INC, 3),
636 M_UINT (GPRS_Cell_Options_t, PAN_MAX, 3),
637
638 M_NEXT_EXIST (GPRS_Cell_Options_t, Exist_Extension_Bits, 1),
639 M_TYPE (GPRS_Cell_Options_t, Extension_Bits, Extension_Bits_t),
640CSN_DESCR_END (GPRS_Cell_Options_t)
641
642static const
643CSN_DESCR_BEGIN(PBCCH_Not_present_t)
644 M_UINT (PBCCH_Not_present_t, RAC, 8),
Anders Broman8ea3cbe2020-01-28 17:36:33 +0100645 M_UINT (PBCCH_Not_present_t, SPGC_CCCH_SUP, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300646 M_UINT (PBCCH_Not_present_t, PRIORITY_ACCESS_THR, 3),
647 M_UINT (PBCCH_Not_present_t, NETWORK_CONTROL_ORDER, 2),
648 M_TYPE (PBCCH_Not_present_t, GPRS_Cell_Options, GPRS_Cell_Options_t),
649 M_TYPE (PBCCH_Not_present_t, GPRS_Power_Control_Parameters, GPRS_Power_Control_Parameters_t),
650CSN_DESCR_END (PBCCH_Not_present_t)
651
652static const
653CSN_ChoiceElement_t SI13_PBCCH_Description_Channel[] =
654{/* this one is used in SI13*/
Pau Espin Pedrol7cce8252020-01-24 16:41:14 +0100655 {2, 0x00, 0, M_NULL(PBCCH_Description_t, u.dummy, 0)},/*Default to BCCH carrier*/
656 {2, 0x01, 0, M_UINT(PBCCH_Description_t, u.ARFCN, 10)},
657 {1, 0x01, 0, M_UINT(PBCCH_Description_t, u.MAIO, 6)},
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300658};
659
660static const
661CSN_DESCR_BEGIN(PBCCH_Description_t)/*SI13*/
662 M_UINT (PBCCH_Description_t, Pb, 4),
663 M_UINT (PBCCH_Description_t, TSC, 3),
664 M_UINT (PBCCH_Description_t, TN, 3),
665
666 M_CHOICE (PBCCH_Description_t, UnionType, SI13_PBCCH_Description_Channel, ElementsOf(SI13_PBCCH_Description_Channel)),
667CSN_DESCR_END (PBCCH_Description_t)
668
669static const
670CSN_DESCR_BEGIN(PBCCH_present_t)
671 M_UINT (PBCCH_present_t, PSI1_REPEAT_PERIOD, 4),
672 M_TYPE (PBCCH_present_t, PBCCH_Description, PBCCH_Description_t),
673CSN_DESCR_END (PBCCH_present_t)
674
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100675#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300676static const
677CSN_DESCR_BEGIN(SI13_AdditionsR6)
678 M_NEXT_EXIST (SI13_AdditionsR6, Exist_LB_MS_TXPWR_MAX_CCH, 1),
679 M_UINT (SI13_AdditionsR6, LB_MS_TXPWR_MAX_CCH, 5),
680 M_UINT (SI13_AdditionsR6, SI2n_SUPPORT, 2),
681CSN_DESCR_END (SI13_AdditionsR6)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100682#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300683
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100684#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300685static const
686CSN_DESCR_BEGIN(SI13_AdditionsR4)
687 M_UINT (SI13_AdditionsR4, SI_STATUS_IND, 1),
688 M_NEXT_EXIST_OR_NULL_LH (SI13_AdditionsR4, Exist_AdditionsR6, 1),
689 M_TYPE (SI13_AdditionsR4, AdditionsR6, SI13_AdditionsR6),
690CSN_DESCR_END (SI13_AdditionsR4)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100691#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300692
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100693#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300694static const
695CSN_DESCR_BEGIN(SI13_AdditionR99)
696 M_UINT (SI13_AdditionR99, SGSNR, 1),
697 M_NEXT_EXIST_OR_NULL_LH (SI13_AdditionR99, Exist_AdditionsR4, 1),
698 M_TYPE (SI13_AdditionR99, AdditionsR4, SI13_AdditionsR4),
699CSN_DESCR_END (SI13_AdditionR99)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100700#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300701
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100702#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300703static const
704CSN_DESCR_BEGIN (SI_13_t)
705 M_THIS_EXIST_LH (SI_13_t),
706
707 M_UINT (SI_13_t, BCCH_CHANGE_MARK, 3),
708 M_UINT (SI_13_t, SI_CHANGE_FIELD, 4),
709
710 M_NEXT_EXIST (SI_13_t, Exist_MA, 2),
711 M_UINT (SI_13_t, SI13_CHANGE_MARK, 2),
712 M_TYPE (SI_13_t, GPRS_Mobile_Allocation, GPRS_Mobile_Allocation_t),
713
714 M_UNION (SI_13_t, 2),
715 M_TYPE (SI_13_t, u.PBCCH_Not_present, PBCCH_Not_present_t),
716 M_TYPE (SI_13_t, u.PBCCH_present, PBCCH_present_t),
717
718 M_NEXT_EXIST_OR_NULL_LH(SI_13_t, Exist_AdditionsR99, 1),
719 M_TYPE (SI_13_t, AdditionsR99, SI13_AdditionR99),
720CSN_DESCR_END (SI_13_t)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100721#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300722/************************************************************/
723/* TS 44.060 messages */
724/************************************************************/
725
726/*< Packet TBF Release message content >*/
727static const
728CSN_DESCR_BEGIN(Packet_TBF_Release_t)
729 M_UINT (Packet_TBF_Release_t, MESSAGE_TYPE, 6),
730 M_UINT (Packet_TBF_Release_t, PAGE_MODE, 2),
731 M_FIXED (Packet_TBF_Release_t, 1, 0x00),
732 M_TYPE (Packet_TBF_Release_t, Global_TFI, Global_TFI_t),
Anders Broman8ea3cbe2020-01-28 17:36:33 +0100733 M_UINT (Packet_TBF_Release_t, UPLINK_RELEASE, 1),
734 M_UINT (Packet_TBF_Release_t, DOWNLINK_RELEASE, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300735 M_UINT (Packet_TBF_Release_t, TBF_RELEASE_CAUSE, 4),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400736 M_PADDING_BITS(Packet_TBF_Release_t ),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300737CSN_DESCR_END (Packet_TBF_Release_t)
738
739/*< Packet Control Acknowledgement message content >*/
740
741static const
742CSN_DESCR_BEGIN (Packet_Control_Acknowledgement_AdditionsR6_t)
743 M_NEXT_EXIST (Packet_Control_Acknowledgement_AdditionsR6_t, Exist_CTRL_ACK_Extension, 1),
744 M_UINT (Packet_Control_Acknowledgement_AdditionsR6_t, CTRL_ACK_Extension, 9),
745CSN_DESCR_END (Packet_Control_Acknowledgement_AdditionsR6_t)
746
747static const
748CSN_DESCR_BEGIN (Packet_Control_Acknowledgement_AdditionsR5_t)
749 M_NEXT_EXIST (Packet_Control_Acknowledgement_AdditionsR5_t, Exist_TN_RRBP, 1),
750 M_UINT (Packet_Control_Acknowledgement_AdditionsR5_t, TN_RRBP, 3),
751 M_NEXT_EXIST (Packet_Control_Acknowledgement_AdditionsR5_t, Exist_G_RNTI_Extension, 1),
752 M_UINT (Packet_Control_Acknowledgement_AdditionsR5_t, G_RNTI_Extension, 4),
753
754 M_NEXT_EXIST_OR_NULL (Packet_Control_Acknowledgement_AdditionsR5_t, Exist_AdditionsR6, 1),
755 M_TYPE (Packet_Control_Acknowledgement_AdditionsR5_t, AdditionsR6, Packet_Control_Acknowledgement_AdditionsR6_t),
756CSN_DESCR_END (Packet_Control_Acknowledgement_AdditionsR5_t)
757
758static const
759CSN_DESCR_BEGIN (Packet_Control_Acknowledgement_t)
760 M_UINT (Packet_Control_Acknowledgement_t, PayloadType, 2),
761 M_UINT (Packet_Control_Acknowledgement_t, spare, 5),
762 M_BIT (Packet_Control_Acknowledgement_t, R),
763
764 M_UINT (Packet_Control_Acknowledgement_t, MESSAGE_TYPE, 6),
765 M_UINT (Packet_Control_Acknowledgement_t, TLLI, 32),
766 M_UINT (Packet_Control_Acknowledgement_t, CTRL_ACK, 2),
767 M_NEXT_EXIST_OR_NULL (Packet_Control_Acknowledgement_t, Exist_AdditionsR5, 1),
768 M_TYPE (Packet_Control_Acknowledgement_t, AdditionsR5, Packet_Control_Acknowledgement_AdditionsR5_t),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400769 M_PADDING_BITS (Packet_Control_Acknowledgement_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300770CSN_DESCR_END (Packet_Control_Acknowledgement_t)
771
772/*< Packet Downlink Dummy Control Block message content >*/
773static const
774CSN_DESCR_BEGIN(Packet_Downlink_Dummy_Control_Block_t)
775 M_UINT (Packet_Downlink_Dummy_Control_Block_t, MESSAGE_TYPE, 6),
776 M_UINT (Packet_Downlink_Dummy_Control_Block_t, PAGE_MODE, 2),
777
778 M_NEXT_EXIST (Packet_Downlink_Dummy_Control_Block_t, Exist_PERSISTENCE_LEVEL, 1),
779 M_UINT_ARRAY (Packet_Downlink_Dummy_Control_Block_t, PERSISTENCE_LEVEL, 4, 4),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400780 M_PADDING_BITS(Packet_Downlink_Dummy_Control_Block_t ),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300781CSN_DESCR_END (Packet_Downlink_Dummy_Control_Block_t)
782
783/*< Packet Uplink Dummy Control Block message content >*/
784static const
785CSN_DESCR_BEGIN(Packet_Uplink_Dummy_Control_Block_t)
786 M_UINT (Packet_Uplink_Dummy_Control_Block_t, PayloadType, 2),
787 M_UINT (Packet_Uplink_Dummy_Control_Block_t, spare, 5),
788 M_BIT (Packet_Uplink_Dummy_Control_Block_t, R),
789
790 M_UINT (Packet_Uplink_Dummy_Control_Block_t, MESSAGE_TYPE, 6),
791 M_UINT (Packet_Uplink_Dummy_Control_Block_t, TLLI, 32),
792/*M_FIXED (Packet_Uplink_Dummy_Control_Block_t, 1, 0),*/
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400793 M_PADDING_BITS(Packet_Uplink_Dummy_Control_Block_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300794CSN_DESCR_END (Packet_Uplink_Dummy_Control_Block_t)
795
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100796#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300797static const
798CSN_DESCR_BEGIN(Receive_N_PDU_Number_t)
799 M_UINT (Receive_N_PDU_Number_t, nsapi, 4),
800 M_UINT (Receive_N_PDU_Number_t, value, 8),
801CSN_DESCR_END (Receive_N_PDU_Number_t)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100802#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300803
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100804#if 0
Pau Espin Pedrol007056e2020-03-26 15:03:33 +0100805gint16 Receive_N_PDU_Number_list_Dissector(csnStream_t* ar, struct bitvec *vector, unsigned *readIndex, void* data)
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300806{
807 if (ar->direction == 0)
808 {
809 return csnStreamEncoder(ar, CSNDESCR(Receive_N_PDU_Number_t), vector, readIndex, data);
810 }
811 else
812 {
813 return csnStreamDecoder(ar, CSNDESCR(Receive_N_PDU_Number_t), vector, readIndex, data);
814 }
815}
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100816#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300817
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100818#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300819static const
820CSN_DESCR_BEGIN(Receive_N_PDU_Number_list_t)
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400821 M_SERIALIZE (Receive_N_PDU_Number_list_t, IEI, 7, Receive_N_PDU_Number_list_Dissector),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300822 M_VAR_TARRAY (Receive_N_PDU_Number_list_t, Receive_N_PDU_Number, Receive_N_PDU_Number_t, Count_Receive_N_PDU_Number),
823CSN_DESCR_END (Receive_N_PDU_Number_list_t)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100824#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300825
826/*< MS Radio Access capability IE >*/
827static const
828CSN_DESCR_BEGIN (DTM_EGPRS_t)
829 M_NEXT_EXIST (DTM_EGPRS_t, Exist_DTM_EGPRS_multislot_class, 1),
830 M_UINT (DTM_EGPRS_t, DTM_EGPRS_multislot_class, 2),
831CSN_DESCR_END (DTM_EGPRS_t)
832
833static const
834CSN_DESCR_BEGIN (DTM_EGPRS_HighMultislotClass_t)
835 M_NEXT_EXIST (DTM_EGPRS_HighMultislotClass_t, Exist_DTM_EGPRS_HighMultislotClass, 1),
836 M_UINT (DTM_EGPRS_HighMultislotClass_t, DTM_EGPRS_HighMultislotClass, 3),
837CSN_DESCR_END (DTM_EGPRS_HighMultislotClass_t)
838
839static const
Vincent Helfre1145fd22020-01-28 18:27:49 +0100840CSN_DESCR_BEGIN (DownlinkDualCarrierCapability_r7_t)
Pau Espin Pedrolabed2e32021-10-07 20:14:11 +0200841 M_UINT (DownlinkDualCarrierCapability_r7_t, MultislotCapabilityReductionForDL_DualCarrier, 3),
842 M_UINT (DownlinkDualCarrierCapability_r7_t, DL_DualCarrierForDTM, 1),
Vincent Helfre1145fd22020-01-28 18:27:49 +0100843CSN_DESCR_END (DownlinkDualCarrierCapability_r7_t)
844
845static const
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300846CSN_DESCR_BEGIN (Multislot_capability_t)
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400847 M_NEXT_EXIST_OR_NULL(Multislot_capability_t, Exist_HSCSD_multislot_class, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300848 M_UINT (Multislot_capability_t, HSCSD_multislot_class, 5),
849
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400850 M_NEXT_EXIST_OR_NULL(Multislot_capability_t, Exist_GPRS_multislot_class, 2),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300851 M_UINT (Multislot_capability_t, GPRS_multislot_class, 5),
852 M_UINT (Multislot_capability_t, GPRS_Extended_Dynamic_Allocation_Capability, 1),
853
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400854 M_NEXT_EXIST_OR_NULL(Multislot_capability_t, Exist_SM, 2),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300855 M_UINT (Multislot_capability_t, SMS_VALUE, 4),
856 M_UINT (Multislot_capability_t, SM_VALUE, 4),
857
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400858 M_NEXT_EXIST_OR_NULL(Multislot_capability_t, Exist_ECSD_multislot_class, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300859 M_UINT (Multislot_capability_t, ECSD_multislot_class, 5),
860
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400861 M_NEXT_EXIST_OR_NULL(Multislot_capability_t, Exist_EGPRS_multislot_class, 2),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300862 M_UINT (Multislot_capability_t, EGPRS_multislot_class, 5),
863 M_UINT (Multislot_capability_t, EGPRS_Extended_Dynamic_Allocation_Capability, 1),
864
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400865 M_NEXT_EXIST_OR_NULL(Multislot_capability_t, Exist_DTM_GPRS_multislot_class, 3),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300866 M_UINT (Multislot_capability_t, DTM_GPRS_multislot_class, 2),
867 M_UINT (Multislot_capability_t, Single_Slot_DTM, 1),
868 M_TYPE (Multislot_capability_t, DTM_EGPRS_Params, DTM_EGPRS_t),
869CSN_DESCR_END (Multislot_capability_t)
870
871static const
872CSN_DESCR_BEGIN (Content_t)
873 M_UINT (Content_t, RF_Power_Capability, 3),
874
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400875 M_NEXT_EXIST_OR_NULL(Content_t, Exist_A5_bits, 1),
876 M_UINT_OR_NULL (Content_t, A5_bits, 7),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300877
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400878 M_UINT_OR_NULL (Content_t, ES_IND, 1),
879 M_UINT_OR_NULL (Content_t, PS, 1),
880 M_UINT_OR_NULL (Content_t, VGCS, 1),
881 M_UINT_OR_NULL (Content_t, VBS, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300882
883 M_NEXT_EXIST_OR_NULL(Content_t, Exist_Multislot_capability, 1),
884 M_TYPE (Content_t, Multislot_capability, Multislot_capability_t),
885
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400886 M_NEXT_EXIST_OR_NULL(Content_t, Exist_Eight_PSK_Power_Capability, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300887 M_UINT (Content_t, Eight_PSK_Power_Capability, 2),
888
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400889 M_UINT_OR_NULL (Content_t, COMPACT_Interference_Measurement_Capability, 1),
890 M_UINT_OR_NULL (Content_t, Revision_Level_Indicator, 1),
891 M_UINT_OR_NULL (Content_t, UMTS_FDD_Radio_Access_Technology_Capability, 1),
892 M_UINT_OR_NULL (Content_t, UMTS_384_TDD_Radio_Access_Technology_Capability, 1),
893 M_UINT_OR_NULL (Content_t, CDMA2000_Radio_Access_Technology_Capability, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300894
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400895 M_UINT_OR_NULL (Content_t, UMTS_128_TDD_Radio_Access_Technology_Capability, 1),
896 M_UINT_OR_NULL (Content_t, GERAN_Feature_Package_1, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300897
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400898 M_NEXT_EXIST_OR_NULL(Content_t, Exist_Extended_DTM_multislot_class, 2),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300899 M_UINT (Content_t, Extended_DTM_GPRS_multislot_class, 2),
900 M_UINT (Content_t, Extended_DTM_EGPRS_multislot_class, 2),
901
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400902 M_UINT_OR_NULL (Content_t, Modulation_based_multislot_class_support, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300903
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400904 M_NEXT_EXIST_OR_NULL(Content_t, Exist_HighMultislotCapability, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300905 M_UINT (Content_t, HighMultislotCapability, 2),
906
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400907 M_NEXT_EXIST_OR_NULL(Content_t, Exist_GERAN_lu_ModeCapability, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300908 M_UINT (Content_t, GERAN_lu_ModeCapability, 4),
909
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400910 M_UINT_OR_NULL (Content_t, GMSK_MultislotPowerProfile, 2),
911 M_UINT_OR_NULL (Content_t, EightPSK_MultislotProfile, 2),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300912
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400913 M_UINT_OR_NULL (Content_t, MultipleTBF_Capability, 1),
914 M_UINT_OR_NULL (Content_t, DownlinkAdvancedReceiverPerformance, 2),
915 M_UINT_OR_NULL (Content_t, ExtendedRLC_MAC_ControlMessageSegmentionsCapability, 1),
916 M_UINT_OR_NULL (Content_t, DTM_EnhancementsCapability, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300917
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400918 M_NEXT_EXIST_OR_NULL(Content_t, Exist_DTM_GPRS_HighMultislotClass, 2),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300919 M_UINT (Content_t, DTM_GPRS_HighMultislotClass, 3),
920 M_TYPE (Content_t, DTM_EGPRS_HighMultislotClass, DTM_EGPRS_HighMultislotClass_t),
921
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400922 M_UINT_OR_NULL (Content_t, PS_HandoverCapability, 1),
Vincent Helfre1145fd22020-01-28 18:27:49 +0100923
924 /* additions in release 7 */
925 M_UINT_OR_NULL (Content_t, DTM_Handover_Capability, 1),
926 M_NEXT_EXIST_OR_NULL(Content_t, Exist_DownlinkDualCarrierCapability_r7, 1),
Pau Espin Pedrolebdc0d82021-10-19 16:48:16 +0200927 M_TYPE_OR_NULL (Content_t, DownlinkDualCarrierCapability_r7, DownlinkDualCarrierCapability_r7_t),
Vincent Helfre1145fd22020-01-28 18:27:49 +0100928
929 M_UINT_OR_NULL (Content_t, FlexibleTimeslotAssignment, 1),
930 M_UINT_OR_NULL (Content_t, GAN_PS_HandoverCapability, 1),
931 M_UINT_OR_NULL (Content_t, RLC_Non_persistentMode, 1),
932 M_UINT_OR_NULL (Content_t, ReducedLatencyCapability, 1),
933 M_UINT_OR_NULL (Content_t, UplinkEGPRS2, 2),
934 M_UINT_OR_NULL (Content_t, DownlinkEGPRS2, 2),
935
936 /* additions in release 8 */
937 M_UINT_OR_NULL (Content_t, EUTRA_FDD_Support, 1),
938 M_UINT_OR_NULL (Content_t, EUTRA_TDD_Support, 1),
939 M_UINT_OR_NULL (Content_t, GERAN_To_EUTRAN_supportInGERAN_PTM, 2),
940 M_UINT_OR_NULL (Content_t, PriorityBasedReselectionSupport, 1),
941
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300942CSN_DESCR_END (Content_t)
943
Pau Espin Pedrol007056e2020-03-26 15:03:33 +0100944gint16 Content_Dissector(csnStream_t* ar, struct bitvec *vector, unsigned *readIndex, void* data)
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300945{
946 if (ar->direction == 0)
947 {
948 return csnStreamEncoder(ar, CSNDESCR(Content_t), vector, readIndex, data);
949 }
950 else
951 {
952 return csnStreamDecoder(ar, CSNDESCR(Content_t), vector, readIndex, data);
953 }
954}
955
956static const
957CSN_DESCR_BEGIN (Additional_access_technologies_struct_t)
958 M_UINT (Additional_access_technologies_struct_t, Access_Technology_Type, 4),
959 M_UINT (Additional_access_technologies_struct_t, GMSK_Power_class, 3),
960 M_UINT (Additional_access_technologies_struct_t, Eight_PSK_Power_class, 2),
961CSN_DESCR_END (Additional_access_technologies_struct_t)
962
963static const
964CSN_DESCR_BEGIN (Additional_access_technologies_t)
Pau Espin Pedrol81b40cb2020-03-23 15:23:51 +0100965 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 +0300966CSN_DESCR_END (Additional_access_technologies_t)
967
Pau Espin Pedrol007056e2020-03-26 15:03:33 +0100968static gint16 Additional_access_technologies_Dissector(csnStream_t* ar, struct bitvec *vector, unsigned *readIndex, void* data)
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300969{
970 if (ar->direction == 0)
971 {
972 return csnStreamEncoder(ar, CSNDESCR(Additional_access_technologies_t), vector, readIndex, data);
973 }
974 else
975 {
976 return csnStreamDecoder(ar, CSNDESCR(Additional_access_technologies_t), vector, readIndex, data);
977 }
978}
979
980static const
981CSN_ChoiceElement_t MS_RA_capability_value_Choice[] =
982{
Pau Espin Pedrol7cce8252020-01-24 16:41:14 +0100983 {4, AccTech_GSMP, 0, M_SERIALIZE (MS_RA_capability_value_t, u.Content, 7, Content_Dissector)}, /* Long Form */
984 {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 +0100985 {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 +0100986 {4, AccTech_GSM1800, 0, M_SERIALIZE (MS_RA_capability_value_t, u.Content, 7, Content_Dissector)}, /* Long Form */
987 {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 +0100988 {4, AccTech_GSM450, 0, M_SERIALIZE (MS_RA_capability_value_t, u.Content, 7, Content_Dissector)}, /* Long Form */
989 {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 +0100990 {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 +0100991 {4, AccTech_GSM750, 0, M_SERIALIZE (MS_RA_capability_value_t, u.Content, 7, Content_Dissector)}, /* Long Form */
992 {4, AccTech_GSMT830, 0, M_SERIALIZE (MS_RA_capability_value_t, u.Content, 7, Content_Dissector)}, /* Long Form */
993 {4, AccTech_GSMT410, 0, M_SERIALIZE (MS_RA_capability_value_t, u.Content, 7, Content_Dissector)}, /* Long Form */
994 {4, AccTech_GSMT900, 0, M_SERIALIZE (MS_RA_capability_value_t, u.Content, 7, Content_Dissector)}, /* Long Form */
995 {4, AccTech_GSM710, 0, M_SERIALIZE (MS_RA_capability_value_t, u.Content, 7, Content_Dissector)}, /* Long Form */
996 {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 +0100997 {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 +0300998};
999
1000static const
1001CSN_DESCR_BEGIN(MS_RA_capability_value_t)
1002 M_CHOICE (MS_RA_capability_value_t, IndexOfAccTech, MS_RA_capability_value_Choice, ElementsOf(MS_RA_capability_value_Choice)),
1003CSN_DESCR_END (MS_RA_capability_value_t)
1004
1005static const
1006CSN_DESCR_BEGIN (MS_Radio_Access_capability_t)
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04001007 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 +01001008 M_PADDING_BITS(MS_Radio_Access_capability_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001009CSN_DESCR_END (MS_Radio_Access_capability_t)
1010
Pau Espin Pedrole50ce6e2020-03-23 18:49:16 +01001011/* TS44.060 section 12.30 "MS Radio Access Capability 2". Same as above but without spare bits */
1012static const
1013CSN_DESCR_BEGIN (MS_Radio_Access_capability2_t)
1014 M_REC_TARRAY_1(MS_Radio_Access_capability_t, MS_RA_capability_value, MS_RA_capability_value_t, Count_MS_RA_capability_value),
1015CSN_DESCR_END (MS_Radio_Access_capability2_t)
1016
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001017/*< MS Classmark 3 IE >*/
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01001018#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001019static const
1020CSN_DESCR_BEGIN(ARC_t)
1021 M_UINT (ARC_t, A5_Bits, 4),
1022 M_UINT (ARC_t, Arc2_Spare, 4),
1023 M_UINT (ARC_t, Arc1, 4),
1024CSN_DESCR_END (ARC_t)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01001025#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001026
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01001027#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001028static const
1029CSN_ChoiceElement_t MultibandChoice[] =
1030{
Pau Espin Pedrol7cce8252020-01-24 16:41:14 +01001031 {3, 0x00, 0, M_UINT(Multiband_t, u.A5_Bits, 4)},
1032 {3, 0x05, 0, M_TYPE(Multiband_t, u.ARC, ARC_t)},
1033 {3, 0x06, 0, M_TYPE(Multiband_t, u.ARC, ARC_t)},
1034 {3, 0x01, 0, M_TYPE(Multiband_t, u.ARC, ARC_t)},
1035 {3, 0x02, 0, M_TYPE(Multiband_t, u.ARC, ARC_t)},
1036 {3, 0x04, 0, M_TYPE(Multiband_t, u.ARC, ARC_t)},
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001037};
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01001038#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001039
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01001040#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001041static const
1042CSN_DESCR_BEGIN(Multiband_t)
1043 M_CHOICE (Multiband_t, Multiband, MultibandChoice, ElementsOf(MultibandChoice)),
1044CSN_DESCR_END (Multiband_t)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01001045#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001046
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01001047#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001048static const
1049CSN_DESCR_BEGIN(EDGE_RF_Pwr_t)
1050 M_NEXT_EXIST (EDGE_RF_Pwr_t, ExistEDGE_RF_PwrCap1, 1),
1051 M_UINT (EDGE_RF_Pwr_t, EDGE_RF_PwrCap1, 2),
1052
1053 M_NEXT_EXIST (EDGE_RF_Pwr_t, ExistEDGE_RF_PwrCap2, 1),
1054 M_UINT (EDGE_RF_Pwr_t, EDGE_RF_PwrCap2, 2),
1055CSN_DESCR_END (EDGE_RF_Pwr_t)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01001056#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001057
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01001058#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001059static const
1060CSN_DESCR_BEGIN(MS_Class3_Unpacked_t)
1061 M_UINT (MS_Class3_Unpacked_t, Spare1, 1),
1062 M_TYPE (MS_Class3_Unpacked_t, Multiband, Multiband_t),
1063
1064 M_NEXT_EXIST (MS_Class3_Unpacked_t, Exist_R_Support, 1),
1065 M_UINT (MS_Class3_Unpacked_t, R_GSM_Arc, 3),
1066
1067 M_NEXT_EXIST (MS_Class3_Unpacked_t, Exist_MultiSlotCapability, 1),
1068 M_UINT (MS_Class3_Unpacked_t, MultiSlotClass, 5),
1069
1070 M_UINT (MS_Class3_Unpacked_t, UCS2, 1),
1071 M_UINT (MS_Class3_Unpacked_t, ExtendedMeasurementCapability, 1),
1072
1073 M_NEXT_EXIST (MS_Class3_Unpacked_t, Exist_MS_MeasurementCapability, 2),
1074 M_UINT (MS_Class3_Unpacked_t, SMS_VALUE, 4),
1075 M_UINT (MS_Class3_Unpacked_t, SM_VALUE, 4),
1076
1077 M_NEXT_EXIST (MS_Class3_Unpacked_t, Exist_MS_PositioningMethodCapability, 1),
1078 M_UINT (MS_Class3_Unpacked_t, MS_PositioningMethod, 5),
1079
1080 M_NEXT_EXIST (MS_Class3_Unpacked_t, Exist_EDGE_MultiSlotCapability, 1),
1081 M_UINT (MS_Class3_Unpacked_t, EDGE_MultiSlotClass, 5),
1082
1083 M_NEXT_EXIST (MS_Class3_Unpacked_t, Exist_EDGE_Struct, 2),
1084 M_UINT (MS_Class3_Unpacked_t, ModulationCapability, 1),
1085 M_TYPE (MS_Class3_Unpacked_t, EDGE_RF_PwrCaps, EDGE_RF_Pwr_t),
1086
1087 M_NEXT_EXIST (MS_Class3_Unpacked_t, Exist_GSM400_Info, 2),
1088 M_UINT (MS_Class3_Unpacked_t, GSM400_Bands, 2),
1089 M_UINT (MS_Class3_Unpacked_t, GSM400_Arc, 4),
1090
1091 M_NEXT_EXIST (MS_Class3_Unpacked_t, Exist_GSM850_Arc, 1),
1092 M_UINT (MS_Class3_Unpacked_t, GSM850_Arc, 4),
1093
1094 M_NEXT_EXIST (MS_Class3_Unpacked_t, Exist_PCS1900_Arc, 1),
1095 M_UINT (MS_Class3_Unpacked_t, PCS1900_Arc, 4),
1096
1097 M_UINT (MS_Class3_Unpacked_t, UMTS_FDD_Radio_Access_Technology_Capability, 1),
1098 M_UINT (MS_Class3_Unpacked_t, UMTS_384_TDD_Radio_Access_Technology_Capability, 1),
1099 M_UINT (MS_Class3_Unpacked_t, CDMA2000_Radio_Access_Technology_Capability, 1),
1100
1101 M_NEXT_EXIST (MS_Class3_Unpacked_t, Exist_DTM_GPRS_multislot_class, 3),
1102 M_UINT (MS_Class3_Unpacked_t, DTM_GPRS_multislot_class, 2),
1103 M_UINT (MS_Class3_Unpacked_t, Single_Slot_DTM, 1),
1104 M_TYPE (MS_Class3_Unpacked_t, DTM_EGPRS_Params, DTM_EGPRS_t),
1105
1106 M_NEXT_EXIST (MS_Class3_Unpacked_t, Exist_SingleBandSupport, 1),
1107 M_UINT (MS_Class3_Unpacked_t, GSM_Band, 4),
1108
1109 M_NEXT_EXIST (MS_Class3_Unpacked_t, Exist_GSM_700_Associated_Radio_Capability, 1),
1110 M_UINT (MS_Class3_Unpacked_t, GSM_700_Associated_Radio_Capability, 4),
1111
1112 M_UINT (MS_Class3_Unpacked_t, UMTS_128_TDD_Radio_Access_Technology_Capability, 1),
1113 M_UINT (MS_Class3_Unpacked_t, GERAN_Feature_Package_1, 1),
1114
1115 M_NEXT_EXIST (MS_Class3_Unpacked_t, Exist_Extended_DTM_multislot_class, 2),
1116 M_UINT (MS_Class3_Unpacked_t, Extended_DTM_GPRS_multislot_class, 2),
1117 M_UINT (MS_Class3_Unpacked_t, Extended_DTM_EGPRS_multislot_class, 2),
1118
1119 M_NEXT_EXIST (MS_Class3_Unpacked_t, Exist_HighMultislotCapability, 1),
1120 M_UINT (MS_Class3_Unpacked_t, HighMultislotCapability, 2),
1121
1122 M_NEXT_EXIST (MS_Class3_Unpacked_t, Exist_GERAN_lu_ModeCapability, 1),
1123 M_UINT (MS_Class3_Unpacked_t, GERAN_lu_ModeCapability, 4),
1124
1125 M_UINT (MS_Class3_Unpacked_t, GERAN_FeaturePackage_2, 1),
1126
1127 M_UINT (MS_Class3_Unpacked_t, GMSK_MultislotPowerProfile, 2),
1128 M_UINT (MS_Class3_Unpacked_t, EightPSK_MultislotProfile, 2),
1129
1130 M_NEXT_EXIST (MS_Class3_Unpacked_t, Exist_TGSM_400_Bands, 2),
1131 M_UINT (MS_Class3_Unpacked_t, TGSM_400_BandsSupported, 2),
1132 M_UINT (MS_Class3_Unpacked_t, TGSM_400_AssociatedRadioCapability, 4),
1133
1134 M_NEXT_EXIST (MS_Class3_Unpacked_t, Exist_TGSM_900_AssociatedRadioCapability, 1),
1135 M_UINT (MS_Class3_Unpacked_t, TGSM_900_AssociatedRadioCapability, 4),
1136
1137 M_UINT (MS_Class3_Unpacked_t, DownlinkAdvancedReceiverPerformance, 2),
1138 M_UINT (MS_Class3_Unpacked_t, DTM_EnhancementsCapability, 1),
1139
1140 M_NEXT_EXIST (MS_Class3_Unpacked_t, Exist_DTM_GPRS_HighMultislotClass, 3),
1141 M_UINT (MS_Class3_Unpacked_t, DTM_GPRS_HighMultislotClass, 3),
1142 M_UINT (MS_Class3_Unpacked_t, OffsetRequired, 1),
1143 M_TYPE (MS_Class3_Unpacked_t, DTM_EGPRS_HighMultislotClass, DTM_EGPRS_HighMultislotClass_t),
1144
1145 M_UINT (MS_Class3_Unpacked_t, RepeatedSACCH_Capability, 1),
1146 M_UINT (MS_Class3_Unpacked_t, Spare2, 1),
1147CSN_DESCR_END (MS_Class3_Unpacked_t)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01001148#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001149
1150static const
1151CSN_DESCR_BEGIN(Channel_Request_Description_t)
1152 M_UINT (Channel_Request_Description_t, PEAK_THROUGHPUT_CLASS, 4),
1153 M_UINT (Channel_Request_Description_t, RADIO_PRIORITY, 2),
Anders Broman8ea3cbe2020-01-28 17:36:33 +01001154 M_UINT (Channel_Request_Description_t, RLC_MODE, 1),
1155 M_UINT (Channel_Request_Description_t, LLC_PDU_TYPE, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001156 M_UINT (Channel_Request_Description_t, RLC_OCTET_COUNT, 16),
1157CSN_DESCR_END (Channel_Request_Description_t)
1158
1159/* < Packet Resource Request message content > */
1160static const
1161CSN_ChoiceElement_t PacketResourceRequestID[] =
1162{
Pau Espin Pedrol7cce8252020-01-24 16:41:14 +01001163 {1, 0, 0, M_TYPE(PacketResourceRequestID_t, u.Global_TFI, Global_TFI_t)},
1164 {1, 0x01, 0, M_UINT(PacketResourceRequestID_t, u.TLLI, 32)},
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001165};
1166
1167static const
1168CSN_DESCR_BEGIN(PacketResourceRequestID_t)
1169 M_CHOICE (PacketResourceRequestID_t, UnionType, PacketResourceRequestID, ElementsOf(PacketResourceRequestID)),
1170CSN_DESCR_END (PacketResourceRequestID_t)
1171
1172static const
1173CSN_DESCR_BEGIN(BEP_MeasurementReport_t)
1174 M_NEXT_EXIST (BEP_MeasurementReport_t, Exist, 3),
1175 M_UNION (BEP_MeasurementReport_t, 2),
1176 M_UINT (BEP_MeasurementReport_t, u.MEAN_BEP_GMSK, 4),
1177 M_UINT (BEP_MeasurementReport_t, u.MEAN_BEP_8PSK, 4),
1178CSN_DESCR_END (BEP_MeasurementReport_t)
1179
1180static const
1181CSN_DESCR_BEGIN(InterferenceMeasurementReport_t)
1182 M_NEXT_EXIST (InterferenceMeasurementReport_t, Exist, 1),
1183 M_UINT (InterferenceMeasurementReport_t, I_LEVEL, 4),
1184CSN_DESCR_END (InterferenceMeasurementReport_t)
1185
1186static const
1187CSN_DESCR_BEGIN(EGPRS_TimeslotLinkQualityMeasurements_t)
1188 M_NEXT_EXIST (EGPRS_TimeslotLinkQualityMeasurements_t, Exist_BEP_MEASUREMENTS, 1),
1189 M_TYPE_ARRAY (EGPRS_TimeslotLinkQualityMeasurements_t, BEP_MEASUREMENTS, BEP_MeasurementReport_t, 8),
1190
1191 M_NEXT_EXIST (EGPRS_TimeslotLinkQualityMeasurements_t, Exist_INTERFERENCE_MEASUREMENTS, 1),
1192 M_TYPE_ARRAY (EGPRS_TimeslotLinkQualityMeasurements_t, INTERFERENCE_MEASUREMENTS, InterferenceMeasurementReport_t, 8),
1193CSN_DESCR_END (EGPRS_TimeslotLinkQualityMeasurements_t)
1194
1195static const
1196CSN_DESCR_BEGIN(EGPRS_BEP_LinkQualityMeasurements_t)
1197 M_NEXT_EXIST (EGPRS_BEP_LinkQualityMeasurements_t, Exist_MEAN_CV_BEP_GMSK, 2),
1198 M_UINT (EGPRS_BEP_LinkQualityMeasurements_t, MEAN_BEP_GMSK, 5),
1199 M_UINT (EGPRS_BEP_LinkQualityMeasurements_t, CV_BEP_GMSK, 3),
1200
1201 M_NEXT_EXIST (EGPRS_BEP_LinkQualityMeasurements_t, Exist_MEAN_CV_BEP_8PSK, 2),
1202 M_UINT (EGPRS_BEP_LinkQualityMeasurements_t, MEAN_BEP_8PSK, 5),
1203 M_UINT (EGPRS_BEP_LinkQualityMeasurements_t, CV_BEP_8PSK, 3),
1204CSN_DESCR_END (EGPRS_BEP_LinkQualityMeasurements_t)
1205
1206static const
AndersBroman2d075be2020-01-28 19:01:50 +01001207CSN_DESCR_BEGIN(IU_Mode_Channel_Request_Desk_t)
1208
1209 M_UINT (IU_Mode_Channel_Request_Desk_t, RB_ID, 5),
1210 M_UINT (IU_Mode_Channel_Request_Desk_t, RADIO_PRIORITY, 2),
1211
1212 M_NEXT_EXIST (IU_Mode_Channel_Request_Desk_t, Exist_RLC_BLOCK_COUNT, 1),
1213 M_UINT (IU_Mode_Channel_Request_Desk_t, RLC_BLOCK_COUNT, 8),
1214
Pascal Quantinfa5f91c2020-01-28 19:11:37 +01001215 /* Don't use M_REC_TARRAY as we don't support multiple TBFs
1216 M_NEXT_EXIST (IU_Mode_Channel_Request_Desk_t, Exist_Iu_Mode_ChRequestDesk, 1),
1217 M_TYPE (IU_Mode_Channel_Request_Desk1, IU_Mode_Channel_Request_Desk_t),*/
1218 M_UINT (IU_Mode_Channel_Request_Desk_t, Exist_Iu_Mode_ChRequestDesk, 1),
AndersBroman2d075be2020-01-28 19:01:50 +01001219
1220CSN_DESCR_END (IU_Mode_Channel_Request_Desk_t)
1221
1222static const
1223CSN_DESCR_BEGIN(IU_Mode_Channel_Request_Desk_RNTI_t)
1224
1225 M_NEXT_EXIST (IU_Mode_Channel_Request_Desk_RNTI_t, Exist_G_RNTI_Extension, 1),
1226 M_UINT (IU_Mode_Channel_Request_Desk_RNTI_t, G_RNTI_Extension, 4),
1227
1228 M_TYPE (IU_Mode_Channel_Request_Desk_RNTI_t, IU_Mode_Channel_Request_Desk, IU_Mode_Channel_Request_Desk_t),
1229
1230CSN_DESCR_END (IU_Mode_Channel_Request_Desk_RNTI_t)
1231
1232
1233static const
1234CSN_DESCR_BEGIN(Ext_Channel_Request_desc_t)
1235
1236 M_UINT (Ext_Channel_Request_desc_t, PFI, 7),
1237 M_UINT (Ext_Channel_Request_desc_t, RADIO_PRIORITY, 2),
1238 M_UINT (Ext_Channel_Request_desc_t, RLC_Mode, 1),
1239
1240 M_NEXT_EXIST (Ext_Channel_Request_desc_t, Exist_LCC_PDU, 1),
1241 M_UINT (Ext_Channel_Request_desc_t, LCC_PDU, 1),
1242
Pascal Quantinfb656822020-01-28 19:13:20 +01001243 /* Don't use M_REC_TARRAY as we don't support multiple TBFs
1244 M_NEXT_EXIST (Ext_Channel_Request_desc_t, Exist_Ext_Channel_Request_desc, 1),
1245 M_TYPE (Ext_Channel_Request_desc_t, Ext_Channel_Request_desc, Ext_Channel_Request_desc_t),*/
1246 M_UINT (Ext_Channel_Request_desc_t, Exist_Ext_Channel_Request_desc, 1),
AndersBroman2d075be2020-01-28 19:01:50 +01001247
1248CSN_DESCR_END (Ext_Channel_Request_desc_t)
1249
1250static const
1251CSN_DESCR_BEGIN(EGPRS_BEP_LinkQualityMeasurements_type2_t)
1252
1253 M_NEXT_EXIST (EGPRS_BEP_LinkQualityMeasurements_type2_t, Exist_GMSK_MEAN_BEP, 1),
1254 M_UINT (EGPRS_BEP_LinkQualityMeasurements_type2_t, GMSK_MEAN_BEP, 5),
1255 M_UINT (EGPRS_BEP_LinkQualityMeasurements_type2_t, GMSK_CV_BEP, 3),
1256
1257 M_NEXT_EXIST (EGPRS_BEP_LinkQualityMeasurements_type2_t, Exist_8PSK_MEAN_BEP, 1),
1258 M_UINT (EGPRS_BEP_LinkQualityMeasurements_type2_t, p8PSK_MEAN_BEP, 5),
1259 M_UINT (EGPRS_BEP_LinkQualityMeasurements_type2_t, p8PSK_CV_BEP, 3),
1260
1261 M_NEXT_EXIST (EGPRS_BEP_LinkQualityMeasurements_type2_t, Exist_QPSK_MEAN_BEP, 1),
1262 M_UINT (EGPRS_BEP_LinkQualityMeasurements_type2_t, QPSK_MEAN_BEP, 5),
1263 M_UINT (EGPRS_BEP_LinkQualityMeasurements_type2_t, QPSK_CV_BEP, 3),
1264
1265 M_NEXT_EXIST (EGPRS_BEP_LinkQualityMeasurements_type2_t, Exist_16QAM_NSR_MEAN_BEP, 1),
1266 M_UINT (EGPRS_BEP_LinkQualityMeasurements_type2_t, p16QAM_NSR_MEAN_BEP, 5),
1267 M_UINT (EGPRS_BEP_LinkQualityMeasurements_type2_t, p16QAM_NSR_CV_BEP, 3),
1268
1269 M_NEXT_EXIST (EGPRS_BEP_LinkQualityMeasurements_type2_t, Exist_32QAM_NSR_MEAN_BEP, 1),
1270 M_UINT (EGPRS_BEP_LinkQualityMeasurements_type2_t, p32QAM_NSR_MEAN_BEP, 5),
1271 M_UINT (EGPRS_BEP_LinkQualityMeasurements_type2_t, p32QAM_NSR_CV_BEP, 3),
1272
1273 M_NEXT_EXIST (EGPRS_BEP_LinkQualityMeasurements_type2_t, Exist_16QAM_HSR_MEAN_BEP, 1),
1274 M_UINT (EGPRS_BEP_LinkQualityMeasurements_type2_t, p16QAM_HSR_MEAN_BEP, 5),
1275 M_UINT (EGPRS_BEP_LinkQualityMeasurements_type2_t, p16QAM_HSR_CV_BEP, 3),
1276
1277 M_NEXT_EXIST (EGPRS_BEP_LinkQualityMeasurements_type2_t, Exist_32QAM_HSR_MEAN_BEP, 1),
1278 M_UINT (EGPRS_BEP_LinkQualityMeasurements_type2_t, p32QAM_HSR_MEAN_BEP, 5),
1279 M_UINT (EGPRS_BEP_LinkQualityMeasurements_type2_t, p32QAM_HSR_CV_BEP, 3),
1280
1281CSN_DESCR_END (EGPRS_BEP_LinkQualityMeasurements_type2_t)
1282
1283static const
1284CSN_DESCR_BEGIN(BEP_MeasurementReport_type2_t)
1285 M_NEXT_EXIST (BEP_MeasurementReport_type2_t, Exist, 1),
1286 M_UINT (BEP_MeasurementReport_type2_t, REPORTED_MODULATION, 2),
1287 M_UINT (BEP_MeasurementReport_type2_t, MEAN_BEP_TN, 4),
1288CSN_DESCR_END (BEP_MeasurementReport_type2_t)
1289
1290static const
1291CSN_DESCR_BEGIN(InterferenceMeasurementReport_type2_t)
1292 M_NEXT_EXIST (InterferenceMeasurementReport_type2_t, Exist, 1),
1293 M_UINT (InterferenceMeasurementReport_type2_t, I_LEVEL, 4),
1294CSN_DESCR_END (InterferenceMeasurementReport_type2_t)
1295static const
1296CSN_DESCR_BEGIN(EGPRS_TimeslotLinkQualityMeasurements_type2_t)
1297 M_NEXT_EXIST (EGPRS_TimeslotLinkQualityMeasurements_type2_t, Exist_BEP_MEASUREMENTS, 1),
1298 M_TYPE_ARRAY (EGPRS_TimeslotLinkQualityMeasurements_type2_t, BEP_MEASUREMENTS, BEP_MeasurementReport_type2_t, 8),
1299
1300 M_NEXT_EXIST (EGPRS_TimeslotLinkQualityMeasurements_type2_t, Exist_INTERFERENCE_MEASUREMENTS, 1),
1301 M_TYPE_ARRAY (EGPRS_TimeslotLinkQualityMeasurements_type2_t, INTERFERENCE_MEASUREMENTS, InterferenceMeasurementReport_type2_t, 8),
1302CSN_DESCR_END (EGPRS_TimeslotLinkQualityMeasurements_type2_t)
1303
1304static const
1305CSN_DESCR_BEGIN(PRR_AdditionsR12_t)
1306
1307 M_NEXT_EXIST (PRR_AdditionsR12_t, Exist_Downlink_eTFI, 1),
1308 M_UINT (PRR_AdditionsR12_t, DOWNLINK_ETFI, 3),
1309
1310CSN_DESCR_END (PRR_AdditionsR12_t)
1311
1312static const
1313CSN_DESCR_BEGIN(PRR_AdditionsR10_t)
1314 M_UINT (PRR_AdditionsR10_t, LOW_ACCESS_PRIORITY_SIGNALLING, 1),
1315
1316 M_NEXT_EXIST_OR_NULL(PRR_AdditionsR10_t, Exist_AdditionsR12, 1),
1317 M_TYPE (PRR_AdditionsR10_t, AdditionsR12, PRR_AdditionsR12_t),
1318
1319CSN_DESCR_END (PRR_AdditionsR10_t)
1320
1321static const
1322CSN_DESCR_BEGIN(PRR_AdditionsR7_t)
1323 M_UINT (PRR_AdditionsR7_t, EARLY_TBF_ESTABLISHMENT, 1),
1324
1325 M_NEXT_EXIST (PRR_AdditionsR7_t, Exist_EGPRS_BEP_LinkQualityMeasurements_type2, 1),
1326 M_TYPE (PRR_AdditionsR7_t, EGPRS_BEP_LinkQualityMeasurements_type2, EGPRS_BEP_LinkQualityMeasurements_type2_t),
1327
1328 M_NEXT_EXIST (PRR_AdditionsR7_t, Exist_EGPRS_TimeslotLinkQualityMeasurements_type2, 1),
1329 M_TYPE (PRR_AdditionsR7_t, EGPRS_TimeslotLinkQualityMeasurements_type2, EGPRS_TimeslotLinkQualityMeasurements_type2_t),
1330
1331 M_NEXT_EXIST_OR_NULL(PRR_AdditionsR7_t, Exist_AdditionsR10, 1),
1332 M_TYPE (PRR_AdditionsR7_t, AdditionsR10, PRR_AdditionsR10_t),
1333
1334CSN_DESCR_END (PRR_AdditionsR7_t)
1335
1336static const
1337CSN_DESCR_BEGIN(PRR_AdditionsR6_t)
1338 M_NEXT_EXIST (PRR_AdditionsR6_t, Exist_Ext_Channel_Request_desc, 1),
1339 M_TYPE (PRR_AdditionsR6_t, Ext_Channel_Request_desc, Ext_Channel_Request_desc_t),
1340
1341 M_NEXT_EXIST_OR_NULL(PRR_AdditionsR6_t, Exist_AdditionsR7, 1),
1342 M_TYPE (PRR_AdditionsR6_t, AdditionsR7, PRR_AdditionsR7_t),
1343
1344CSN_DESCR_END (PRR_AdditionsR6_t)
1345
1346static const
1347CSN_DESCR_BEGIN(PRR_AdditionsR5_t)
1348 M_NEXT_EXIST (PRR_AdditionsR5_t, Exist_Iu_Mode_ChRequestDesk, 1),
1349 M_TYPE (PRR_AdditionsR5_t, IU_Mode_Channel_Request_Desk_RNTI, IU_Mode_Channel_Request_Desk_RNTI_t),
1350
1351 M_NEXT_EXIST (PRR_AdditionsR5_t, Exist_HFN_LSB, 1),
1352 M_UINT (PRR_AdditionsR5_t, HFN_LSb, 7),
1353
1354 M_NEXT_EXIST_OR_NULL(PRR_AdditionsR5_t, Exist_AdditionsR6, 1),
1355 M_TYPE (PRR_AdditionsR5_t, AdditionsR6, PRR_AdditionsR6_t),
1356CSN_DESCR_END (PRR_AdditionsR5_t)
1357
1358static const
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001359CSN_DESCR_BEGIN(PRR_AdditionsR99_t)
1360 M_NEXT_EXIST (PRR_AdditionsR99_t, Exist_EGPRS_BEP_LinkQualityMeasurements, 1),
1361 M_TYPE (PRR_AdditionsR99_t, EGPRS_BEP_LinkQualityMeasurements, EGPRS_BEP_LinkQualityMeasurements_t),
1362
1363 M_NEXT_EXIST (PRR_AdditionsR99_t, Exist_EGPRS_TimeslotLinkQualityMeasurements, 1),
1364 M_TYPE (PRR_AdditionsR99_t, EGPRS_TimeslotLinkQualityMeasurements, EGPRS_TimeslotLinkQualityMeasurements_t),
1365
1366 M_NEXT_EXIST (PRR_AdditionsR99_t, Exist_PFI, 1),
1367 M_UINT (PRR_AdditionsR99_t, PFI, 7),
1368
1369 M_UINT (PRR_AdditionsR99_t, MS_RAC_AdditionalInformationAvailable, 1),
1370 M_UINT (PRR_AdditionsR99_t, RetransmissionOfPRR, 1),
AndersBroman2d075be2020-01-28 19:01:50 +01001371
1372 M_NEXT_EXIST_OR_NULL(PRR_AdditionsR99_t, Exist_AdditionsR5, 1),
1373 M_TYPE (PRR_AdditionsR99_t, AdditionsR5, PRR_AdditionsR5_t),
1374
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001375CSN_DESCR_END (PRR_AdditionsR99_t)
1376
1377static const
1378CSN_DESCR_BEGIN (Packet_Resource_Request_t)
1379 /* Mac header */
1380 M_UINT (Packet_Resource_Request_t, PayloadType, 2),
1381 M_UINT (Packet_Resource_Request_t, spare, 5),
1382 M_UINT (Packet_Resource_Request_t, R, 1),
1383 M_UINT (Packet_Resource_Request_t, MESSAGE_TYPE, 6),
1384 /* Mac header */
1385
1386 M_NEXT_EXIST (Packet_Resource_Request_t, Exist_ACCESS_TYPE, 1),
1387 M_UINT (Packet_Resource_Request_t, ACCESS_TYPE, 2),
1388
1389 M_TYPE (Packet_Resource_Request_t, ID, PacketResourceRequestID_t),
1390
Pau Espin Pedrole50ce6e2020-03-23 18:49:16 +01001391 M_NEXT_EXIST (Packet_Resource_Request_t, Exist_MS_Radio_Access_capability2, 1),
1392 M_TYPE (Packet_Resource_Request_t, MS_Radio_Access_capability2, MS_Radio_Access_capability2_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001393
1394 M_TYPE (Packet_Resource_Request_t, Channel_Request_Description, Channel_Request_Description_t),
1395
1396 M_NEXT_EXIST (Packet_Resource_Request_t, Exist_CHANGE_MARK, 1),
1397 M_UINT (Packet_Resource_Request_t, CHANGE_MARK, 2),
1398
1399 M_UINT (Packet_Resource_Request_t, C_VALUE, 6),
1400
1401 M_NEXT_EXIST (Packet_Resource_Request_t, Exist_SIGN_VAR, 1),
1402 M_UINT (Packet_Resource_Request_t, SIGN_VAR, 6),
1403
Pau Espin Pedrol0daf9132020-02-23 16:11:28 +07001404 M_TYPE_ARRAY (Packet_Resource_Request_t, I_LEVEL_TN, InterferenceMeasurementReport_t, 8),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001405
1406 M_NEXT_EXIST_OR_NULL(Packet_Resource_Request_t, Exist_AdditionsR99, 1),
1407 M_TYPE (Packet_Resource_Request_t, AdditionsR99, PRR_AdditionsR99_t),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04001408 M_PADDING_BITS (Packet_Resource_Request_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001409CSN_DESCR_END (Packet_Resource_Request_t)
1410
1411/*< Packet Mobile TBF Status message content > */
1412static const
1413CSN_DESCR_BEGIN(Packet_Mobile_TBF_Status_t)
1414 /* Mac header */
1415 M_UINT (Packet_Mobile_TBF_Status_t, PayloadType, 2),
1416 M_UINT (Packet_Mobile_TBF_Status_t, spare, 5),
1417 M_UINT (Packet_Mobile_TBF_Status_t, R, 1),
1418 M_UINT (Packet_Mobile_TBF_Status_t, MESSAGE_TYPE, 6),
1419 /* Mac header */
1420
1421 M_TYPE (Packet_Mobile_TBF_Status_t, Global_TFI, Global_TFI_t),
1422 M_UINT (Packet_Mobile_TBF_Status_t, TBF_CAUSE, 3),
1423
1424 M_NEXT_EXIST (Packet_Mobile_TBF_Status_t, Exist_STATUS_MESSAGE_TYPE, 1),
1425 M_UINT (Packet_Mobile_TBF_Status_t, STATUS_MESSAGE_TYPE, 6),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04001426 M_PADDING_BITS(Packet_Mobile_TBF_Status_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001427CSN_DESCR_END (Packet_Mobile_TBF_Status_t)
1428
1429/*< Packet PSI Status message content > */
1430static const
1431CSN_DESCR_BEGIN(PSI_Message_t)
1432 M_UINT (PSI_Message_t, PSI_MESSAGE_TYPE, 6),
1433 M_UINT (PSI_Message_t, PSIX_CHANGE_MARK, 2),
1434 M_NEXT_EXIST (PSI_Message_t, Exist_PSIX_COUNT_and_Instance_Bitmap, 2),
1435 M_FIXED (PSI_Message_t, 4, 0), /* Placeholder for PSIX_COUNT (4 bits) */
1436 M_FIXED (PSI_Message_t, 1, 0), /* Placeholder for Instance bitmap (1 bit) */
1437CSN_DESCR_END (PSI_Message_t)
1438
1439static const
1440CSN_DESCR_BEGIN(PSI_Message_List_t)
Pau Espin Pedrol81b40cb2020-03-23 15:23:51 +01001441 M_REC_TARRAY (PSI_Message_List_t, PSI_Message, PSI_Message_t, Count_PSI_Message),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001442 M_FIXED (PSI_Message_List_t, 1, 0x00),
1443 M_UINT (PSI_Message_List_t, ADDITIONAL_MSG_TYPE, 1),
1444CSN_DESCR_END (PSI_Message_List_t)
1445
1446static const
1447CSN_DESCR_BEGIN(Unknown_PSI_Message_List_t)
1448 M_FIXED (Unknown_PSI_Message_List_t, 1, 0x00),
1449 M_UINT (Unknown_PSI_Message_List_t, ADDITIONAL_MSG_TYPE, 1),
1450CSN_DESCR_END (Unknown_PSI_Message_List_t)
1451
1452static const
1453CSN_DESCR_BEGIN(Packet_PSI_Status_t)
1454 /* Mac header */
1455 M_UINT (Packet_PSI_Status_t, PayloadType, 2),
1456 M_UINT (Packet_PSI_Status_t, spare, 5),
1457 M_UINT (Packet_PSI_Status_t, R, 1),
1458 M_UINT (Packet_PSI_Status_t, MESSAGE_TYPE, 6),
1459 /* Mac header */
1460
1461 M_TYPE (Packet_PSI_Status_t, Global_TFI, Global_TFI_t),
1462 M_UINT (Packet_PSI_Status_t, PBCCH_CHANGE_MARK, 3),
1463 M_TYPE (Packet_PSI_Status_t, PSI_Message_List, PSI_Message_List_t),
1464 M_TYPE (Packet_PSI_Status_t, Unknown_PSI_Message_List, Unknown_PSI_Message_List_t),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04001465 M_PADDING_BITS(Packet_PSI_Status_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001466CSN_DESCR_END (Packet_PSI_Status_t)
1467
1468/* < Packet SI Status message content > */
1469
1470static const
1471CSN_DESCR_BEGIN(SI_Message_t)
1472 M_UINT (SI_Message_t, SI_MESSAGE_TYPE, 8),
1473 M_UINT (SI_Message_t, MESS_REC, 2),
1474CSN_DESCR_END (SI_Message_t)
1475
1476static const
1477CSN_DESCR_BEGIN(SI_Message_List_t)
Pau Espin Pedrol81b40cb2020-03-23 15:23:51 +01001478 M_REC_TARRAY (SI_Message_List_t, SI_Message, SI_Message_t, Count_SI_Message),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001479 M_FIXED (SI_Message_List_t, 1, 0x00),
1480 M_UINT (SI_Message_List_t, ADDITIONAL_MSG_TYPE, 1),
1481CSN_DESCR_END (SI_Message_List_t)
1482
1483static const
1484CSN_DESCR_BEGIN(Unknown_SI_Message_List_t)
1485 M_FIXED (Unknown_SI_Message_List_t, 1, 0x00),
1486 M_UINT (Unknown_SI_Message_List_t, ADDITIONAL_MSG_TYPE, 1),
1487CSN_DESCR_END (Unknown_SI_Message_List_t)
1488
1489static const
1490CSN_DESCR_BEGIN(Packet_SI_Status_t)
1491 /* Mac header */
1492 M_UINT (Packet_SI_Status_t, PayloadType, 2),
1493 M_UINT (Packet_SI_Status_t, spare, 5),
1494 M_UINT (Packet_SI_Status_t, R, 1),
1495 M_UINT (Packet_SI_Status_t, MESSAGE_TYPE, 6),
1496 /* Mac header */
1497
1498 M_TYPE (Packet_SI_Status_t, Global_TFI, Global_TFI_t),
1499 M_UINT (Packet_SI_Status_t, BCCH_CHANGE_MARK, 3),
1500 M_TYPE (Packet_SI_Status_t, SI_Message_List, SI_Message_List_t),
1501 M_TYPE (Packet_SI_Status_t, Unknown_SI_Message_List, Unknown_SI_Message_List_t),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04001502 M_PADDING_BITS(Packet_SI_Status_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001503CSN_DESCR_END (Packet_SI_Status_t)
1504
1505/* < Packet Downlink Ack/Nack message content > */
1506static const
1507CSN_DESCR_BEGIN(PD_AckNack_AdditionsR99_t)
1508 M_NEXT_EXIST (PD_AckNack_AdditionsR99_t, Exist_PFI, 1),
1509 M_UINT (PD_AckNack_AdditionsR99_t, PFI, 7),
1510CSN_DESCR_END (PD_AckNack_AdditionsR99_t)
1511
1512static const
1513CSN_DESCR_BEGIN (Packet_Downlink_Ack_Nack_t)
1514 M_UINT (Packet_Downlink_Ack_Nack_t, PayloadType, 2),
1515 M_UINT (Packet_Downlink_Ack_Nack_t, spare, 5),
1516 M_BIT (Packet_Downlink_Ack_Nack_t, R),
1517 M_UINT (Packet_Downlink_Ack_Nack_t, MESSAGE_TYPE, 6),
1518 M_UINT (Packet_Downlink_Ack_Nack_t, DOWNLINK_TFI, 5),
1519 M_TYPE (Packet_Downlink_Ack_Nack_t, Ack_Nack_Description, Ack_Nack_Description_t),
1520
1521 M_NEXT_EXIST (Packet_Downlink_Ack_Nack_t, Exist_Channel_Request_Description, 1),
1522 M_TYPE (Packet_Downlink_Ack_Nack_t, Channel_Request_Description, Channel_Request_Description_t),
1523
1524 M_TYPE (Packet_Downlink_Ack_Nack_t, Channel_Quality_Report, Channel_Quality_Report_t),
1525
1526 M_NEXT_EXIST_OR_NULL(Packet_Downlink_Ack_Nack_t, Exist_AdditionsR99, 1),
1527 M_TYPE (Packet_Downlink_Ack_Nack_t, AdditionsR99, PD_AckNack_AdditionsR99_t),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04001528 M_PADDING_BITS (Packet_Downlink_Ack_Nack_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001529CSN_DESCR_END (Packet_Downlink_Ack_Nack_t)
1530
1531
1532/*< EGPRS Packet Downlink Ack/Nack message content > */
1533static const
1534CSN_DESCR_BEGIN(EGPRS_ChannelQualityReport_t)
1535 M_TYPE (EGPRS_ChannelQualityReport_t, EGPRS_BEP_LinkQualityMeasurements, EGPRS_BEP_LinkQualityMeasurements_t),
1536 M_UINT (EGPRS_ChannelQualityReport_t, C_VALUE, 6),
1537 M_TYPE (EGPRS_ChannelQualityReport_t, EGPRS_TimeslotLinkQualityMeasurements, EGPRS_TimeslotLinkQualityMeasurements_t),
1538CSN_DESCR_END (EGPRS_ChannelQualityReport_t)
1539
1540static const
1541CSN_DESCR_BEGIN(EGPRS_PD_AckNack_t)
1542/* M_CALLBACK (EGPRS_PD_AckNack_t, (void*)21, IsSupported, IsSupported), */
1543 M_UINT (EGPRS_PD_AckNack_t, PayloadType, 2),
1544 M_UINT (EGPRS_PD_AckNack_t, spare, 5),
1545 M_BIT (EGPRS_PD_AckNack_t, R),
1546
1547 M_UINT (EGPRS_PD_AckNack_t, MESSAGE_TYPE, 6),
1548 M_UINT (EGPRS_PD_AckNack_t, DOWNLINK_TFI, 5),
1549 M_UINT (EGPRS_PD_AckNack_t, MS_OUT_OF_MEMORY, 1),
1550
1551 M_NEXT_EXIST (EGPRS_PD_AckNack_t, Exist_EGPRS_ChannelQualityReport, 1),
1552 M_TYPE (EGPRS_PD_AckNack_t, EGPRS_ChannelQualityReport, EGPRS_ChannelQualityReport_t),
1553
1554 M_NEXT_EXIST (EGPRS_PD_AckNack_t, Exist_ChannelRequestDescription, 1),
1555 M_TYPE (EGPRS_PD_AckNack_t, ChannelRequestDescription, Channel_Request_Description_t),
1556
1557 M_NEXT_EXIST (EGPRS_PD_AckNack_t, Exist_PFI, 1),
1558 M_UINT (EGPRS_PD_AckNack_t, PFI, 7),
1559
1560 M_NEXT_EXIST (EGPRS_PD_AckNack_t, Exist_ExtensionBits, 1),
1561 M_TYPE (EGPRS_PD_AckNack_t, ExtensionBits, Extension_Bits_t),
1562
1563 M_TYPE (EGPRS_PD_AckNack_t, EGPRS_AckNack, EGPRS_AckNack_t),
1564/* M_CALLBACK (EGPRS_PD_AckNack_t, (void*)24, EGPRS_AckNack, EGPRS_AckNack), */
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04001565 M_PADDING_BITS(EGPRS_PD_AckNack_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001566
1567CSN_DESCR_END (EGPRS_PD_AckNack_t)
1568
1569static const
1570CSN_DESCR_BEGIN(FDD_Target_Cell_t)
1571 M_UINT (FDD_Target_Cell_t, FDD_ARFCN, 14),
1572 M_UINT (FDD_Target_Cell_t, DIVERSITY, 1),
1573 M_NEXT_EXIST (FDD_Target_Cell_t, Exist_Bandwith_FDD, 1),
1574 M_UINT (FDD_Target_Cell_t, BANDWITH_FDD, 3),
1575 M_UINT (FDD_Target_Cell_t, SCRAMBLING_CODE, 9),
1576CSN_DESCR_END (FDD_Target_Cell_t)
1577
1578static const
1579CSN_DESCR_BEGIN(TDD_Target_Cell_t)
1580 M_UINT (TDD_Target_Cell_t, TDD_ARFCN, 14),
1581 M_UINT (TDD_Target_Cell_t, DIVERSITY_TDD, 1),
1582 M_NEXT_EXIST (TDD_Target_Cell_t, Exist_Bandwith_TDD, 1),
1583 M_UINT (TDD_Target_Cell_t, BANDWITH_TDD, 3),
1584 M_UINT (TDD_Target_Cell_t, CELL_PARAMETER, 7),
1585 M_UINT (TDD_Target_Cell_t, Sync_Case_TSTD, 1),
1586CSN_DESCR_END (TDD_Target_Cell_t)
1587
1588static const
1589CSN_DESCR_BEGIN(EUTRAN_Target_Cell_t)
1590 M_UINT (EUTRAN_Target_Cell_t, EARFCN, 16),
1591 M_NEXT_EXIST (EUTRAN_Target_Cell_t, Exist_Measurement_Bandwidth, 1),
1592 M_UINT (EUTRAN_Target_Cell_t, Measurement_Bandwidth, 3),
1593 M_UINT (EUTRAN_Target_Cell_t, Physical_Layer_Cell_Identity, 9),
1594CSN_DESCR_END (EUTRAN_Target_Cell_t)
1595
1596static const
1597CSN_DESCR_BEGIN(UTRAN_CSG_Target_Cell_t)
1598 M_UINT (UTRAN_CSG_Target_Cell_t, UTRAN_CI, 28),
1599 M_NEXT_EXIST (UTRAN_CSG_Target_Cell_t, Exist_PLMN_ID, 1),
1600 M_TYPE (UTRAN_CSG_Target_Cell_t, PLMN_ID, PLMN_t),
1601CSN_DESCR_END (UTRAN_CSG_Target_Cell_t)
1602
1603static const
1604CSN_DESCR_BEGIN(EUTRAN_CSG_Target_Cell_t)
1605 M_UINT (EUTRAN_CSG_Target_Cell_t, EUTRAN_CI, 28),
1606 M_UINT (EUTRAN_CSG_Target_Cell_t, Tracking_Area_Code, 16),
1607 M_NEXT_EXIST (EUTRAN_CSG_Target_Cell_t, Exist_PLMN_ID, 1),
1608 M_TYPE (EUTRAN_CSG_Target_Cell_t, PLMN_ID, PLMN_t),
1609CSN_DESCR_END (EUTRAN_CSG_Target_Cell_t)
1610
1611static const
1612CSN_DESCR_BEGIN(PCCF_AdditionsR9_t)
1613 M_NEXT_EXIST (PCCF_AdditionsR9_t, Exist_UTRAN_CSG_Target_Cell, 1),
1614 M_TYPE (PCCF_AdditionsR9_t, UTRAN_CSG_Target_Cell, UTRAN_CSG_Target_Cell_t),
1615 M_NEXT_EXIST (PCCF_AdditionsR9_t, Exist_EUTRAN_CSG_Target_Cell, 1),
1616 M_TYPE (PCCF_AdditionsR9_t, EUTRAN_CSG_Target_Cell, EUTRAN_CSG_Target_Cell_t),
1617CSN_DESCR_END (PCCF_AdditionsR9_t)
1618
1619static const
1620CSN_DESCR_BEGIN(PCCF_AdditionsR8_t)
1621 M_NEXT_EXIST (PCCF_AdditionsR8_t, Exist_EUTRAN_Target_Cell, 1),
1622 M_TYPE (PCCF_AdditionsR8_t, EUTRAN_Target_Cell, EUTRAN_Target_Cell_t),
1623 M_NEXT_EXIST_OR_NULL(PCCF_AdditionsR8_t, Exist_AdditionsR9, 1),
1624 M_TYPE (PCCF_AdditionsR8_t, AdditionsR9, PCCF_AdditionsR9_t),
1625CSN_DESCR_END (PCCF_AdditionsR8_t)
1626
1627static const
1628CSN_DESCR_BEGIN(PCCF_AdditionsR5_t)
Thorsten Alteholz8bb79042018-10-06 10:42:58 +02001629 M_NEXT_EXIST (PCCF_AdditionsR5_t, Exist_G_RNTI_extension, 1),
1630 M_UINT (PCCF_AdditionsR5_t, G_RNTI_extension, 4),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001631 M_NEXT_EXIST_OR_NULL(PCCF_AdditionsR5_t, Exist_AdditionsR8, 1),
1632 M_TYPE (PCCF_AdditionsR5_t, AdditionsR8, PCCF_AdditionsR8_t),
1633CSN_DESCR_END (PCCF_AdditionsR5_t)
1634
1635static const
1636CSN_DESCR_BEGIN(PCCF_AdditionsR99_t)
1637 M_NEXT_EXIST (PCCF_AdditionsR99_t, Exist_FDD_Description, 1),
1638 M_TYPE (PCCF_AdditionsR99_t, FDD_Target_Cell, FDD_Target_Cell_t),
1639 M_NEXT_EXIST (PCCF_AdditionsR99_t, Exist_TDD_Description, 1),
1640 M_TYPE (PCCF_AdditionsR99_t, TDD_Target_Cell, TDD_Target_Cell_t),
1641 M_NEXT_EXIST_OR_NULL(PCCF_AdditionsR99_t, Exist_AdditionsR5, 1),
1642 M_TYPE (PCCF_AdditionsR99_t, AdditionsR5, PCCF_AdditionsR5_t),
1643CSN_DESCR_END (PCCF_AdditionsR99_t)
1644
1645/*< Packet Cell Change Failure message content > */
1646static const
1647CSN_DESCR_BEGIN(Packet_Cell_Change_Failure_t)
1648 /* Mac header */
1649 M_UINT (Packet_Cell_Change_Failure_t, PayloadType, 2),
1650 M_UINT (Packet_Cell_Change_Failure_t, spare, 5),
1651 M_UINT (Packet_Cell_Change_Failure_t, R, 1),
1652 M_UINT (Packet_Cell_Change_Failure_t, MESSAGE_TYPE, 6),
1653 /* Mac header */
1654
1655 M_UINT (Packet_Cell_Change_Failure_t, TLLI, 32),
1656 M_UINT (Packet_Cell_Change_Failure_t, ARFCN, 10),
1657 M_UINT (Packet_Cell_Change_Failure_t, BSIC, 6),
1658 M_UINT (Packet_Cell_Change_Failure_t, CAUSE, 4),
1659
1660 M_NEXT_EXIST_OR_NULL (Packet_Cell_Change_Failure_t, Exist_AdditionsR99, 1),
1661 M_TYPE (Packet_Cell_Change_Failure_t, AdditionsR99, PCCF_AdditionsR99_t),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04001662
1663 M_PADDING_BITS (Packet_Cell_Change_Failure_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001664CSN_DESCR_END (Packet_Cell_Change_Failure_t)
1665
1666/*< Packet Uplink Ack/Nack message content > */
1667static const
1668CSN_DESCR_BEGIN(Power_Control_Parameters_t)
1669 M_UINT (Power_Control_Parameters_t, ALPHA, 4),
1670
1671 M_NEXT_EXIST (Power_Control_Parameters_t, Slot[0].Exist, 1),
1672 M_UINT (Power_Control_Parameters_t, Slot[0].GAMMA_TN, 5),
1673
1674 M_NEXT_EXIST (Power_Control_Parameters_t, Slot[1].Exist, 1),
1675 M_UINT (Power_Control_Parameters_t, Slot[1].GAMMA_TN, 5),
1676
1677 M_NEXT_EXIST (Power_Control_Parameters_t, Slot[2].Exist, 1),
1678 M_UINT (Power_Control_Parameters_t, Slot[2].GAMMA_TN, 5),
1679
1680 M_NEXT_EXIST (Power_Control_Parameters_t, Slot[3].Exist, 1),
1681 M_UINT (Power_Control_Parameters_t, Slot[3].GAMMA_TN, 5),
1682
1683 M_NEXT_EXIST (Power_Control_Parameters_t, Slot[4].Exist, 1),
1684 M_UINT (Power_Control_Parameters_t, Slot[4].GAMMA_TN, 5),
1685
1686 M_NEXT_EXIST (Power_Control_Parameters_t, Slot[5].Exist, 1),
1687 M_UINT (Power_Control_Parameters_t, Slot[5].GAMMA_TN, 5),
1688
1689 M_NEXT_EXIST (Power_Control_Parameters_t, Slot[6].Exist, 1),
1690 M_UINT (Power_Control_Parameters_t, Slot[6].GAMMA_TN, 5),
1691
1692 M_NEXT_EXIST (Power_Control_Parameters_t, Slot[7].Exist, 1),
1693 M_UINT (Power_Control_Parameters_t, Slot[7].GAMMA_TN, 5),
1694CSN_DESCR_END (Power_Control_Parameters_t)
1695
1696static const
1697CSN_DESCR_BEGIN(PU_AckNack_GPRS_AdditionsR99_t)
Vadim Yanitskiy48587d52020-08-22 02:08:25 +07001698 M_NEXT_EXIST (PU_AckNack_GPRS_AdditionsR99_t, Exist_Packet_Extended_Timing_Advance, 1),
1699 M_UINT (PU_AckNack_GPRS_AdditionsR99_t, Packet_Extended_Timing_Advance, 2),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001700
1701 M_UINT (PU_AckNack_GPRS_AdditionsR99_t, TBF_EST, 1),
1702CSN_DESCR_END (PU_AckNack_GPRS_AdditionsR99_t)
1703
1704static const
1705CSN_DESCR_BEGIN (PU_AckNack_GPRS_t)
1706 M_UINT (PU_AckNack_GPRS_t, CHANNEL_CODING_COMMAND, 2),
1707 M_TYPE (PU_AckNack_GPRS_t, Ack_Nack_Description, Ack_Nack_Description_t),
1708
1709 M_NEXT_EXIST (PU_AckNack_GPRS_t, Common_Uplink_Ack_Nack_Data.Exist_CONTENTION_RESOLUTION_TLLI, 1),
1710 M_UINT (PU_AckNack_GPRS_t, Common_Uplink_Ack_Nack_Data.CONTENTION_RESOLUTION_TLLI, 32),
1711
1712 M_NEXT_EXIST (PU_AckNack_GPRS_t, Common_Uplink_Ack_Nack_Data.Exist_Packet_Timing_Advance, 1),
1713 M_TYPE (PU_AckNack_GPRS_t, Common_Uplink_Ack_Nack_Data.Packet_Timing_Advance, Packet_Timing_Advance_t),
1714
1715 M_NEXT_EXIST (PU_AckNack_GPRS_t, Common_Uplink_Ack_Nack_Data.Exist_Power_Control_Parameters, 1),
1716 M_TYPE (PU_AckNack_GPRS_t, Common_Uplink_Ack_Nack_Data.Power_Control_Parameters, Power_Control_Parameters_t),
1717
1718 M_NEXT_EXIST (PU_AckNack_GPRS_t, Common_Uplink_Ack_Nack_Data.Exist_Extension_Bits, 1),
1719 M_TYPE (PU_AckNack_GPRS_t, Common_Uplink_Ack_Nack_Data.Extension_Bits, Extension_Bits_t),
1720
1721 M_UNION (PU_AckNack_GPRS_t, 2), /* Fixed Allocation was removed */
1722 M_UINT (PU_AckNack_GPRS_t, u.FixedAllocationDummy, 1),
1723 CSN_ERROR (PU_AckNack_GPRS_t, "01 <Fixed Allocation>", CSN_ERROR_STREAM_NOT_SUPPORTED),
1724
1725 M_NEXT_EXIST_OR_NULL(PU_AckNack_GPRS_t, Exist_AdditionsR99, 1),
1726 M_TYPE (PU_AckNack_GPRS_t, AdditionsR99, PU_AckNack_GPRS_AdditionsR99_t),
1727CSN_DESCR_END (PU_AckNack_GPRS_t)
1728
1729static const
1730CSN_DESCR_BEGIN(PU_AckNack_EGPRS_00_t)
1731 M_UINT (PU_AckNack_EGPRS_00_t, EGPRS_ChannelCodingCommand, 4),
1732 M_UINT (PU_AckNack_EGPRS_00_t, RESEGMENT, 1),
1733 M_UINT (PU_AckNack_EGPRS_00_t, PRE_EMPTIVE_TRANSMISSION, 1),
1734 M_UINT (PU_AckNack_EGPRS_00_t, PRR_RETRANSMISSION_REQUEST, 1),
1735 M_UINT (PU_AckNack_EGPRS_00_t, ARAC_RETRANSMISSION_REQUEST, 1),
1736
1737 M_NEXT_EXIST (PU_AckNack_EGPRS_00_t, Common_Uplink_Ack_Nack_Data.Exist_CONTENTION_RESOLUTION_TLLI, 1),
1738 M_UINT (PU_AckNack_EGPRS_00_t, Common_Uplink_Ack_Nack_Data.CONTENTION_RESOLUTION_TLLI, 32),
1739
1740 M_UINT (PU_AckNack_EGPRS_00_t, TBF_EST, 1),
1741
1742 M_NEXT_EXIST (PU_AckNack_EGPRS_00_t, Common_Uplink_Ack_Nack_Data.Exist_Packet_Timing_Advance, 1),
1743 M_TYPE (PU_AckNack_EGPRS_00_t, Common_Uplink_Ack_Nack_Data.Packet_Timing_Advance, Packet_Timing_Advance_t),
1744
1745 M_NEXT_EXIST (PU_AckNack_EGPRS_00_t, Exist_Packet_Extended_Timing_Advance, 1),
1746 M_UINT (PU_AckNack_EGPRS_00_t, Packet_Extended_Timing_Advance, 2),
1747
1748 M_NEXT_EXIST (PU_AckNack_EGPRS_00_t, Common_Uplink_Ack_Nack_Data.Exist_Power_Control_Parameters, 1),
1749 M_TYPE (PU_AckNack_EGPRS_00_t, Common_Uplink_Ack_Nack_Data.Power_Control_Parameters, Power_Control_Parameters_t),
1750
1751 M_NEXT_EXIST (PU_AckNack_EGPRS_00_t, Common_Uplink_Ack_Nack_Data.Exist_Extension_Bits, 1),
1752 M_TYPE (PU_AckNack_EGPRS_00_t, Common_Uplink_Ack_Nack_Data.Extension_Bits, Extension_Bits_t),
1753
1754 M_TYPE (PU_AckNack_EGPRS_00_t, EGPRS_AckNack, EGPRS_AckNack_t),
1755/* M_CALLBACK (PU_AckNack_EGPRS_00_t, (void*)24, EGPRS_AckNack, EGPRS_AckNack), */
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001756CSN_DESCR_END (PU_AckNack_EGPRS_00_t)
1757
1758static const
1759CSN_DESCR_BEGIN(PU_AckNack_EGPRS_t)
1760/* M_CALLBACK (PU_AckNack_EGPRS_t, (void*)21, IsSupported, IsSupported), */
1761 M_UNION (PU_AckNack_EGPRS_t, 4),
1762 M_TYPE (PU_AckNack_EGPRS_t, u.PU_AckNack_EGPRS_00, PU_AckNack_EGPRS_00_t),
1763 CSN_ERROR (PU_AckNack_EGPRS_t, "01 <PU_AckNack_EGPRS>", CSN_ERROR_STREAM_NOT_SUPPORTED),
1764 CSN_ERROR (PU_AckNack_EGPRS_t, "10 <PU_AckNack_EGPRS>", CSN_ERROR_STREAM_NOT_SUPPORTED),
1765 CSN_ERROR (PU_AckNack_EGPRS_t, "11 <PU_AckNack_EGPRS>", CSN_ERROR_STREAM_NOT_SUPPORTED),
1766CSN_DESCR_END (PU_AckNack_EGPRS_t)
1767
1768static const
1769CSN_DESCR_BEGIN(Packet_Uplink_Ack_Nack_t)
1770 M_UINT (Packet_Uplink_Ack_Nack_t, MESSAGE_TYPE, 6),
1771 M_UINT (Packet_Uplink_Ack_Nack_t, PAGE_MODE, 2),
1772 M_FIXED (Packet_Uplink_Ack_Nack_t, 2, 0x00),
1773 M_UINT (Packet_Uplink_Ack_Nack_t, UPLINK_TFI, 5),
1774
1775 M_UNION (Packet_Uplink_Ack_Nack_t, 2),
1776 M_TYPE (Packet_Uplink_Ack_Nack_t, u.PU_AckNack_GPRS_Struct, PU_AckNack_GPRS_t),
1777 M_TYPE (Packet_Uplink_Ack_Nack_t, u.PU_AckNack_EGPRS_Struct, PU_AckNack_EGPRS_t),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04001778 M_PADDING_BITS(Packet_Uplink_Ack_Nack_t ),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001779CSN_DESCR_END (Packet_Uplink_Ack_Nack_t)
1780
1781/*< Packet Uplink Assignment message content > */
1782static const
1783CSN_DESCR_BEGIN(CHANGE_MARK_t)
1784 M_UINT (CHANGE_MARK_t, CHANGE_MARK_1, 2),
1785
1786 M_NEXT_EXIST (CHANGE_MARK_t, Exist_CHANGE_MARK_2, 1),
1787 M_UINT (CHANGE_MARK_t, CHANGE_MARK_2, 2),
1788CSN_DESCR_END (CHANGE_MARK_t)
1789
1790static const
1791CSN_DESCR_BEGIN(Indirect_encoding_t)
1792 M_UINT (Indirect_encoding_t, MAIO, 6),
1793 M_UINT (Indirect_encoding_t, MA_NUMBER, 4),
1794
1795 M_NEXT_EXIST (Indirect_encoding_t, Exist_CHANGE_MARK, 1),
1796 M_TYPE (Indirect_encoding_t, CHANGE_MARK, CHANGE_MARK_t),
1797CSN_DESCR_END (Indirect_encoding_t)
1798
1799static const
1800CSN_DESCR_BEGIN(Direct_encoding_1_t)
1801 M_UINT (Direct_encoding_1_t, MAIO, 6),
1802 M_TYPE (Direct_encoding_1_t, GPRS_Mobile_Allocation, GPRS_Mobile_Allocation_t),
1803CSN_DESCR_END (Direct_encoding_1_t)
1804
1805static const
1806CSN_DESCR_BEGIN(Direct_encoding_2_t)
1807 M_UINT (Direct_encoding_2_t, MAIO, 6),
1808 M_UINT (Direct_encoding_2_t, HSN, 6),
1809 M_UINT_OFFSET(Direct_encoding_2_t, Length_of_MA_Frequency_List, 4, 3),
1810 M_VAR_ARRAY (Direct_encoding_2_t, MA_Frequency_List, Length_of_MA_Frequency_List, 0),
1811CSN_DESCR_END (Direct_encoding_2_t)
1812
1813static const
1814CSN_DESCR_BEGIN(Frequency_Parameters_t)
1815 M_UINT (Frequency_Parameters_t, TSC, 3),
1816
1817 M_UNION (Frequency_Parameters_t, 4),
1818 M_UINT (Frequency_Parameters_t, u.ARFCN, 10),
1819 M_TYPE (Frequency_Parameters_t, u.Indirect_encoding, Indirect_encoding_t),
1820 M_TYPE (Frequency_Parameters_t, u.Direct_encoding_1, Direct_encoding_1_t),
1821 M_TYPE (Frequency_Parameters_t, u.Direct_encoding_2, Direct_encoding_2_t),
1822CSN_DESCR_END (Frequency_Parameters_t)
1823
1824static const
1825CSN_DESCR_BEGIN(Packet_Request_Reference_t)
1826 M_UINT (Packet_Request_Reference_t, RANDOM_ACCESS_INFORMATION, 11),
1827 M_UINT_ARRAY (Packet_Request_Reference_t, FRAME_NUMBER, 8, 2),
1828CSN_DESCR_END (Packet_Request_Reference_t)
1829
1830static const
1831CSN_DESCR_BEGIN(Timeslot_Allocation_t)
1832 M_NEXT_EXIST (Timeslot_Allocation_t, Exist, 1),
1833 M_UINT (Timeslot_Allocation_t, USF_TN, 3),
1834CSN_DESCR_END (Timeslot_Allocation_t)
1835
1836static const
1837CSN_DESCR_BEGIN(Timeslot_Allocation_Power_Ctrl_Param_t)
1838 M_UINT (Timeslot_Allocation_Power_Ctrl_Param_t, ALPHA, 4),
1839
1840 M_NEXT_EXIST (Timeslot_Allocation_Power_Ctrl_Param_t, Slot[0].Exist, 2),
1841 M_UINT (Timeslot_Allocation_Power_Ctrl_Param_t, Slot[0].USF_TN, 3),
1842 M_UINT (Timeslot_Allocation_Power_Ctrl_Param_t, Slot[0].GAMMA_TN, 5),
1843
1844 M_NEXT_EXIST (Timeslot_Allocation_Power_Ctrl_Param_t, Slot[1].Exist, 2),
1845 M_UINT (Timeslot_Allocation_Power_Ctrl_Param_t, Slot[1].USF_TN, 3),
1846 M_UINT (Timeslot_Allocation_Power_Ctrl_Param_t, Slot[1].GAMMA_TN, 5),
1847
1848 M_NEXT_EXIST (Timeslot_Allocation_Power_Ctrl_Param_t, Slot[2].Exist, 2),
1849 M_UINT (Timeslot_Allocation_Power_Ctrl_Param_t, Slot[2].USF_TN, 3),
1850 M_UINT (Timeslot_Allocation_Power_Ctrl_Param_t, Slot[2].GAMMA_TN, 5),
1851
1852 M_NEXT_EXIST (Timeslot_Allocation_Power_Ctrl_Param_t, Slot[3].Exist, 2),
1853 M_UINT (Timeslot_Allocation_Power_Ctrl_Param_t, Slot[3].USF_TN, 3),
1854 M_UINT (Timeslot_Allocation_Power_Ctrl_Param_t, Slot[3].GAMMA_TN, 5),
1855
1856 M_NEXT_EXIST (Timeslot_Allocation_Power_Ctrl_Param_t, Slot[4].Exist, 2),
1857 M_UINT (Timeslot_Allocation_Power_Ctrl_Param_t, Slot[4].USF_TN, 3),
1858 M_UINT (Timeslot_Allocation_Power_Ctrl_Param_t, Slot[4].GAMMA_TN, 5),
1859
1860 M_NEXT_EXIST (Timeslot_Allocation_Power_Ctrl_Param_t, Slot[5].Exist, 2),
1861 M_UINT (Timeslot_Allocation_Power_Ctrl_Param_t, Slot[5].USF_TN, 3),
1862 M_UINT (Timeslot_Allocation_Power_Ctrl_Param_t, Slot[5].GAMMA_TN, 5),
1863
1864 M_NEXT_EXIST (Timeslot_Allocation_Power_Ctrl_Param_t, Slot[6].Exist, 2),
1865 M_UINT (Timeslot_Allocation_Power_Ctrl_Param_t, Slot[6].USF_TN, 3),
1866 M_UINT (Timeslot_Allocation_Power_Ctrl_Param_t, Slot[6].GAMMA_TN, 5),
1867
1868 M_NEXT_EXIST (Timeslot_Allocation_Power_Ctrl_Param_t, Slot[7].Exist, 2),
1869 M_UINT (Timeslot_Allocation_Power_Ctrl_Param_t, Slot[7].USF_TN, 3),
1870 M_UINT (Timeslot_Allocation_Power_Ctrl_Param_t, Slot[7].GAMMA_TN, 5),
1871CSN_DESCR_END (Timeslot_Allocation_Power_Ctrl_Param_t)
1872
1873/* USED in <Packet Uplink Assignment message content> */
1874static const
1875CSN_DESCR_BEGIN(Dynamic_Allocation_t)
1876 M_UINT (Dynamic_Allocation_t, Extended_Dynamic_Allocation, 1),
1877
1878 M_NEXT_EXIST (Dynamic_Allocation_t, Exist_P0, 2),
1879 M_UINT (Dynamic_Allocation_t, P0, 4),
1880 M_UINT (Dynamic_Allocation_t, PR_MODE, 1),
1881
1882 M_UINT (Dynamic_Allocation_t, USF_GRANULARITY, 1),
1883
1884 M_NEXT_EXIST (Dynamic_Allocation_t, Exist_UPLINK_TFI_ASSIGNMENT, 1),
1885 M_UINT (Dynamic_Allocation_t, UPLINK_TFI_ASSIGNMENT, 5),
1886
1887 M_NEXT_EXIST (Dynamic_Allocation_t, Exist_RLC_DATA_BLOCKS_GRANTED, 1),
1888 M_UINT (Dynamic_Allocation_t, RLC_DATA_BLOCKS_GRANTED, 8),
1889
1890 M_NEXT_EXIST (Dynamic_Allocation_t, Exist_TBF_Starting_Time, 1),
1891 M_TYPE (Dynamic_Allocation_t, TBF_Starting_Time, Starting_Frame_Number_t),
1892
1893 M_UNION (Dynamic_Allocation_t, 2),
1894 M_TYPE_ARRAY (Dynamic_Allocation_t, u.Timeslot_Allocation, Timeslot_Allocation_t, 8),
1895 M_TYPE (Dynamic_Allocation_t, u.Timeslot_Allocation_Power_Ctrl_Param, Timeslot_Allocation_Power_Ctrl_Param_t),
1896CSN_DESCR_END (Dynamic_Allocation_t)
1897
1898static const
1899CSN_DESCR_BEGIN(Single_Block_Allocation_t)
1900 M_UINT (Single_Block_Allocation_t, TIMESLOT_NUMBER, 3),
1901
1902 M_NEXT_EXIST (Single_Block_Allocation_t, Exist_ALPHA_and_GAMMA_TN, 2),
1903 M_UINT (Single_Block_Allocation_t, ALPHA, 4),
1904 M_UINT (Single_Block_Allocation_t, GAMMA_TN, 5),
1905
1906 M_NEXT_EXIST (Single_Block_Allocation_t, Exist_P0, 3),
1907 M_UINT (Single_Block_Allocation_t, P0, 4),
1908 M_UINT (Single_Block_Allocation_t, BTS_PWR_CTRL_MODE, 1),
1909 M_UINT (Single_Block_Allocation_t, PR_MODE, 1),
1910
1911 M_TYPE (Single_Block_Allocation_t, TBF_Starting_Time, Starting_Frame_Number_t),
1912CSN_DESCR_END (Single_Block_Allocation_t)
1913
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01001914#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001915static const
1916CSN_DESCR_BEGIN(DTM_Dynamic_Allocation_t)
1917 M_UINT (DTM_Dynamic_Allocation_t, Extended_Dynamic_Allocation, 1),
1918
1919 M_NEXT_EXIST (DTM_Dynamic_Allocation_t, Exist_P0, 2),
1920 M_UINT (DTM_Dynamic_Allocation_t, P0, 4),
1921 M_UINT (DTM_Dynamic_Allocation_t, PR_MODE, 1),
1922
1923 M_UINT (DTM_Dynamic_Allocation_t, USF_GRANULARITY, 1),
1924
1925 M_NEXT_EXIST (DTM_Dynamic_Allocation_t, Exist_UPLINK_TFI_ASSIGNMENT, 1),
1926 M_UINT (DTM_Dynamic_Allocation_t, UPLINK_TFI_ASSIGNMENT, 5),
1927
1928 M_NEXT_EXIST (DTM_Dynamic_Allocation_t, Exist_RLC_DATA_BLOCKS_GRANTED, 1),
1929 M_UINT (DTM_Dynamic_Allocation_t, RLC_DATA_BLOCKS_GRANTED, 8),
1930
1931 M_UNION (DTM_Dynamic_Allocation_t, 2),
1932 M_TYPE_ARRAY (DTM_Dynamic_Allocation_t, u.Timeslot_Allocation, Timeslot_Allocation_t, 8),
1933 M_TYPE (DTM_Dynamic_Allocation_t, u.Timeslot_Allocation_Power_Ctrl_Param, Timeslot_Allocation_Power_Ctrl_Param_t),
1934CSN_DESCR_END (DTM_Dynamic_Allocation_t)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01001935#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001936
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01001937#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001938static const
1939CSN_DESCR_BEGIN(DTM_Single_Block_Allocation_t)
1940 M_UINT (DTM_Single_Block_Allocation_t, TIMESLOT_NUMBER, 3),
1941
1942 M_NEXT_EXIST (DTM_Single_Block_Allocation_t, Exist_ALPHA_and_GAMMA_TN, 2),
1943 M_UINT (DTM_Single_Block_Allocation_t, ALPHA, 4),
1944 M_UINT (DTM_Single_Block_Allocation_t, GAMMA_TN, 5),
1945
1946 M_NEXT_EXIST (DTM_Single_Block_Allocation_t, Exist_P0, 3),
1947 M_UINT (DTM_Single_Block_Allocation_t, P0, 4),
1948 M_UINT (DTM_Single_Block_Allocation_t, BTS_PWR_CTRL_MODE, 1),
1949 M_UINT (DTM_Single_Block_Allocation_t, PR_MODE, 1),
1950CSN_DESCR_END (DTM_Single_Block_Allocation_t)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01001951#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001952
1953/* Help structures */
1954typedef struct
1955{
1956 Global_TFI_t Global_TFI; /* 0 < Global TFI : < Global TFI IE > > */
1957} h0_Global_TFI_t;
1958
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01001959#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001960static const
1961CSN_DESCR_BEGIN(h0_Global_TFI_t)
1962 M_FIXED (h0_Global_TFI_t, 1, 0x00),
1963 M_TYPE (h0_Global_TFI_t, Global_TFI, Global_TFI_t),
1964CSN_DESCR_END (h0_Global_TFI_t)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01001965#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001966
1967typedef struct
1968{
1969 guint32 TLLI;/* | 10 < TLLI : bit (32) >*/
1970} h10_TLLI_t;
1971
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01001972#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001973static const
1974CSN_DESCR_BEGIN(h10_TLLI_t)
1975 M_FIXED (h10_TLLI_t, 2, 0x02),
1976 M_UINT (h10_TLLI_t, TLLI, 32),
1977CSN_DESCR_END (h10_TLLI_t)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01001978#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001979
1980typedef struct
1981{
1982 guint16 TQI;/*| 110 < TQI : bit (16) > */
1983} h110_TQI_t;
1984
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01001985#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001986static const
1987CSN_DESCR_BEGIN(h110_TQI_t)
1988 M_FIXED (h110_TQI_t, 3, 0x06),
1989 M_UINT (h110_TQI_t, TQI, 16),
1990CSN_DESCR_END (h110_TQI_t)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01001991#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001992
1993typedef struct
1994{
1995 Packet_Request_Reference_t Packet_Request_Reference;/*| 111 < Packet Request Reference : < Packet Request Reference IE > > }*/
1996} h111_Packet_Request_Reference_t;
1997
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01001998#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001999static const
2000CSN_DESCR_BEGIN(h111_Packet_Request_Reference_t)
2001 M_FIXED (h111_Packet_Request_Reference_t, 3, 0x07),
2002 M_TYPE (h111_Packet_Request_Reference_t, Packet_Request_Reference, Packet_Request_Reference_t),
2003CSN_DESCR_END (h111_Packet_Request_Reference_t)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01002004#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002005
2006static const
2007CSN_ChoiceElement_t PacketUplinkID[] =
2008{
Pau Espin Pedrol7cce8252020-01-24 16:41:14 +01002009 {1, 0, 0, M_TYPE(PacketUplinkID_t, u.Global_TFI, Global_TFI_t)},
2010 {2, 0x02, 0, M_UINT(PacketUplinkID_t, u.TLLI, 32)},
2011 {3, 0x06, 0, M_UINT(PacketUplinkID_t, u.TQI, 16)},
2012 {3, 0x07, 0, M_TYPE(PacketUplinkID_t, u.Packet_Request_Reference, Packet_Request_Reference_t)},
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002013};
2014
2015static const
2016CSN_DESCR_BEGIN(PacketUplinkID_t)
2017 M_CHOICE (PacketUplinkID_t, UnionType, PacketUplinkID, ElementsOf(PacketUplinkID)),
2018CSN_DESCR_END (PacketUplinkID_t)
2019
2020static const
2021CSN_DESCR_BEGIN(PUA_GPRS_AdditionsR99_t)
2022 M_NEXT_EXIST (PUA_GPRS_AdditionsR99_t, Exist_Packet_Extended_Timing_Advance, 1),
2023 M_UINT (PUA_GPRS_AdditionsR99_t, Packet_Extended_Timing_Advance, 2),
2024CSN_DESCR_END (PUA_GPRS_AdditionsR99_t)
2025
2026static const
2027CSN_DESCR_BEGIN (PUA_GPRS_t)
2028 M_UINT (PUA_GPRS_t, CHANNEL_CODING_COMMAND, 2),
Anders Broman8ea3cbe2020-01-28 17:36:33 +01002029 M_UINT (PUA_GPRS_t, TLLI_BLOCK_CHANNEL_CODING, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002030 M_TYPE (PUA_GPRS_t, Packet_Timing_Advance, Packet_Timing_Advance_t),
2031
2032 M_NEXT_EXIST (PUA_GPRS_t, Exist_Frequency_Parameters, 1),
2033 M_TYPE (PUA_GPRS_t, Frequency_Parameters, Frequency_Parameters_t),
2034
2035 M_UNION (PUA_GPRS_t, 4),
2036 CSN_ERROR (PUA_GPRS_t, "00 <extension> not implemented", CSN_ERROR_STREAM_NOT_SUPPORTED),
2037 M_TYPE (PUA_GPRS_t, u.Dynamic_Allocation, Dynamic_Allocation_t),
2038 M_TYPE (PUA_GPRS_t, u.Single_Block_Allocation, Single_Block_Allocation_t),
2039 CSN_ERROR (PUA_GPRS_t, "11 <Fixed Allocation> not supported", CSN_ERROR_STREAM_NOT_SUPPORTED),
2040
2041 M_NEXT_EXIST_OR_NULL(PUA_GPRS_t, Exist_AdditionsR99, 1),
2042 M_TYPE (PUA_GPRS_t, AdditionsR99, PUA_GPRS_AdditionsR99_t),
2043CSN_DESCR_END (PUA_GPRS_t)
2044
2045static const
2046CSN_DESCR_BEGIN(COMPACT_ReducedMA_t)
2047 M_UINT (COMPACT_ReducedMA_t, BitmapLength, 7),
2048 M_VAR_BITMAP (COMPACT_ReducedMA_t, ReducedMA_Bitmap, BitmapLength, 0),
2049
2050 M_NEXT_EXIST (COMPACT_ReducedMA_t, Exist_MAIO_2, 1),
2051 M_UINT (COMPACT_ReducedMA_t, MAIO_2, 6),
2052CSN_DESCR_END (COMPACT_TeducedMA_t)
2053
2054static const
2055CSN_DESCR_BEGIN(MultiBlock_Allocation_t)
2056 M_UINT (MultiBlock_Allocation_t, TIMESLOT_NUMBER, 3),
2057
2058 M_NEXT_EXIST (MultiBlock_Allocation_t, Exist_ALPHA_GAMMA_TN, 2),
2059 M_UINT (MultiBlock_Allocation_t, ALPHA, 4),
2060 M_UINT (MultiBlock_Allocation_t, GAMMA_TN, 5),
2061
2062 M_NEXT_EXIST (MultiBlock_Allocation_t, Exist_P0_BTS_PWR_CTRL_PR_MODE, 3),
2063 M_UINT (MultiBlock_Allocation_t, P0, 4),
2064 M_UINT (MultiBlock_Allocation_t, BTS_PWR_CTRL_MODE, 1),
2065 M_UINT (MultiBlock_Allocation_t, PR_MODE, 1),
2066
2067 M_TYPE (MultiBlock_Allocation_t, TBF_Starting_Time, Starting_Frame_Number_t),
2068 M_UINT (MultiBlock_Allocation_t, NUMBER_OF_RADIO_BLOCKS_ALLOCATED, 2),
2069CSN_DESCR_END (MultiBlock_Allocation_t)
2070
2071static const
2072CSN_DESCR_BEGIN (PUA_EGPRS_00_t)
2073 M_NEXT_EXIST (PUA_EGPRS_00_t, Exist_CONTENTION_RESOLUTION_TLLI, 1),
2074 M_UINT (PUA_EGPRS_00_t, CONTENTION_RESOLUTION_TLLI, 32),
2075
2076 M_NEXT_EXIST (PUA_EGPRS_00_t, Exist_COMPACT_ReducedMA, 1),
2077 M_TYPE (PUA_EGPRS_00_t, COMPACT_ReducedMA, COMPACT_ReducedMA_t),
2078
2079 M_UINT (PUA_EGPRS_00_t, EGPRS_CHANNEL_CODING_COMMAND, 4),
2080 M_UINT (PUA_EGPRS_00_t, RESEGMENT, 1),
2081 M_UINT (PUA_EGPRS_00_t, EGPRS_WindowSize, 5),
2082
2083 M_REC_ARRAY (PUA_EGPRS_00_t, AccessTechnologyType, NrOfAccessTechnologies, 4),
2084
2085 M_UINT (PUA_EGPRS_00_t, ARAC_RETRANSMISSION_REQUEST, 1),
2086 M_UINT (PUA_EGPRS_00_t, TLLI_BLOCK_CHANNEL_CODING, 1),
2087
2088 M_NEXT_EXIST (PUA_EGPRS_00_t, Exist_BEP_PERIOD2, 1),
2089 M_UINT (PUA_EGPRS_00_t, BEP_PERIOD2, 4),
2090
Vadim Yanitskiy48587d52020-08-22 02:08:25 +07002091 M_TYPE (PUA_EGPRS_00_t, Packet_Timing_Advance, Packet_Timing_Advance_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002092
2093 M_NEXT_EXIST (PUA_EGPRS_00_t, Exist_Packet_Extended_Timing_Advance, 1),
2094 M_UINT (PUA_EGPRS_00_t, Packet_Extended_Timing_Advance, 2),
2095
2096 M_NEXT_EXIST (PUA_EGPRS_00_t, Exist_Frequency_Parameters, 1),
2097 M_TYPE (PUA_EGPRS_00_t, Frequency_Parameters, Frequency_Parameters_t),
2098
2099 M_UNION (PUA_EGPRS_00_t, 4),
2100 CSN_ERROR (PUA_EGPRS_00_t, "00 <extension>", CSN_ERROR_STREAM_NOT_SUPPORTED),
2101 M_TYPE (PUA_EGPRS_00_t, u.Dynamic_Allocation, Dynamic_Allocation_t),
2102 M_TYPE (PUA_EGPRS_00_t, u.MultiBlock_Allocation, MultiBlock_Allocation_t),
2103 CSN_ERROR (PUA_EGPRS_00_t, "11 <Fixed Allocation>", CSN_ERROR_STREAM_NOT_SUPPORTED),
2104CSN_DESCR_END (PUA_EGPRS_00_t)
2105
2106static const
2107CSN_DESCR_BEGIN(PUA_EGPRS_t)
2108 M_UNION (PUA_EGPRS_t, 4),
2109 M_TYPE (PUA_EGPRS_t, u.PUA_EGPRS_00, PUA_EGPRS_00_t),
2110 CSN_ERROR (PUA_EGPRS_t, "01 <PUA EGPRS>", CSN_ERROR_STREAM_NOT_SUPPORTED),
2111 CSN_ERROR (PUA_EGPRS_t, "10 <PUA EGPRS>", CSN_ERROR_STREAM_NOT_SUPPORTED),
2112 CSN_ERROR (PUA_EGPRS_t, "11 <PUA EGPRS>", CSN_ERROR_STREAM_NOT_SUPPORTED),
2113CSN_DESCR_END (PUA_EGPRS_t)
2114
2115static const
2116CSN_DESCR_BEGIN(Packet_Uplink_Assignment_t)
2117 M_UINT (Packet_Uplink_Assignment_t, MESSAGE_TYPE, 6),
2118 M_UINT (Packet_Uplink_Assignment_t, PAGE_MODE, 2),
2119
2120 M_NEXT_EXIST (Packet_Uplink_Assignment_t, Exist_PERSISTENCE_LEVEL, 1),
2121 M_UINT_ARRAY (Packet_Uplink_Assignment_t, PERSISTENCE_LEVEL, 4, 4),
2122
2123 M_TYPE (Packet_Uplink_Assignment_t, ID, PacketUplinkID_t),
2124
2125 M_UNION (Packet_Uplink_Assignment_t, 2),
2126 M_TYPE (Packet_Uplink_Assignment_t, u.PUA_GPRS_Struct, PUA_GPRS_t),
2127 M_TYPE (Packet_Uplink_Assignment_t, u.PUA_EGPRS_Struct, PUA_EGPRS_t),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04002128
2129 M_PADDING_BITS(Packet_Uplink_Assignment_t ),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002130CSN_DESCR_END (Packet_Uplink_Assignment_t)
2131
2132/*< Packet Downlink Assignment message content > */
2133static const
2134CSN_DESCR_BEGIN(Measurement_Mapping_struct_t)
2135 M_TYPE (Measurement_Mapping_struct_t, Measurement_Starting_Time, Starting_Frame_Number_t),
2136 M_UINT (Measurement_Mapping_struct_t, MEASUREMENT_INTERVAL, 5),
2137 M_UINT (Measurement_Mapping_struct_t, MEASUREMENT_BITMAP, 8),
2138CSN_DESCR_END (Measurement_Mapping_struct_t)
2139
2140static const
2141CSN_ChoiceElement_t PacketDownlinkID[] =
2142{
Pau Espin Pedrol7cce8252020-01-24 16:41:14 +01002143 {1, 0, 0, M_TYPE(PacketDownlinkID_t, u.Global_TFI, Global_TFI_t)},
2144 {2, 0x02, 0, M_UINT(PacketDownlinkID_t, u.TLLI, 32)},
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002145};
2146
2147static const
2148CSN_DESCR_BEGIN(PacketDownlinkID_t)
2149 M_CHOICE (PacketDownlinkID_t, UnionType, PacketDownlinkID, ElementsOf(PacketDownlinkID)),
2150CSN_DESCR_END (PacketDownlinkID_t)
2151
2152static const
2153CSN_DESCR_BEGIN(PDA_AdditionsR99_t)
2154 M_NEXT_EXIST (PDA_AdditionsR99_t, Exist_EGPRS_Params, 4), /*if Exist_EGPRS_Params == FALSE then none of the following 4 vars exist */
2155 M_UINT (PDA_AdditionsR99_t, EGPRS_WindowSize, 5),
2156 M_UINT (PDA_AdditionsR99_t, LINK_QUALITY_MEASUREMENT_MODE, 2),
2157 M_NEXT_EXIST (PDA_AdditionsR99_t, Exist_BEP_PERIOD2, 1),
2158 M_UINT (PDA_AdditionsR99_t, BEP_PERIOD2, 4),
2159
2160 M_NEXT_EXIST (PDA_AdditionsR99_t, Exist_Packet_Extended_Timing_Advance, 1),
2161 M_UINT (PDA_AdditionsR99_t, Packet_Extended_Timing_Advance, 2),
2162
2163 M_NEXT_EXIST (PDA_AdditionsR99_t, Exist_COMPACT_ReducedMA, 1),
2164 M_TYPE (PDA_AdditionsR99_t, COMPACT_ReducedMA, COMPACT_ReducedMA_t),
2165CSN_DESCR_END (PDA_AdditionsR99_t)
2166
2167static const
2168CSN_DESCR_BEGIN (Packet_Downlink_Assignment_t)
2169 M_UINT (Packet_Downlink_Assignment_t, MESSAGE_TYPE, 6),
2170 M_UINT (Packet_Downlink_Assignment_t, PAGE_MODE, 2),
2171
2172 M_NEXT_EXIST (Packet_Downlink_Assignment_t, Exist_PERSISTENCE_LEVEL, 1),
2173 M_UINT_ARRAY (Packet_Downlink_Assignment_t, PERSISTENCE_LEVEL, 4, 4),
2174
2175 M_TYPE (Packet_Downlink_Assignment_t, ID, PacketDownlinkID_t),
2176
2177 M_FIXED (Packet_Downlink_Assignment_t, 1, 0x00),/*-- Message escape */
2178
2179 M_UINT (Packet_Downlink_Assignment_t, MAC_MODE, 2),
Anders Broman8ea3cbe2020-01-28 17:36:33 +01002180 M_UINT (Packet_Downlink_Assignment_t, RLC_MODE, 1),
2181 M_UINT (Packet_Downlink_Assignment_t, CONTROL_ACK, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002182 M_UINT (Packet_Downlink_Assignment_t, TIMESLOT_ALLOCATION, 8),
2183 M_TYPE (Packet_Downlink_Assignment_t, Packet_Timing_Advance, Packet_Timing_Advance_t),
2184
2185 M_NEXT_EXIST (Packet_Downlink_Assignment_t, Exist_P0_and_BTS_PWR_CTRL_MODE, 3),
2186 M_UINT (Packet_Downlink_Assignment_t, P0, 4),
Anders Broman8ea3cbe2020-01-28 17:36:33 +01002187 M_UINT (Packet_Downlink_Assignment_t, BTS_PWR_CTRL_MODE, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002188 M_UINT (Packet_Downlink_Assignment_t, PR_MODE, 1),
2189
2190 M_NEXT_EXIST (Packet_Downlink_Assignment_t, Exist_Frequency_Parameters, 1),
2191 M_TYPE (Packet_Downlink_Assignment_t, Frequency_Parameters, Frequency_Parameters_t),
2192
2193 M_NEXT_EXIST (Packet_Downlink_Assignment_t, Exist_DOWNLINK_TFI_ASSIGNMENT, 1),
2194 M_UINT (Packet_Downlink_Assignment_t, DOWNLINK_TFI_ASSIGNMENT, 5),
2195
2196 M_NEXT_EXIST (Packet_Downlink_Assignment_t, Exist_Power_Control_Parameters, 1),
2197 M_TYPE (Packet_Downlink_Assignment_t, Power_Control_Parameters, Power_Control_Parameters_t),
2198
2199 M_NEXT_EXIST (Packet_Downlink_Assignment_t, Exist_TBF_Starting_Time, 1),
2200 M_TYPE (Packet_Downlink_Assignment_t, TBF_Starting_Time, Starting_Frame_Number_t),
2201
2202 M_NEXT_EXIST (Packet_Downlink_Assignment_t, Exist_Measurement_Mapping, 1),
2203 M_TYPE (Packet_Downlink_Assignment_t, Measurement_Mapping, Measurement_Mapping_struct_t),
2204
2205 M_NEXT_EXIST_OR_NULL(Packet_Downlink_Assignment_t, Exist_AdditionsR99, 1),
2206 M_TYPE (Packet_Downlink_Assignment_t, AdditionsR99, PDA_AdditionsR99_t),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04002207
2208 M_PADDING_BITS (Packet_Downlink_Assignment_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002209CSN_DESCR_END (Packet_Downlink_Assignment_t)
2210
2211typedef Packet_Downlink_Assignment_t pdlaCheck_t;
2212
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01002213#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002214static const
2215CSN_DESCR_BEGIN(pdlaCheck_t)
2216 M_UINT (pdlaCheck_t, MESSAGE_TYPE, 6),
2217 M_UINT (pdlaCheck_t, PAGE_MODE, 2),
2218
2219 M_NEXT_EXIST (pdlaCheck_t, Exist_PERSISTENCE_LEVEL, 1),
2220 M_UINT_ARRAY (pdlaCheck_t, PERSISTENCE_LEVEL, 4, 4),
2221
2222 M_TYPE (pdlaCheck_t, ID, PacketDownlinkID_t),
2223CSN_DESCR_END (pdlaCheck_t)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01002224#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002225
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01002226#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002227/* DTM Packet UL Assignment */
2228static const
2229CSN_DESCR_BEGIN(DTM_Packet_Uplink_Assignment_t)
2230 M_UINT (DTM_Packet_Uplink_Assignment_t, CHANNEL_CODING_COMMAND, 2),
Anders Broman8ea3cbe2020-01-28 17:36:33 +01002231 M_UINT (DTM_Packet_Uplink_Assignment_t, TLLI_BLOCK_CHANNEL_CODING, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002232 M_TYPE (DTM_Packet_Uplink_Assignment_t, Packet_Timing_Advance, Packet_Timing_Advance_t),
2233
2234 M_UNION (DTM_Packet_Uplink_Assignment_t, 3),
2235 CSN_ERROR (DTM_Packet_Uplink_Assignment_t, "Not Implemented", CSN_ERROR_STREAM_NOT_SUPPORTED),
2236 M_TYPE (DTM_Packet_Uplink_Assignment_t, u.DTM_Dynamic_Allocation, DTM_Dynamic_Allocation_t),
2237 M_TYPE (DTM_Packet_Uplink_Assignment_t, u.DTM_Single_Block_Allocation, DTM_Single_Block_Allocation_t),
2238 M_NEXT_EXIST_OR_NULL (DTM_Packet_Uplink_Assignment_t, Exist_EGPRS_Parameters, 3),
2239 M_UINT (DTM_Packet_Uplink_Assignment_t, EGPRS_CHANNEL_CODING_COMMAND, 4),
2240 M_UINT (DTM_Packet_Uplink_Assignment_t, RESEGMENT, 1),
2241 M_UINT (DTM_Packet_Uplink_Assignment_t, EGPRS_WindowSize, 5),
2242 M_NEXT_EXIST (DTM_Packet_Uplink_Assignment_t, Exist_Packet_Extended_Timing_Advance, 1),
2243 M_UINT (DTM_Packet_Uplink_Assignment_t, Packet_Extended_Timing_Advance, 2),
2244CSN_DESCR_END(DTM_Packet_Uplink_Assignment_t)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01002245#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002246
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01002247#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002248static const
2249CSN_DESCR_BEGIN(DTM_UL_t)
2250 M_TYPE (DTM_UL_t, DTM_Packet_Uplink_Assignment, DTM_Packet_Uplink_Assignment_t),
2251CSN_DESCR_END(DTM_UL_t)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01002252#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002253
2254/* DTM Packet DL Assignment */
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01002255#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002256static const
2257CSN_DESCR_BEGIN(DTM_Packet_Downlink_Assignment_t)
2258 M_UINT (DTM_Packet_Downlink_Assignment_t, MAC_MODE, 2),
Anders Broman8ea3cbe2020-01-28 17:36:33 +01002259 M_UINT (DTM_Packet_Downlink_Assignment_t, RLC_MODE ,1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002260 M_UINT (DTM_Packet_Downlink_Assignment_t, TIMESLOT_ALLOCATION, 8),
2261 M_TYPE (DTM_Packet_Downlink_Assignment_t, Packet_Timing_Advance, Packet_Timing_Advance_t),
2262
2263 M_NEXT_EXIST (DTM_Packet_Downlink_Assignment_t, Exist_P0_and_BTS_PWR_CTRL_MODE, 3),
2264 M_UINT (DTM_Packet_Downlink_Assignment_t, P0, 4),
Anders Broman8ea3cbe2020-01-28 17:36:33 +01002265 M_UINT (DTM_Packet_Downlink_Assignment_t, BTS_PWR_CTRL_MODE, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002266 M_UINT (DTM_Packet_Downlink_Assignment_t, PR_MODE, 1),
2267
2268 M_NEXT_EXIST (DTM_Packet_Downlink_Assignment_t, Exist_Power_Control_Parameters, 1),
2269 M_TYPE (DTM_Packet_Downlink_Assignment_t, Power_Control_Parameters, Power_Control_Parameters_t),
2270
2271 M_NEXT_EXIST (DTM_Packet_Downlink_Assignment_t, Exist_DOWNLINK_TFI_ASSIGNMENT, 1),
2272 M_UINT (DTM_Packet_Downlink_Assignment_t, DOWNLINK_TFI_ASSIGNMENT, 5),
2273
2274 M_NEXT_EXIST (DTM_Packet_Downlink_Assignment_t, Exist_Measurement_Mapping, 1),
2275 M_TYPE (DTM_Packet_Downlink_Assignment_t, Measurement_Mapping, Measurement_Mapping_struct_t),
2276 M_NEXT_EXIST_OR_NULL (DTM_Packet_Downlink_Assignment_t, EGPRS_Mode, 2),
2277 M_UINT (DTM_Packet_Downlink_Assignment_t, EGPRS_WindowSize, 5),
2278 M_UINT (DTM_Packet_Downlink_Assignment_t, LINK_QUALITY_MEASUREMENT_MODE, 2),
2279 M_NEXT_EXIST (DTM_Packet_Downlink_Assignment_t, Exist_Packet_Extended_Timing_Advance, 1),
2280 M_UINT (DTM_Packet_Downlink_Assignment_t, Packet_Extended_Timing_Advance, 2),
2281CSN_DESCR_END(DTM_Packet_Downlink_Assignment_t)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01002282#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002283
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01002284#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002285static const
2286CSN_DESCR_BEGIN(DTM_DL_t)
2287 M_TYPE (DTM_DL_t, DTM_Packet_Downlink_Assignment, DTM_Packet_Downlink_Assignment_t),
2288CSN_DESCR_END(DTM_DL_t)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01002289#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002290
2291/* GPRS Broadcast Information */
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01002292#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002293static const
2294CSN_DESCR_BEGIN(DTM_GPRS_Broadcast_Information_t)
2295 M_TYPE (DTM_GPRS_Broadcast_Information_t, GPRS_Cell_Options, GPRS_Cell_Options_t),
2296 M_TYPE (DTM_GPRS_Broadcast_Information_t, GPRS_Power_Control_Parameters, GPRS_Power_Control_Parameters_t),
2297CSN_DESCR_END(DTM_GPRS_Broadcast_Information_t)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01002298#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002299
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01002300#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002301static const
2302CSN_DESCR_BEGIN(DTM_GPRS_B_t)
2303 M_TYPE (DTM_GPRS_B_t, DTM_GPRS_Broadcast_Information, DTM_GPRS_Broadcast_Information_t),
2304CSN_DESCR_END(DTM_GPRS_B_t)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01002305#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002306
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01002307#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002308static const
2309CSN_DESCR_BEGIN(DTM_Channel_Request_Description_t)
2310 M_UINT (DTM_Channel_Request_Description_t, DTM_Pkt_Est_Cause, 2),
2311 M_TYPE (DTM_Channel_Request_Description_t, Channel_Request_Description, Channel_Request_Description_t),
2312 M_NEXT_EXIST (DTM_Channel_Request_Description_t, Exist_PFI, 1),
2313 M_UINT (DTM_Channel_Request_Description_t, PFI, 7),
2314CSN_DESCR_END(DTM_Channel_Request_Description_t)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01002315#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002316/* DTM */
2317
2318/*< Packet Paging Request message content > */
2319typedef struct
2320{
2321 guint8 Length_of_Mobile_Identity_contents;/* bit (4) */
2322 guint8 Mobile_Identity[8];/* octet (val (Length of Mobile Identity contents)) */
2323} Mobile_Identity_t; /* helper */
2324
2325static const
2326CSN_DESCR_BEGIN(Mobile_Identity_t)
2327 M_UINT (Mobile_Identity_t, Length_of_Mobile_Identity_contents, 4),
2328 M_VAR_ARRAY (Mobile_Identity_t, Mobile_Identity, Length_of_Mobile_Identity_contents, 0),
2329CSN_DESCR_END (Mobile_Identity_t)
2330
2331static const
2332CSN_DESCR_BEGIN(Page_request_for_TBF_establishment_t)
2333 M_UNION (Page_request_for_TBF_establishment_t, 2),
2334 M_UINT_ARRAY (Page_request_for_TBF_establishment_t, u.PTMSI, 8, 4),/* bit (32) == 8*4 */
2335 M_TYPE (Page_request_for_TBF_establishment_t, u.Mobile_Identity, Mobile_Identity_t),
2336CSN_DESCR_END (Page_request_for_TBF_establishment_t)
2337
2338static const
2339CSN_DESCR_BEGIN(Page_request_for_RR_conn_t)
2340 M_UNION (Page_request_for_RR_conn_t, 2),
2341 M_UINT_ARRAY (Page_request_for_RR_conn_t, u.TMSI, 8, 4),/* bit (32) == 8*4 */
2342 M_TYPE (Page_request_for_RR_conn_t, u.Mobile_Identity, Mobile_Identity_t),
2343
2344 M_UINT (Page_request_for_RR_conn_t, CHANNEL_NEEDED, 2),
2345
2346 M_NEXT_EXIST (Page_request_for_RR_conn_t, Exist_eMLPP_PRIORITY, 1),
2347 M_UINT (Page_request_for_RR_conn_t, eMLPP_PRIORITY, 3),
2348CSN_DESCR_END (Page_request_for_RR_conn_t)
2349
2350static const
2351CSN_DESCR_BEGIN(Repeated_Page_info_t)
2352 M_UNION (Repeated_Page_info_t, 2),
2353 M_TYPE (Repeated_Page_info_t, u.Page_req_TBF, Page_request_for_TBF_establishment_t),
2354 M_TYPE (Repeated_Page_info_t, u.Page_req_RR, Page_request_for_RR_conn_t),
2355CSN_DESCR_END (Repeated_Page_info_t)
2356
2357static const
2358CSN_DESCR_BEGIN(Packet_Paging_Request_t)
2359 M_UINT (Packet_Paging_Request_t, MESSAGE_TYPE, 6),
2360 M_UINT (Packet_Paging_Request_t, PAGE_MODE, 2),
2361
2362 M_NEXT_EXIST (Packet_Paging_Request_t, Exist_PERSISTENCE_LEVEL, 1),
2363 M_UINT_ARRAY (Packet_Paging_Request_t, PERSISTENCE_LEVEL, 4, 4), /* 4bit*4 */
2364
2365 M_NEXT_EXIST (Packet_Paging_Request_t, Exist_NLN, 1),
2366 M_UINT (Packet_Paging_Request_t, NLN, 2),
2367
2368 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 +04002369 M_PADDING_BITS(Packet_Paging_Request_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002370CSN_DESCR_END (Packet_Paging_Request_t)
2371
2372static const
2373CSN_DESCR_BEGIN(Packet_PDCH_Release_t)
2374 M_UINT (Packet_PDCH_Release_t, MESSAGE_TYPE, 6),
2375 M_UINT (Packet_PDCH_Release_t, PAGE_MODE, 2),
2376
2377 M_FIXED (Packet_PDCH_Release_t, 1, 0x01),
2378 M_UINT (Packet_PDCH_Release_t, TIMESLOTS_AVAILABLE, 8),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04002379 M_PADDING_BITS(Packet_PDCH_Release_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002380CSN_DESCR_END (Packet_PDCH_Release_t)
2381
2382/*< Packet Power Control/Timing Advance message content >*/
2383static const
2384CSN_DESCR_BEGIN(GlobalTimingAndPower_t)
2385 M_TYPE (GlobalTimingAndPower_t, Global_Packet_Timing_Advance, Global_Packet_Timing_Advance_t),
2386 M_TYPE (GlobalTimingAndPower_t, Power_Control_Parameters, Power_Control_Parameters_t),
2387CSN_DESCR_END (GlobalTimingAndPower_t)
2388
2389static const
2390CSN_DESCR_BEGIN(GlobalTimingOrPower_t)
2391 M_UNION (GlobalTimingOrPower_t, 2),
2392 M_TYPE (GlobalTimingOrPower_t, u.Global_Packet_Timing_Advance, Global_Packet_Timing_Advance_t),
2393 M_TYPE (GlobalTimingOrPower_t, u.Power_Control_Parameters, Power_Control_Parameters_t),
2394CSN_DESCR_END (GlobalTimingOrPower_t)
2395
2396static const
2397CSN_ChoiceElement_t PacketPowerControlTimingAdvanceID[] =
2398{
Pau Espin Pedrol7cce8252020-01-24 16:41:14 +01002399 {1, 0, 0, M_TYPE(PacketPowerControlTimingAdvanceID_t, u.Global_TFI, Global_TFI_t)},
2400 {3, 0x06, 0, M_UINT(PacketPowerControlTimingAdvanceID_t, u.TQI, 16)},
2401 {3, 0x07, 0, M_TYPE(PacketPowerControlTimingAdvanceID_t, u.Packet_Request_Reference, Packet_Request_Reference_t)},
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002402};
2403
2404static const
2405CSN_DESCR_BEGIN(PacketPowerControlTimingAdvanceID_t)
2406 M_CHOICE (PacketPowerControlTimingAdvanceID_t, UnionType, PacketPowerControlTimingAdvanceID, ElementsOf(PacketPowerControlTimingAdvanceID)),
2407CSN_DESCR_END (PacketPowerControlTimingAdvanceID_t)
2408
2409static const
2410CSN_DESCR_BEGIN(Packet_Power_Control_Timing_Advance_t)
2411 M_UINT (Packet_Power_Control_Timing_Advance_t, MESSAGE_TYPE, 6),
2412 M_UINT (Packet_Power_Control_Timing_Advance_t, PAGE_MODE, 2),
2413
2414 M_TYPE (Packet_Power_Control_Timing_Advance_t, ID, PacketPowerControlTimingAdvanceID_t),
2415
2416 /*-- Message escape*/
2417 M_FIXED (Packet_Power_Control_Timing_Advance_t, 1, 0x00),
2418
2419 M_NEXT_EXIST (Packet_Power_Control_Timing_Advance_t, Exist_Global_Power_Control_Parameters, 1),
2420 M_TYPE (Packet_Power_Control_Timing_Advance_t, Global_Power_Control_Parameters, Global_Power_Control_Parameters_t),
2421
2422 M_UNION (Packet_Power_Control_Timing_Advance_t, 2),
2423 M_TYPE (Packet_Power_Control_Timing_Advance_t, u.GlobalTimingAndPower, GlobalTimingAndPower_t),
2424 M_TYPE (Packet_Power_Control_Timing_Advance_t, u.GlobalTimingOrPower, GlobalTimingOrPower_t),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04002425
2426 M_PADDING_BITS(Packet_Power_Control_Timing_Advance_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002427CSN_DESCR_END (Packet_Power_Control_Timing_Advance_t)
2428
2429/*< Packet Queueing Notification message content > */
2430static const
2431CSN_DESCR_BEGIN(Packet_Queueing_Notification_t)
2432 M_UINT (Packet_Queueing_Notification_t, MESSAGE_TYPE, 6),
2433 M_UINT (Packet_Queueing_Notification_t, PAGE_MODE, 2),
2434
2435 M_FIXED (Packet_Queueing_Notification_t, 3, 0x07),/* 111 Fixed */
2436 M_TYPE (Packet_Queueing_Notification_t, Packet_Request_Reference, Packet_Request_Reference_t),
2437
2438 M_UINT (Packet_Queueing_Notification_t, TQI, 16),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04002439 M_PADDING_BITS(Packet_Queueing_Notification_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002440CSN_DESCR_END (Packet_Queueing_Notification_t)
2441
2442/* USED in Packet Timeslot Reconfigure message content
2443 * This is almost the same structure as used in
2444 * <Packet Uplink Assignment message content> but UPLINK_TFI_ASSIGNMENT is removed.
2445 */
2446static const
2447CSN_DESCR_BEGIN(TRDynamic_Allocation_t)
2448 M_UINT (TRDynamic_Allocation_t, Extended_Dynamic_Allocation, 1),
2449
2450 M_NEXT_EXIST (TRDynamic_Allocation_t, Exist_P0, 2),
2451 M_UINT (TRDynamic_Allocation_t, P0, 4),
2452 M_UINT (TRDynamic_Allocation_t, PR_MODE, 1),
2453
2454 M_UINT (TRDynamic_Allocation_t, USF_GRANULARITY, 1),
2455
2456 M_NEXT_EXIST (TRDynamic_Allocation_t, Exist_RLC_DATA_BLOCKS_GRANTED, 1),
2457 M_UINT (TRDynamic_Allocation_t, RLC_DATA_BLOCKS_GRANTED, 8),
2458
2459 M_NEXT_EXIST (TRDynamic_Allocation_t, Exist_TBF_Starting_Time, 1),
2460 M_TYPE (TRDynamic_Allocation_t, TBF_Starting_Time, Starting_Frame_Number_t),
2461
2462 M_UNION (TRDynamic_Allocation_t, 2),
2463 M_TYPE_ARRAY (TRDynamic_Allocation_t, u.Timeslot_Allocation, Timeslot_Allocation_t, 8),
2464 M_TYPE (TRDynamic_Allocation_t, u.Timeslot_Allocation_Power_Ctrl_Param, Timeslot_Allocation_Power_Ctrl_Param_t),
2465CSN_DESCR_END (TRDynamic_Allocation_t)
2466
2467/*< Packet Timeslot Reconfigure message content > */
2468static const
2469CSN_DESCR_BEGIN(PTR_GPRS_AdditionsR99_t)
2470 M_NEXT_EXIST (PTR_GPRS_AdditionsR99_t, Exist_Packet_Extended_Timing_Advance, 1),
2471 M_UINT (PTR_GPRS_AdditionsR99_t, Packet_Extended_Timing_Advance, 2),
2472CSN_DESCR_END (PTR_GPRS_AdditionsR99_t)
2473
2474static const
2475CSN_DESCR_BEGIN (PTR_GPRS_t)
2476 M_UINT (PTR_GPRS_t, CHANNEL_CODING_COMMAND, 2),
2477 M_TYPE (PTR_GPRS_t, Common_Timeslot_Reconfigure_Data.Global_Packet_Timing_Advance, Global_Packet_Timing_Advance_t),
2478 M_UINT (PTR_GPRS_t, Common_Timeslot_Reconfigure_Data.DOWNLINK_RLC_MODE, 1),
2479 M_UINT (PTR_GPRS_t, Common_Timeslot_Reconfigure_Data.CONTROL_ACK, 1),
2480
2481 M_NEXT_EXIST (PTR_GPRS_t, Common_Timeslot_Reconfigure_Data.Exist_DOWNLINK_TFI_ASSIGNMENT, 1),
2482 M_UINT (PTR_GPRS_t, Common_Timeslot_Reconfigure_Data.DOWNLINK_TFI_ASSIGNMENT, 5),
2483
2484 M_NEXT_EXIST (PTR_GPRS_t, Common_Timeslot_Reconfigure_Data.Exist_UPLINK_TFI_ASSIGNMENT, 1),
2485 M_UINT (PTR_GPRS_t, Common_Timeslot_Reconfigure_Data.UPLINK_TFI_ASSIGNMENT, 5),
2486
2487 M_UINT (PTR_GPRS_t, Common_Timeslot_Reconfigure_Data.DOWNLINK_TIMESLOT_ALLOCATION, 8),
2488
2489 M_NEXT_EXIST (PTR_GPRS_t, Common_Timeslot_Reconfigure_Data.Exist_Frequency_Parameters, 1),
2490 M_TYPE (PTR_GPRS_t, Common_Timeslot_Reconfigure_Data.Frequency_Parameters, Frequency_Parameters_t),
2491
2492 M_UNION (PTR_GPRS_t, 2),
2493 M_TYPE (PTR_GPRS_t, u.Dynamic_Allocation, TRDynamic_Allocation_t),
2494 CSN_ERROR (PTR_GPRS_t, "1 - Fixed Allocation was removed", CSN_ERROR_STREAM_NOT_SUPPORTED),
2495
2496 M_NEXT_EXIST_OR_NULL(PTR_GPRS_t, Exist_AdditionsR99, 1),
2497 M_TYPE (PTR_GPRS_t, AdditionsR99, PTR_GPRS_AdditionsR99_t),
2498CSN_DESCR_END (PTR_GPRS_t)
2499
2500static const
2501CSN_DESCR_BEGIN(PTR_EGPRS_00_t)
2502 M_NEXT_EXIST (PTR_EGPRS_00_t, Exist_COMPACT_ReducedMA, 1),
2503 M_TYPE (PTR_EGPRS_00_t, COMPACT_ReducedMA, COMPACT_ReducedMA_t),
2504
2505 M_UINT (PTR_EGPRS_00_t, EGPRS_ChannelCodingCommand, 4),
2506 M_UINT (PTR_EGPRS_00_t, RESEGMENT, 1),
2507
2508 M_NEXT_EXIST (PTR_EGPRS_00_t, Exist_DOWNLINK_EGPRS_WindowSize, 1),
2509 M_UINT (PTR_EGPRS_00_t, DOWNLINK_EGPRS_WindowSize, 5),
2510
2511 M_NEXT_EXIST (PTR_EGPRS_00_t, Exist_UPLINK_EGPRS_WindowSize, 1),
2512 M_UINT (PTR_EGPRS_00_t, UPLINK_EGPRS_WindowSize, 5),
2513
2514 M_UINT (PTR_EGPRS_00_t, LINK_QUALITY_MEASUREMENT_MODE, 2),
2515
2516 M_TYPE (PTR_EGPRS_00_t, Common_Timeslot_Reconfigure_Data.Global_Packet_Timing_Advance, Global_Packet_Timing_Advance_t),
2517
2518 M_NEXT_EXIST (PTR_EGPRS_00_t, Exist_Packet_Extended_Timing_Advance, 1),
2519 M_UINT (PTR_EGPRS_00_t, Packet_Extended_Timing_Advance, 2),
2520
2521 M_UINT (PTR_EGPRS_00_t, Common_Timeslot_Reconfigure_Data.DOWNLINK_RLC_MODE, 1),
2522 M_UINT (PTR_EGPRS_00_t, Common_Timeslot_Reconfigure_Data.CONTROL_ACK, 1),
2523
2524 M_NEXT_EXIST (PTR_EGPRS_00_t, Common_Timeslot_Reconfigure_Data.Exist_DOWNLINK_TFI_ASSIGNMENT, 1),
2525 M_UINT (PTR_EGPRS_00_t, Common_Timeslot_Reconfigure_Data.DOWNLINK_TFI_ASSIGNMENT, 5),
2526
2527 M_NEXT_EXIST (PTR_EGPRS_00_t, Common_Timeslot_Reconfigure_Data.Exist_UPLINK_TFI_ASSIGNMENT, 1),
2528 M_UINT (PTR_EGPRS_00_t, Common_Timeslot_Reconfigure_Data.UPLINK_TFI_ASSIGNMENT, 5),
2529
2530 M_UINT (PTR_EGPRS_00_t, Common_Timeslot_Reconfigure_Data.DOWNLINK_TIMESLOT_ALLOCATION, 8),
2531
2532 M_NEXT_EXIST (PTR_EGPRS_00_t, Common_Timeslot_Reconfigure_Data.Exist_Frequency_Parameters, 1),
2533 M_TYPE (PTR_EGPRS_00_t, Common_Timeslot_Reconfigure_Data.Frequency_Parameters, Frequency_Parameters_t),
2534
2535 M_UNION (PTR_EGPRS_00_t, 2),
2536 M_TYPE (PTR_EGPRS_00_t, u.Dynamic_Allocation, TRDynamic_Allocation_t),
2537 CSN_ERROR (PTR_EGPRS_00_t, "1 <Fixed Allocation>", CSN_ERROR_STREAM_NOT_SUPPORTED),
2538CSN_DESCR_END (PTR_EGPRS_00_t)
2539
2540static const
2541CSN_DESCR_BEGIN(PTR_EGPRS_t)
2542 M_UNION (PTR_EGPRS_t, 4),
2543 M_TYPE (PTR_EGPRS_t, u.PTR_EGPRS_00, PTR_EGPRS_00_t),
2544 CSN_ERROR (PTR_EGPRS_t, "01 <PTR_EGPRS>", CSN_ERROR_STREAM_NOT_SUPPORTED),
2545 CSN_ERROR (PTR_EGPRS_t, "10 <PTR_EGPRS>", CSN_ERROR_STREAM_NOT_SUPPORTED),
2546 CSN_ERROR (PTR_EGPRS_t, "11 <PTR_EGPRS>", CSN_ERROR_STREAM_NOT_SUPPORTED),
2547CSN_DESCR_END (PTR_EGPRS_t)
2548
2549static const
2550CSN_DESCR_BEGIN(Packet_Timeslot_Reconfigure_t)
2551 M_UINT (Packet_Timeslot_Reconfigure_t, MESSAGE_TYPE, 6),
2552 M_UINT (Packet_Timeslot_Reconfigure_t, PAGE_MODE, 2),
2553
2554 M_FIXED (Packet_Timeslot_Reconfigure_t, 1, 0x00),
2555 M_TYPE (Packet_Timeslot_Reconfigure_t, Global_TFI, Global_TFI_t),
2556
2557 M_UNION (Packet_Timeslot_Reconfigure_t, 2),
2558 M_TYPE (Packet_Timeslot_Reconfigure_t, u.PTR_GPRS_Struct, PTR_GPRS_t),
2559 M_TYPE (Packet_Timeslot_Reconfigure_t, u.PTR_EGPRS_Struct, PTR_EGPRS_t),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04002560
2561 M_PADDING_BITS(Packet_Timeslot_Reconfigure_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002562CSN_DESCR_END (Packet_Timeslot_Reconfigure_t)
2563
2564typedef Packet_Timeslot_Reconfigure_t PTRCheck_t;
2565
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01002566#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002567static const
2568CSN_DESCR_BEGIN(PTRCheck_t)
2569 M_UINT (PTRCheck_t, MESSAGE_TYPE, 6),
2570 M_UINT (PTRCheck_t, PAGE_MODE, 2),
2571 M_FIXED (PTRCheck_t, 1, 0x00),/* 0 fixed */
2572 M_TYPE (PTRCheck_t, Global_TFI, Global_TFI_t),
2573CSN_DESCR_END (PTRCheck_t)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01002574#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002575
2576/*< Packet PRACH Parameters message content > */
2577static const
2578CSN_DESCR_BEGIN(PRACH_Control_t)
2579 M_UINT_ARRAY (PRACH_Control_t, ACC_CONTR_CLASS, 8, 2), /* bit (16) == 8bit*2 */
2580 M_UINT_ARRAY (PRACH_Control_t, MAX_RETRANS, 2, 4), /* bit (2) * 4 */
2581 M_UINT (PRACH_Control_t, S, 4),
2582 M_UINT (PRACH_Control_t, TX_INT, 4),
2583 M_NEXT_EXIST (PRACH_Control_t, Exist_PERSISTENCE_LEVEL, 1),
2584 M_UINT_ARRAY (PRACH_Control_t, PERSISTENCE_LEVEL, 4, 4),
2585CSN_DESCR_END (PRACH_Control_t)
2586
2587static const
2588CSN_DESCR_BEGIN(Cell_Allocation_t)
2589 M_REC_ARRAY (Cell_Allocation_t, RFL_Number, NoOfRFLs, 4),
2590CSN_DESCR_END (Cell_Allocation_t)
2591
2592static const
2593CSN_DESCR_BEGIN(HCS_t)
2594 M_UINT (HCS_t, PRIORITY_CLASS, 3),
2595 M_UINT (HCS_t, HCS_THR, 5),
2596CSN_DESCR_END (HCS_t)
2597
2598static const
2599CSN_DESCR_BEGIN(Location_Repeat_t)
2600 M_UINT (Location_Repeat_t, PBCCH_LOCATION, 2),
2601 M_UINT (Location_Repeat_t, PSI1_REPEAT_PERIOD, 4),
2602CSN_DESCR_END (Location_Repeat_t)
2603
2604static const
2605CSN_DESCR_BEGIN(SI13_PBCCH_Location_t)
2606 M_UNION (SI13_PBCCH_Location_t, 2),
2607 M_UINT (SI13_PBCCH_Location_t, u.SI13_LOCATION, 1),
2608 M_TYPE (SI13_PBCCH_Location_t, u.lr, Location_Repeat_t),
2609CSN_DESCR_END (SI13_PBCCH_Location_t)
2610
2611static const
2612CSN_DESCR_BEGIN(Cell_Selection_t)
2613 M_UINT (Cell_Selection_t, BSIC, 6),
2614 M_UINT (Cell_Selection_t, CELL_BAR_ACCESS_2, 1),
2615 M_UINT (Cell_Selection_t, EXC_ACC, 1),
2616 M_UINT (Cell_Selection_t, SAME_RA_AS_SERVING_CELL, 1),
2617 M_NEXT_EXIST (Cell_Selection_t, Exist_RXLEV_and_TXPWR, 2),
2618 M_UINT (Cell_Selection_t, GPRS_RXLEV_ACCESS_MIN, 6),
2619 M_UINT (Cell_Selection_t, GPRS_MS_TXPWR_MAX_CCH, 5),
2620 M_NEXT_EXIST (Cell_Selection_t, Exist_OFFSET_and_TIME, 2),
2621 M_UINT (Cell_Selection_t, GPRS_TEMPORARY_OFFSET, 3),
2622 M_UINT (Cell_Selection_t, GPRS_PENALTY_TIME, 5),
2623 M_NEXT_EXIST (Cell_Selection_t, Exist_GPRS_RESELECT_OFFSET, 1),
2624 M_UINT (Cell_Selection_t, GPRS_RESELECT_OFFSET, 5),
2625 M_NEXT_EXIST (Cell_Selection_t, Exist_HCS, 1),
2626 M_TYPE (Cell_Selection_t, HCS, HCS_t),
2627 M_NEXT_EXIST (Cell_Selection_t, Exist_SI13_PBCCH_Location, 1),
2628 M_TYPE (Cell_Selection_t, SI13_PBCCH_Location, SI13_PBCCH_Location_t),
2629CSN_DESCR_END (Cell_Selection_t)
2630
2631static const
2632CSN_DESCR_BEGIN(Cell_Selection_Params_With_FreqDiff_t)
2633 M_VAR_BITMAP (Cell_Selection_Params_With_FreqDiff_t, FREQUENCY_DIFF, FREQ_DIFF_LENGTH, 0),
2634 M_TYPE (Cell_Selection_Params_With_FreqDiff_t, Cell_SelectionParams, Cell_Selection_t),
2635CSN_DESCR_END (Cell_Selection_Params_With_FreqDiff_t)
2636
Pau Espin Pedrol4c238702021-05-28 18:39:35 +02002637CSN_CallBackStatus_t callback_init_Cell_Selection_Params_FREQUENCY_DIFF(struct bitvec *vector, unsigned *readIndex, void* param1, void* param2)
Pau Espin Pedrolf3ac06b2020-03-26 18:13:19 +01002638{
2639 guint i;
2640 guint8 freq_diff_len = *(guint8*)param1;
2641 Cell_Selection_Params_With_FreqDiff_t *pCell_Sel_Param = (Cell_Selection_Params_With_FreqDiff_t*)param2;
2642
2643 for( i=0; i<16; i++, pCell_Sel_Param++ )
2644 {
2645 pCell_Sel_Param->FREQ_DIFF_LENGTH = freq_diff_len;
2646 }
2647
2648 return 0;
2649}
2650
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002651static const
2652CSN_DESCR_BEGIN(NeighbourCellParameters_t)
2653 M_UINT (NeighbourCellParameters_t, START_FREQUENCY, 10),
2654 M_TYPE (NeighbourCellParameters_t, Cell_Selection, Cell_Selection_t),
2655 M_UINT (NeighbourCellParameters_t, NR_OF_REMAINING_CELLS, 4),
2656 M_UINT_OFFSET(NeighbourCellParameters_t, FREQ_DIFF_LENGTH, 3, 1),/* offset 1 */
Pau Espin Pedrolf3ac06b2020-03-26 18:13:19 +01002657 M_CALLBACK (NeighbourCellParameters_t, callback_init_Cell_Selection_Params_FREQUENCY_DIFF, FREQ_DIFF_LENGTH, Cell_Selection_Params_With_FreqDiff),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002658 M_VAR_TARRAY (NeighbourCellParameters_t, Cell_Selection_Params_With_FreqDiff, Cell_Selection_Params_With_FreqDiff_t, NR_OF_REMAINING_CELLS),
2659CSN_DESCR_END (NeighbourCellParameters_t)
2660
2661static const
2662CSN_DESCR_BEGIN(NeighbourCellList_t)
2663 M_REC_TARRAY (NeighbourCellList_t, Parameters, NeighbourCellParameters_t, Count),
2664CSN_DESCR_END (NeighbourCellList_t)
2665
2666static const
2667CSN_DESCR_BEGIN(Cell_Selection_2_t)
2668 M_UINT (Cell_Selection_2_t, CELL_BAR_ACCESS_2, 1),
2669 M_UINT (Cell_Selection_2_t, EXC_ACC, 1),
2670 M_UINT (Cell_Selection_2_t, SAME_RA_AS_SERVING_CELL, 1),
2671 M_NEXT_EXIST (Cell_Selection_2_t, Exist_RXLEV_and_TXPWR, 2),
2672 M_UINT (Cell_Selection_2_t, GPRS_RXLEV_ACCESS_MIN, 6),
2673 M_UINT (Cell_Selection_2_t, GPRS_MS_TXPWR_MAX_CCH, 5),
2674 M_NEXT_EXIST (Cell_Selection_2_t, Exist_OFFSET_and_TIME, 2),
2675 M_UINT (Cell_Selection_2_t, GPRS_TEMPORARY_OFFSET, 3),
2676 M_UINT (Cell_Selection_2_t, GPRS_PENALTY_TIME, 5),
2677 M_NEXT_EXIST (Cell_Selection_2_t, Exist_GPRS_RESELECT_OFFSET, 1),
2678 M_UINT (Cell_Selection_2_t, GPRS_RESELECT_OFFSET, 5),
2679 M_NEXT_EXIST (Cell_Selection_2_t, Exist_HCS, 1),
2680 M_TYPE (Cell_Selection_2_t, HCS, HCS_t),
2681 M_NEXT_EXIST (Cell_Selection_2_t, Exist_SI13_PBCCH_Location, 1),
2682 M_TYPE (Cell_Selection_2_t, SI13_PBCCH_Location, SI13_PBCCH_Location_t),
2683CSN_DESCR_END (Cell_Selection_2_t)
2684
2685static const
2686CSN_DESCR_BEGIN(Packet_PRACH_Parameters_t)
2687 M_UINT (Packet_PRACH_Parameters_t, MESSAGE_TYPE, 6),
2688 M_UINT (Packet_PRACH_Parameters_t, PAGE_MODE, 2),
2689
2690 M_TYPE (Packet_PRACH_Parameters_t, PRACH_Control, PRACH_Control_t),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04002691 M_PADDING_BITS(Packet_PRACH_Parameters_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002692CSN_DESCR_END (Packet_PRACH_Parameters_t)
2693
2694/* < Packet Access Reject message content > */
2695static const
2696CSN_ChoiceElement_t RejectID[] =
2697{
Pau Espin Pedrol7cce8252020-01-24 16:41:14 +01002698 {1, 0x00, 0, M_UINT(RejectID_t, u.TLLI, 32)},
2699 {2, 0x02, 0, M_TYPE(RejectID_t, u.Packet_Request_Reference, Packet_Request_Reference_t)},
2700 {2, 0x03, 0, M_TYPE(RejectID_t, u.Global_TFI, Global_TFI_t)},
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002701};
2702
2703static const
2704CSN_DESCR_BEGIN(RejectID_t)
2705 M_CHOICE (RejectID_t, UnionType, RejectID, ElementsOf(RejectID)),
2706CSN_DESCR_END (RejectID_t)
2707
2708static const
2709CSN_DESCR_BEGIN(Reject_t)
2710 M_TYPE (Reject_t, ID, RejectID_t),
2711
2712 M_NEXT_EXIST (Reject_t, Exist_Wait, 2),
2713 M_UINT (Reject_t, WAIT_INDICATION, 8),
2714 M_UINT (Reject_t, WAIT_INDICATION_SIZE, 1),
2715CSN_DESCR_END (Reject_t)
2716
2717static const
2718CSN_DESCR_BEGIN(Packet_Access_Reject_t)
2719 M_UINT (Packet_Access_Reject_t, MESSAGE_TYPE, 6),
2720 M_UINT (Packet_Access_Reject_t, PAGE_MODE, 2),
2721
Pau Espin Pedrol81b40cb2020-03-23 15:23:51 +01002722 M_REC_TARRAY_1(Packet_Access_Reject_t, Reject, Reject_t, Count_Reject),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04002723 M_PADDING_BITS(Packet_Access_Reject_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002724CSN_DESCR_END (Packet_Access_Reject_t)
2725
2726/* < Packet Cell Change Order message content > */
2727static const
2728CSN_ChoiceElement_t PacketCellChangeOrderID[] =
2729{
Pau Espin Pedrol7cce8252020-01-24 16:41:14 +01002730 {1, 0, 0, M_TYPE(PacketCellChangeOrderID_t, u.Global_TFI, Global_TFI_t)},
2731 {2, 0x02, 0, M_UINT(PacketCellChangeOrderID_t, u.TLLI, 32)},
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002732};
2733/* PacketCellChangeOrderID_t; */
2734
2735static const
2736CSN_DESCR_BEGIN(PacketCellChangeOrderID_t)
2737 M_CHOICE (PacketCellChangeOrderID_t, UnionType, PacketCellChangeOrderID, ElementsOf(PacketCellChangeOrderID)),
2738CSN_DESCR_END (PacketCellChangeOrderID_t)
2739
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01002740#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002741static const
2742CSN_DESCR_BEGIN(h_FreqBsicCell_t)
2743 M_UINT (h_FreqBsicCell_t, BSIC, 6),
2744 M_TYPE (h_FreqBsicCell_t, Cell_Selection, Cell_Selection_t),
2745CSN_DESCR_END (h_FreqBsicCell_t)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01002746#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002747
2748static const CSN_DESCR_BEGIN(CellSelectionParamsWithFreqDiff_t)
2749 /*FREQUENCY_DIFF is really an integer but the number of bits to decode it are stored in FREQ_DIFF_LENGTH*/
2750 M_VAR_BITMAP (CellSelectionParamsWithFreqDiff_t, FREQUENCY_DIFF, FREQ_DIFF_LENGTH, 0),
2751 M_UINT (CellSelectionParamsWithFreqDiff_t, BSIC, 6),
2752 M_NEXT_EXIST (CellSelectionParamsWithFreqDiff_t, Exist_CellSelectionParams, 1),
2753 M_TYPE (CellSelectionParamsWithFreqDiff_t, CellSelectionParams, Cell_Selection_2_t),
2754CSN_DESCR_END (CellSelectionParamsWithFreqDiff_t)
2755
Pau Espin Pedrol4c238702021-05-28 18:39:35 +02002756CSN_CallBackStatus_t callback_init_Cell_Sel_Param_2_FREQUENCY_DIFF(struct bitvec *vector, unsigned *readIndex, void* param1, void* param2)
Pau Espin Pedrolf3ac06b2020-03-26 18:13:19 +01002757{
2758 guint i;
2759 guint8 freq_diff_len = *(guint8*)param1;
2760 CellSelectionParamsWithFreqDiff_t *pCell_Sel_Param = (CellSelectionParamsWithFreqDiff_t*)param2;
2761
2762 for( i=0; i<16; i++, pCell_Sel_Param++ )
2763 {
2764 pCell_Sel_Param->FREQ_DIFF_LENGTH = freq_diff_len;
2765 }
2766
2767 return 0;
2768}
2769
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002770static const
2771CSN_DESCR_BEGIN(Add_Frequency_list_t)
2772 M_UINT (Add_Frequency_list_t, START_FREQUENCY, 10),
2773 M_UINT (Add_Frequency_list_t, BSIC, 6),
2774
2775 M_NEXT_EXIST (Add_Frequency_list_t, Exist_Cell_Selection, 1),
2776 M_TYPE (Add_Frequency_list_t, Cell_Selection, Cell_Selection_2_t),
2777
2778 M_UINT (Add_Frequency_list_t, NR_OF_FREQUENCIES, 5),
2779 M_UINT_OFFSET(Add_Frequency_list_t, FREQ_DIFF_LENGTH, 3, 1),/*offset 1*/
2780
Pau Espin Pedrolf3ac06b2020-03-26 18:13:19 +01002781 M_CALLBACK (Add_Frequency_list_t, callback_init_Cell_Sel_Param_2_FREQUENCY_DIFF, FREQ_DIFF_LENGTH, CellSelectionParamsWithFreqDiff),
2782
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002783 M_VAR_TARRAY (Add_Frequency_list_t, CellSelectionParamsWithFreqDiff, CellSelectionParamsWithFreqDiff_t, NR_OF_FREQUENCIES),
2784CSN_DESCR_END (Add_Frequency_list_t)
2785
2786static const CSN_DESCR_BEGIN(Removed_Freq_Index_t)
2787 M_UINT(Removed_Freq_Index_t, REMOVED_FREQ_INDEX, 6),
2788CSN_DESCR_END(Removed_Freq_Index_t)
2789
2790static const
2791CSN_DESCR_BEGIN(NC_Frequency_list_t)
2792 M_NEXT_EXIST (NC_Frequency_list_t, Exist_REMOVED_FREQ, 2),
2793 M_UINT_OFFSET(NC_Frequency_list_t, NR_OF_REMOVED_FREQ, 5, 1),/*offset 1*/
2794 M_VAR_TARRAY (NC_Frequency_list_t, Removed_Freq_Index, Removed_Freq_Index_t, NR_OF_REMOVED_FREQ),
2795 M_REC_TARRAY (NC_Frequency_list_t, Add_Frequency, Add_Frequency_list_t, Count_Add_Frequency),
2796CSN_DESCR_END (NC_Frequency_list_t)
2797
2798static const
2799CSN_DESCR_BEGIN(NC_Measurement_Parameters_t)
2800 M_UINT (NC_Measurement_Parameters_t, NETWORK_CONTROL_ORDER, 2),
2801
2802 M_NEXT_EXIST (NC_Measurement_Parameters_t, Exist_NC, 3),
2803 M_UINT (NC_Measurement_Parameters_t, NC_NON_DRX_PERIOD, 3),
2804 M_UINT (NC_Measurement_Parameters_t, NC_REPORTING_PERIOD_I, 3),
2805 M_UINT (NC_Measurement_Parameters_t, NC_REPORTING_PERIOD_T, 3),
2806CSN_DESCR_END (NC_Measurement_Parameters_t)
2807
2808static const
2809CSN_DESCR_BEGIN(NC_Measurement_Parameters_with_Frequency_List_t)
2810 M_UINT (NC_Measurement_Parameters_with_Frequency_List_t, NETWORK_CONTROL_ORDER, 2),
2811
2812 M_NEXT_EXIST (NC_Measurement_Parameters_with_Frequency_List_t, Exist_NC, 3),
2813 M_UINT (NC_Measurement_Parameters_with_Frequency_List_t, NC_NON_DRX_PERIOD, 3),
2814 M_UINT (NC_Measurement_Parameters_with_Frequency_List_t, NC_REPORTING_PERIOD_I, 3),
2815 M_UINT (NC_Measurement_Parameters_with_Frequency_List_t, NC_REPORTING_PERIOD_T, 3),
2816
2817 M_NEXT_EXIST (NC_Measurement_Parameters_with_Frequency_List_t, Exist_NC_FREQUENCY_LIST, 1),
2818 M_TYPE (NC_Measurement_Parameters_with_Frequency_List_t, NC_Frequency_list, NC_Frequency_list_t),
2819CSN_DESCR_END (NC_Measurement_Parameters_with_Frequency_List_t)
2820
2821/*< Packet Cell Change Order message contents >*/
2822static const
2823CSN_DESCR_BEGIN(BA_IND_t)
2824 M_UINT (BA_IND_t, BA_IND, 1),
2825 M_UINT (BA_IND_t, BA_IND_3G, 1),
2826CSN_DESCR_END (BA_IND_t)
2827
2828static const
2829CSN_DESCR_BEGIN(GPRSReportPriority_t)
2830 M_UINT (GPRSReportPriority_t, NUMBER_CELLS, 7),
2831 M_VAR_BITMAP (GPRSReportPriority_t, REPORT_PRIORITY, NUMBER_CELLS, 0),
2832CSN_DESCR_END (GPRSReportPriority_t)
2833
2834static const
2835CSN_DESCR_BEGIN(OffsetThreshold_t)
2836 M_UINT (OffsetThreshold_t, REPORTING_OFFSET, 3),
2837 M_UINT (OffsetThreshold_t, REPORTING_THRESHOLD, 3),
2838CSN_DESCR_END (OffsetThreshold_t)
2839
2840static const
2841CSN_DESCR_BEGIN(GPRSMeasurementParams_PMO_PCCO_t)
2842 M_NEXT_EXIST (GPRSMeasurementParams_PMO_PCCO_t, Exist_MULTI_BAND_REPORTING, 1),
2843 M_UINT (GPRSMeasurementParams_PMO_PCCO_t, MULTI_BAND_REPORTING, 2),
2844
2845 M_NEXT_EXIST (GPRSMeasurementParams_PMO_PCCO_t, Exist_SERVING_BAND_REPORTING, 1),
2846 M_UINT (GPRSMeasurementParams_PMO_PCCO_t, SERVING_BAND_REPORTING, 2),
2847
2848 M_UINT (GPRSMeasurementParams_PMO_PCCO_t, SCALE_ORD, 2),
2849
2850 M_NEXT_EXIST (GPRSMeasurementParams_PMO_PCCO_t, Exist_OffsetThreshold900, 1),
2851 M_TYPE (GPRSMeasurementParams_PMO_PCCO_t, OffsetThreshold900, OffsetThreshold_t),
2852
2853 M_NEXT_EXIST (GPRSMeasurementParams_PMO_PCCO_t, Exist_OffsetThreshold1800, 1),
2854 M_TYPE (GPRSMeasurementParams_PMO_PCCO_t, OffsetThreshold1800, OffsetThreshold_t),
2855
2856 M_NEXT_EXIST (GPRSMeasurementParams_PMO_PCCO_t, Exist_OffsetThreshold400, 1),
2857 M_TYPE (GPRSMeasurementParams_PMO_PCCO_t, OffsetThreshold400, OffsetThreshold_t),
2858
2859 M_NEXT_EXIST (GPRSMeasurementParams_PMO_PCCO_t, Exist_OffsetThreshold1900, 1),
2860 M_TYPE (GPRSMeasurementParams_PMO_PCCO_t, OffsetThreshold1900, OffsetThreshold_t),
2861
2862 M_NEXT_EXIST (GPRSMeasurementParams_PMO_PCCO_t, Exist_OffsetThreshold850, 1),
2863 M_TYPE (GPRSMeasurementParams_PMO_PCCO_t, OffsetThreshold850, OffsetThreshold_t),
2864CSN_DESCR_END (GPRSMeasurementParams_PMO_PCCO_t)
2865
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01002866#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002867static const
2868CSN_DESCR_BEGIN(GPRSMeasurementParams3G_t)
2869 M_UINT (GPRSMeasurementParams3G_t, Qsearch_p, 4),
2870 M_UINT (GPRSMeasurementParams3G_t, SearchPrio3G, 1),
2871
2872 M_NEXT_EXIST (GPRSMeasurementParams3G_t, existRepParamsFDD, 2),
2873 M_UINT (GPRSMeasurementParams3G_t, RepQuantFDD, 1),
2874 M_UINT (GPRSMeasurementParams3G_t, MultiratReportingFDD, 2),
2875
2876 M_NEXT_EXIST (GPRSMeasurementParams3G_t, existReportingParamsFDD, 2),
2877 M_UINT (GPRSMeasurementParams3G_t, ReportingOffsetFDD, 3),
2878 M_UINT (GPRSMeasurementParams3G_t, ReportingThresholdFDD, 3),
2879
2880 M_NEXT_EXIST (GPRSMeasurementParams3G_t, existMultiratReportingTDD, 1),
2881 M_UINT (GPRSMeasurementParams3G_t, MultiratReportingTDD, 2),
2882
2883 M_NEXT_EXIST (GPRSMeasurementParams3G_t, existOffsetThresholdTDD, 2),
2884 M_UINT (GPRSMeasurementParams3G_t, ReportingOffsetTDD, 3),
2885 M_UINT (GPRSMeasurementParams3G_t, ReportingThresholdTDD, 3),
2886CSN_DESCR_END (GPRSMeasurementParams3G_t)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01002887#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002888
2889static const
2890CSN_DESCR_BEGIN(MultiratParams3G_t)
2891 M_NEXT_EXIST (MultiratParams3G_t, existMultiratReporting, 1),
2892 M_UINT (MultiratParams3G_t, MultiratReporting, 2),
2893
2894 M_NEXT_EXIST (MultiratParams3G_t, existOffsetThreshold, 1),
2895 M_TYPE (MultiratParams3G_t, OffsetThreshold, OffsetThreshold_t),
2896CSN_DESCR_END (MultiratParams3G_t)
2897
2898static const
2899CSN_DESCR_BEGIN(ENH_GPRSMeasurementParams3G_PMO_t)
2900 M_UINT (ENH_GPRSMeasurementParams3G_PMO_t, Qsearch_P, 4),
2901 M_UINT (ENH_GPRSMeasurementParams3G_PMO_t, SearchPrio3G, 1),
2902
2903 M_NEXT_EXIST (ENH_GPRSMeasurementParams3G_PMO_t, existRepParamsFDD, 2),
2904 M_UINT (ENH_GPRSMeasurementParams3G_PMO_t, RepQuantFDD, 1),
2905 M_UINT (ENH_GPRSMeasurementParams3G_PMO_t, MultiratReportingFDD, 2),
2906
2907 M_NEXT_EXIST (ENH_GPRSMeasurementParams3G_PMO_t, existOffsetThreshold, 1),
2908 M_TYPE (ENH_GPRSMeasurementParams3G_PMO_t, OffsetThreshold, OffsetThreshold_t),
2909
2910 M_TYPE (ENH_GPRSMeasurementParams3G_PMO_t, ParamsTDD, MultiratParams3G_t),
2911 M_TYPE (ENH_GPRSMeasurementParams3G_PMO_t, ParamsCDMA2000, MultiratParams3G_t),
2912CSN_DESCR_END (ENH_GPRSMeasurementParams3G_PMO_t)
2913
2914static const
2915CSN_DESCR_BEGIN(ENH_GPRSMeasurementParams3G_PCCO_t)
2916 M_UINT (ENH_GPRSMeasurementParams3G_PCCO_t, Qsearch_P, 4),
2917 M_UINT (ENH_GPRSMeasurementParams3G_PCCO_t, SearchPrio3G, 1),
2918
2919 M_NEXT_EXIST (ENH_GPRSMeasurementParams3G_PCCO_t, existRepParamsFDD, 2),
2920 M_UINT (ENH_GPRSMeasurementParams3G_PCCO_t, RepQuantFDD, 1),
2921 M_UINT (ENH_GPRSMeasurementParams3G_PCCO_t, MultiratReportingFDD, 2),
2922
2923 M_NEXT_EXIST (ENH_GPRSMeasurementParams3G_PCCO_t, existOffsetThreshold, 1),
2924 M_TYPE (ENH_GPRSMeasurementParams3G_PCCO_t, OffsetThreshold, OffsetThreshold_t),
2925
2926 M_TYPE (ENH_GPRSMeasurementParams3G_PCCO_t, ParamsTDD, MultiratParams3G_t),
2927CSN_DESCR_END (ENH_GPRSMeasurementParams3G_PCCO_t)
2928
2929static const
2930CSN_DESCR_BEGIN(N2_t)
2931 M_UINT (N2_t, REMOVED_3GCELL_INDEX, 7),
2932 M_UINT (N2_t, CELL_DIFF_LENGTH_3G, 3),
2933 M_VAR_BITMAP (N2_t, CELL_DIFF_3G, CELL_DIFF_LENGTH_3G, 0),
2934CSN_DESCR_END (N2_t)
2935
2936static const
2937CSN_DESCR_BEGIN (N1_t)
2938 M_UINT_OFFSET (N1_t, N2_Count, 5, 1), /*offset 1*/
2939 M_VAR_TARRAY (N1_t, N2s, N2_t, N2_Count),
2940CSN_DESCR_END (N1_t)
2941
2942static const
2943CSN_DESCR_BEGIN (Removed3GCellDescription_t)
2944 M_UINT_OFFSET (Removed3GCellDescription_t, N1_Count, 2, 1), /* offset 1 */
2945 M_VAR_TARRAY (Removed3GCellDescription_t, N1s, N1_t, N1_Count),
2946CSN_DESCR_END (Removed3GCellDescription_t)
2947
2948static const
2949CSN_DESCR_BEGIN(CDMA2000_Description_t)
2950 M_UINT (CDMA2000_Description_t, Complete_This, 1),
2951 CSN_ERROR (CDMA2000_Description_t, "Not Implemented", CSN_ERROR_STREAM_NOT_SUPPORTED),
2952CSN_DESCR_END (CDMA2000_Description_t)
2953
Pau Espin Pedrolf3ac06b2020-03-26 18:13:19 +01002954#if 0
2955static const guint8 NR_OF_FDD_CELLS_map[32] = {0, 10, 19, 28, 36, 44, 52, 60, 67, 74, 81, 88, 95, 102, 109, 116, 122, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
2956#endif
2957#if 0
2958static CSN_CallBackStatus_t callback_UTRAN_FDD_map_NrOfFrequencies(proto_tree *tree _U_, tvbuff_t *tvb _U_, void* param1, void* param2,
2959 int bit_offset _U_, int ett_csn1 _U_, packet_info* pinfo _U_)
2960{ /* TS 44.060 Table 11.2.9b.2.a */
2961 guint8 *pNrOfCells = (guint8*)param1;
2962 guint8 *pBitsInCellInfo = (guint8*)param2;
2963
2964 if ( *pNrOfCells < 32 )
2965 {
2966 *pBitsInCellInfo = NR_OF_FDD_CELLS_map[*pNrOfCells];
2967 }
2968 else
2969 {
2970 *pBitsInCellInfo = 0;
2971 }
2972
2973 return 0;
2974}
2975
2976static CSN_CallBackStatus_t callback_UTRAN_FDD_compute_FDD_CELL_INFORMATION(proto_tree *tree, tvbuff_t *tvb, void* param1, void* param2 _U_,
2977 int bit_offset, int ett_csn1, packet_info* pinfo _U_)
2978{
2979 proto_tree *subtree;
2980 UTRAN_FDD_NeighbourCells_t * pUtranFddNcell = (UTRAN_FDD_NeighbourCells_t*)param1;
2981 gint xdd_cell_info, wsize, nwi, jwi, w[64], i, iused;
2982 gint curr_bit_offset, idx;
2983
2984 curr_bit_offset = bit_offset;
2985 idx = pUtranFddNcell->BitsInCellInfo;
2986
2987 if ( idx > 0 )
2988 {
2989 subtree = proto_tree_add_subtree(tree, tvb, curr_bit_offset>>3, 1, ett_csn1, NULL, "FDD_CELL_INFORMATION: ");
2990
2991 if (pUtranFddNcell->Indic0)
2992 {
2993 proto_tree_add_uint(tree, hf_gsm_rlcmac_scrambling_code, tvb, curr_bit_offset>>3, 0, 0);
2994 proto_tree_add_uint(tree, hf_gsm_rlcmac_diversity, tvb, curr_bit_offset>>3, 0, 0);
2995 }
2996
2997 if (idx)
2998 {
2999 wsize = 10;
3000 nwi = 1;
3001 jwi = 0;
3002 i = 1;
3003
3004 while (idx > 0)
3005 {
3006 w[i] = tvb_get_bits(tvb, curr_bit_offset, wsize, ENC_BIG_ENDIAN);
3007 curr_bit_offset += wsize;
3008 idx -= wsize;
3009 if (w[i] == 0)
3010 {
3011 idx = 0;
3012 break;
3013 }
3014 if (++jwi==nwi)
3015 {
3016 jwi = 0;
3017 nwi <<= 1;
3018 wsize--;
3019 }
3020 i++;
3021 }
3022 if (idx < 0)
3023 {
3024 curr_bit_offset += idx;
3025 }
3026 iused = i-1;
3027
3028 for (i=1; i <= iused; i++)
3029 {
3030 xdd_cell_info = f_k(i, w, 1024);
3031 proto_tree_add_uint(subtree, hf_gsm_rlcmac_scrambling_code, tvb, curr_bit_offset>>3, 0, xdd_cell_info & 0x01FF);
3032 proto_tree_add_uint(subtree, hf_gsm_rlcmac_diversity, tvb, curr_bit_offset>>3, 0, (xdd_cell_info >> 9) & 0x01);
3033 }
3034 }
3035 }
3036
3037 return curr_bit_offset - bit_offset;
3038}
3039#endif
3040
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03003041static const
3042CSN_DESCR_BEGIN(UTRAN_FDD_NeighbourCells_t)
3043 M_UINT (UTRAN_FDD_NeighbourCells_t, ZERO, 1),
3044 M_UINT (UTRAN_FDD_NeighbourCells_t, UARFCN, 14),
3045 M_UINT (UTRAN_FDD_NeighbourCells_t, Indic0, 1),
3046 M_UINT (UTRAN_FDD_NeighbourCells_t, NrOfCells, 5),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03003047 M_VAR_BITMAP (UTRAN_FDD_NeighbourCells_t, CellInfo, BitsInCellInfo, 0),
3048CSN_DESCR_END (UTRAN_FDD_NeighbourCells_t)
3049
3050static const
3051CSN_DESCR_BEGIN(UTRAN_FDD_Description_t)
3052 M_NEXT_EXIST (UTRAN_FDD_Description_t, existBandwidth, 1),
3053 M_UINT (UTRAN_FDD_Description_t, Bandwidth, 3),
3054 M_REC_TARRAY (UTRAN_FDD_Description_t, CellParams, UTRAN_FDD_NeighbourCells_t, NrOfFrequencies),
3055CSN_DESCR_END (UTRAN_FDD_Description_t)
3056
Pau Espin Pedrolf3ac06b2020-03-26 18:13:19 +01003057static const guint8 NR_OF_TDD_CELLS_map[32] = {0, 9, 17, 25, 32, 39, 46, 53, 59, 65, 71, 77, 83, 89, 95, 101, 106, 111, 116, 121, 126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
3058static CSN_CallBackStatus_t callback_UTRAN_TDD_map_NrOfFrequencies(struct bitvec *vector, unsigned *readIndex, void* param1, void* param2)
3059{ /* TS 44.060 Table 11.2.9b.2.b */
3060 guint8 * pNrOfCells = (guint8*)param1;
3061 guint8 * pBitsInCellInfo = (guint8*)param2;
3062
3063 if ( *pNrOfCells < 32 )
3064 {
3065 *pBitsInCellInfo = NR_OF_TDD_CELLS_map[*pNrOfCells];
3066 }
3067 else
3068 {
3069 *pBitsInCellInfo = 0;
3070 }
3071
3072 return 0;
3073}
3074
3075static CSN_CallBackStatus_t callback_UTRAN_TDD_compute_TDD_CELL_INFORMATION(struct bitvec *vector, unsigned *readIndex, void* param1, void* param2)
3076{
3077 UTRAN_TDD_NeighbourCells_t *pUtranTddNcell = (UTRAN_TDD_NeighbourCells_t *)param1;
3078 gint wsize, nwi, jwi, w[64], i, iused;
3079 guint bit_offset, curr_bit_offset;
3080 gint idx;
3081
3082 bit_offset = *readIndex;
3083 curr_bit_offset = bit_offset;
3084 idx = pUtranTddNcell->BitsInCellInfo;
3085
3086 if ( idx > 0 )
3087 {
3088 /*
3089 subtree = proto_tree_add_subtree(tree, tvb, curr_bit_offset>>3, 1, ett_csn1, NULL, "TDD_CELL_INFORMATION: ");
3090
3091 if (pUtranTddNcell->Indic0)
3092 {
3093 proto_tree_add_uint(tree, hf_gsm_rlcmac_cell_parameter, tvb, curr_bit_offset>>3, 0, 0);
3094 proto_tree_add_uint(tree, hf_gsm_rlcmac_sync_case_tstd, tvb, curr_bit_offset>>3, 0, 0);
3095 proto_tree_add_uint(tree, hf_gsm_rlcmac_diversity_tdd, tvb, curr_bit_offset>>3, 0, 0);
3096 }
3097 */
3098
3099 if (idx)
3100 {
3101 wsize = 10;
3102 nwi = 1;
3103 jwi = 0;
3104 i = 1;
3105
3106 while (idx > 0)
3107 {
3108 w[i] = ntohs((uint16_t)bitvec_read_field(vector, &curr_bit_offset, wsize));
3109 idx -= wsize;
3110 if (w[i] == 0)
3111 {
3112 idx = 0;
3113 break;
3114 }
3115 if (++jwi==nwi)
3116 {
3117 jwi = 0;
3118 nwi <<= 1;
3119 wsize--;
3120 }
3121 i++;
3122 }
3123 if (idx < 0)
3124 {
3125 curr_bit_offset += idx;
3126 }
3127 iused = i-1;
3128
3129 for (i=1; i <= iused; i++)
3130 {
3131 /*
3132 xdd_cell_info = f_k(i, w, 1024);
3133 proto_tree_add_uint(subtree, hf_gsm_rlcmac_cell_parameter, tvb, curr_bit_offset>>3, 0, xdd_cell_info & 0x007F);
3134 proto_tree_add_uint(subtree, hf_gsm_rlcmac_sync_case_tstd, tvb, curr_bit_offset>>3, 0, (xdd_cell_info >> 7) & 0x01);
3135 proto_tree_add_uint(subtree, hf_gsm_rlcmac_diversity_tdd, tvb, curr_bit_offset>>3, 0, (xdd_cell_info >> 8) & 0x01);
3136 */
3137 }
3138 }
3139 }
3140 *readIndex = curr_bit_offset;
3141 return curr_bit_offset - bit_offset;
3142}
3143
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03003144static const
3145CSN_DESCR_BEGIN(UTRAN_TDD_NeighbourCells_t)
3146 M_UINT (UTRAN_TDD_NeighbourCells_t, ZERO, 1),
3147 M_UINT (UTRAN_TDD_NeighbourCells_t, UARFCN, 14),
3148 M_UINT (UTRAN_TDD_NeighbourCells_t, Indic0, 1),
3149 M_UINT (UTRAN_TDD_NeighbourCells_t, NrOfCells, 5),
Pau Espin Pedrolf3ac06b2020-03-26 18:13:19 +01003150 M_CALLBACK (UTRAN_TDD_NeighbourCells_t, callback_UTRAN_TDD_map_NrOfFrequencies, NrOfCells, BitsInCellInfo),
3151 M_CALLBACK (UTRAN_TDD_NeighbourCells_t, callback_UTRAN_TDD_compute_TDD_CELL_INFORMATION, ZERO, CellInfo),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03003152CSN_DESCR_END (UTRAN_TDD_NeighbourCells_t)
3153
3154static const
3155CSN_DESCR_BEGIN(UTRAN_TDD_Description_t)
3156 M_NEXT_EXIST (UTRAN_TDD_Description_t, existBandwidth, 1),
3157 M_UINT (UTRAN_TDD_Description_t, Bandwidth, 3),
3158 M_REC_TARRAY (UTRAN_TDD_Description_t, CellParams, UTRAN_TDD_NeighbourCells_t, NrOfFrequencies),
3159CSN_DESCR_END (UTRAN_TDD_Description_t)
3160
3161static const
3162CSN_DESCR_BEGIN(NeighbourCellDescription3G_PMO_t)
3163 M_NEXT_EXIST (NeighbourCellDescription3G_PMO_t, Exist_Index_Start_3G, 1),
3164 M_UINT (NeighbourCellDescription3G_PMO_t, Index_Start_3G, 7),
3165 M_NEXT_EXIST (NeighbourCellDescription3G_PMO_t, Exist_Absolute_Index_Start_EMR, 1),
3166 M_UINT (NeighbourCellDescription3G_PMO_t, Absolute_Index_Start_EMR, 7),
3167 M_NEXT_EXIST (NeighbourCellDescription3G_PMO_t, Exist_UTRAN_FDD_Description, 1),
3168 M_TYPE (NeighbourCellDescription3G_PMO_t, UTRAN_FDD_Description, UTRAN_FDD_Description_t),
3169 M_NEXT_EXIST (NeighbourCellDescription3G_PMO_t, Exist_UTRAN_TDD_Description, 1),
3170 M_TYPE (NeighbourCellDescription3G_PMO_t, UTRAN_TDD_Description, UTRAN_TDD_Description_t),
3171 M_NEXT_EXIST (NeighbourCellDescription3G_PMO_t, Exist_CDMA2000_Description, 1),
3172 M_TYPE (NeighbourCellDescription3G_PMO_t, CDMA2000_Description, CDMA2000_Description_t),
3173 M_NEXT_EXIST (NeighbourCellDescription3G_PMO_t, Exist_Removed3GCellDescription, 1),
3174 M_TYPE (NeighbourCellDescription3G_PMO_t, Removed3GCellDescription, Removed3GCellDescription_t),
3175CSN_DESCR_END (NeighbourCellDescription3G_PMO_t)
3176
3177static const
3178CSN_DESCR_BEGIN(NeighbourCellDescription3G_PCCO_t)
3179 M_NEXT_EXIST (NeighbourCellDescription3G_PCCO_t, Exist_Index_Start_3G, 1),
3180 M_UINT (NeighbourCellDescription3G_PCCO_t, Index_Start_3G, 7),
3181 M_NEXT_EXIST (NeighbourCellDescription3G_PCCO_t, Exist_Absolute_Index_Start_EMR, 1),
3182 M_UINT (NeighbourCellDescription3G_PCCO_t, Absolute_Index_Start_EMR, 7),
3183 M_NEXT_EXIST (NeighbourCellDescription3G_PCCO_t, Exist_UTRAN_FDD_Description, 1),
3184 M_TYPE (NeighbourCellDescription3G_PCCO_t, UTRAN_FDD_Description, UTRAN_FDD_Description_t),
3185 M_NEXT_EXIST (NeighbourCellDescription3G_PCCO_t, Exist_UTRAN_TDD_Description, 1),
3186 M_TYPE (NeighbourCellDescription3G_PCCO_t, UTRAN_TDD_Description, UTRAN_TDD_Description_t),
3187 M_NEXT_EXIST (NeighbourCellDescription3G_PCCO_t, Exist_Removed3GCellDescription, 1),
3188 M_TYPE (NeighbourCellDescription3G_PCCO_t, Removed3GCellDescription, Removed3GCellDescription_t),
3189CSN_DESCR_END (NeighbourCellDescription3G_PCCO_t)
3190
3191static const
3192CSN_DESCR_BEGIN(ENH_Measurement_Parameters_PMO_t)
3193 M_UNION (ENH_Measurement_Parameters_PMO_t, 2),
3194 M_TYPE (ENH_Measurement_Parameters_PMO_t, u.BA_IND, BA_IND_t),
3195 M_UINT (ENH_Measurement_Parameters_PMO_t, u.PSI3_CHANGE_MARK, 2),
3196 M_UINT (ENH_Measurement_Parameters_PMO_t, PMO_IND, 1),
3197
3198 M_UINT (ENH_Measurement_Parameters_PMO_t, REPORT_TYPE, 1),
3199 M_UINT (ENH_Measurement_Parameters_PMO_t, REPORTING_RATE, 1),
3200 M_UINT (ENH_Measurement_Parameters_PMO_t, INVALID_BSIC_REPORTING, 1),
3201
3202 M_NEXT_EXIST (ENH_Measurement_Parameters_PMO_t, Exist_NeighbourCellDescription3G, 1),
3203 M_TYPE (ENH_Measurement_Parameters_PMO_t, NeighbourCellDescription3G, NeighbourCellDescription3G_PMO_t),
3204
3205 M_NEXT_EXIST (ENH_Measurement_Parameters_PMO_t, Exist_GPRSReportPriority, 1),
3206 M_TYPE (ENH_Measurement_Parameters_PMO_t, GPRSReportPriority, GPRSReportPriority_t),
3207
3208 M_NEXT_EXIST (ENH_Measurement_Parameters_PMO_t, Exist_GPRSMeasurementParams, 1),
3209 M_TYPE (ENH_Measurement_Parameters_PMO_t, GPRSMeasurementParams, GPRSMeasurementParams_PMO_PCCO_t),
3210
3211 M_NEXT_EXIST (ENH_Measurement_Parameters_PMO_t, Exist_GPRSMeasurementParams3G, 1),
3212 M_TYPE (ENH_Measurement_Parameters_PMO_t, GPRSMeasurementParams3G, ENH_GPRSMeasurementParams3G_PMO_t),
3213CSN_DESCR_END (ENH_Measurement_Parameters_PMO_t)
3214
3215static const
3216CSN_DESCR_BEGIN(ENH_Measurement_Parameters_PCCO_t)
3217 M_UNION (ENH_Measurement_Parameters_PCCO_t, 2),
3218 M_TYPE (ENH_Measurement_Parameters_PCCO_t, u.BA_IND, BA_IND_t),
3219 M_UINT (ENH_Measurement_Parameters_PCCO_t, u.PSI3_CHANGE_MARK, 2),
3220 M_UINT (ENH_Measurement_Parameters_PCCO_t, PMO_IND, 1),
3221
3222 M_UINT (ENH_Measurement_Parameters_PCCO_t, REPORT_TYPE, 1),
3223 M_UINT (ENH_Measurement_Parameters_PCCO_t, REPORTING_RATE, 1),
3224 M_UINT (ENH_Measurement_Parameters_PCCO_t, INVALID_BSIC_REPORTING, 1),
3225
3226 M_NEXT_EXIST (ENH_Measurement_Parameters_PCCO_t, Exist_NeighbourCellDescription3G, 1),
3227 M_TYPE (ENH_Measurement_Parameters_PCCO_t, NeighbourCellDescription3G, NeighbourCellDescription3G_PCCO_t),
3228
3229 M_NEXT_EXIST (ENH_Measurement_Parameters_PCCO_t, Exist_GPRSReportPriority, 1),
3230 M_TYPE (ENH_Measurement_Parameters_PCCO_t, GPRSReportPriority, GPRSReportPriority_t),
3231
3232 M_NEXT_EXIST (ENH_Measurement_Parameters_PCCO_t, Exist_GPRSMeasurementParams, 1),
3233 M_TYPE (ENH_Measurement_Parameters_PCCO_t, GPRSMeasurementParams, GPRSMeasurementParams_PMO_PCCO_t),
3234
3235 M_NEXT_EXIST (ENH_Measurement_Parameters_PCCO_t, Exist_GPRSMeasurementParams3G, 1),
3236 M_TYPE (ENH_Measurement_Parameters_PCCO_t, GPRSMeasurementParams3G, ENH_GPRSMeasurementParams3G_PCCO_t),
3237CSN_DESCR_END (ENH_Measurement_Parameters_PCCO_t)
3238
3239static const
3240CSN_DESCR_BEGIN(CCN_Support_Description_t)
3241 M_UINT (CCN_Support_Description_t, NUMBER_CELLS, 7),
3242 M_VAR_BITMAP (CCN_Support_Description_t, CCN_SUPPORTED, NUMBER_CELLS, 0),
3243CSN_DESCR_END (CCN_Support_Description_t)
3244
3245static const
3246CSN_DESCR_BEGIN(lu_ModeCellSelectionParameters_t)
3247 M_UINT (lu_ModeCellSelectionParameters_t, CELL_BAR_QUALIFY_3, 2),
3248 M_NEXT_EXIST (lu_ModeCellSelectionParameters_t, Exist_SI13_Alt_PBCCH_Location, 1),
3249 M_TYPE (lu_ModeCellSelectionParameters_t, SI13_Alt_PBCCH_Location, SI13_PBCCH_Location_t),
3250CSN_DESCR_END (lu_ModeCellSelectionParameters_t)
3251
3252static const
3253CSN_DESCR_BEGIN(lu_ModeCellSelectionParams_t)
3254 M_NEXT_EXIST (lu_ModeCellSelectionParams_t, Exist_lu_ModeCellSelectionParams, 1),
3255 M_TYPE (lu_ModeCellSelectionParams_t, lu_ModeCellSelectionParameters, lu_ModeCellSelectionParameters_t),
3256CSN_DESCR_END (lu_ModeCellSelectionParams_t)
3257
3258static const
3259CSN_DESCR_BEGIN(lu_ModeNeighbourCellParams_t)
3260 M_TYPE (lu_ModeNeighbourCellParams_t, lu_ModeCellSelectionParameters, lu_ModeCellSelectionParams_t),
3261 M_UINT (lu_ModeNeighbourCellParams_t, NR_OF_FREQUENCIES, 5),
3262 M_VAR_TARRAY (lu_ModeNeighbourCellParams_t, lu_ModeCellSelectionParams, lu_ModeCellSelectionParams_t, NR_OF_FREQUENCIES),
3263CSN_DESCR_END (lu_ModeNeighbourCellParams_t)
3264
3265static const
3266CSN_DESCR_BEGIN(lu_ModeOnlyCellSelection_t)
3267 M_UINT (lu_ModeOnlyCellSelection_t, CELL_BAR_QUALIFY_3, 2),
3268 M_UINT (lu_ModeOnlyCellSelection_t, SAME_RA_AS_SERVING_CELL, 1),
3269
3270 M_NEXT_EXIST (lu_ModeOnlyCellSelection_t, Exist_RXLEV_and_TXPWR, 2),
3271 M_UINT (lu_ModeOnlyCellSelection_t, GPRS_RXLEV_ACCESS_MIN, 6),
3272 M_UINT (lu_ModeOnlyCellSelection_t, GPRS_MS_TXPWR_MAX_CCH, 5),
3273
3274 M_NEXT_EXIST (lu_ModeOnlyCellSelection_t, Exist_OFFSET_and_TIME, 2),
3275 M_UINT (lu_ModeOnlyCellSelection_t, GPRS_TEMPORARY_OFFSET, 3),
3276 M_UINT (lu_ModeOnlyCellSelection_t, GPRS_PENALTY_TIME, 5),
3277
3278 M_NEXT_EXIST (lu_ModeOnlyCellSelection_t, Exist_GPRS_RESELECT_OFFSET, 1),
3279 M_UINT (lu_ModeOnlyCellSelection_t, GPRS_RESELECT_OFFSET, 5),
3280
3281 M_NEXT_EXIST (lu_ModeOnlyCellSelection_t, Exist_HCS, 1),
3282 M_TYPE (lu_ModeOnlyCellSelection_t, HCS, HCS_t),
3283
3284 M_NEXT_EXIST (lu_ModeOnlyCellSelection_t, Exist_SI13_Alt_PBCCH_Location, 1),
3285 M_TYPE (lu_ModeOnlyCellSelection_t, SI13_Alt_PBCCH_Location, SI13_PBCCH_Location_t),
3286CSN_DESCR_END (lu_ModeOnlyCellSelection_t)
3287
3288static const
3289CSN_DESCR_BEGIN(lu_ModeOnlyCellSelectionParamsWithFreqDiff_t)
3290 /*FREQUENCY_DIFF is really an integer but the number of bits to decode it are stored in FREQ_DIFF_LENGTH*/
3291 M_VAR_BITMAP (lu_ModeOnlyCellSelectionParamsWithFreqDiff_t, FREQUENCY_DIFF, FREQ_DIFF_LENGTH, 0),
3292 M_UINT (lu_ModeOnlyCellSelectionParamsWithFreqDiff_t, BSIC, 6),
3293 M_NEXT_EXIST (lu_ModeOnlyCellSelectionParamsWithFreqDiff_t, Exist_lu_ModeOnlyCellSelectionParams, 1),
3294 M_TYPE (lu_ModeOnlyCellSelectionParamsWithFreqDiff_t, lu_ModeOnlyCellSelectionParams, lu_ModeOnlyCellSelection_t),
3295CSN_DESCR_END (lu_ModeOnlyCellSelectionParamsWithFreqDiff_t)
3296
Pau Espin Pedrolf3ac06b2020-03-26 18:13:19 +01003297CSN_CallBackStatus_t callback_init_luMode_Cell_Sel_Param_FREQUENCY_DIFF(struct bitvec *vector, unsigned *readIndex, void* param1, void* param2)
3298{
3299 guint i;
3300 guint8 freq_diff_len = *(guint8*)param1;
3301 lu_ModeOnlyCellSelectionParamsWithFreqDiff_t *pArray = (lu_ModeOnlyCellSelectionParamsWithFreqDiff_t*)param2;
3302
3303 for( i=0; i<16; i++, pArray++ )
3304 {
3305 pArray->FREQ_DIFF_LENGTH = freq_diff_len;
3306 }
3307
3308 return 0;
3309}
3310
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03003311static const
3312CSN_DESCR_BEGIN(Add_lu_ModeOnlyFrequencyList_t)
3313 M_UINT (Add_lu_ModeOnlyFrequencyList_t, START_FREQUENCY, 10),
3314 M_UINT (Add_lu_ModeOnlyFrequencyList_t, BSIC, 6),
3315
3316 M_NEXT_EXIST (Add_lu_ModeOnlyFrequencyList_t, Exist_lu_ModeCellSelection, 1),
3317 M_TYPE (Add_lu_ModeOnlyFrequencyList_t, lu_ModeOnlyCellSelection, lu_ModeOnlyCellSelection_t),
3318
3319 M_UINT (Add_lu_ModeOnlyFrequencyList_t, NR_OF_FREQUENCIES, 5),
3320 M_UINT (Add_lu_ModeOnlyFrequencyList_t, FREQ_DIFF_LENGTH, 3),
3321
Pau Espin Pedrolf3ac06b2020-03-26 18:13:19 +01003322 M_CALLBACK (Add_lu_ModeOnlyFrequencyList_t, callback_init_luMode_Cell_Sel_Param_FREQUENCY_DIFF, FREQ_DIFF_LENGTH, lu_ModeOnlyCellSelectionParamsWithFreqDiff),
3323
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03003324 M_VAR_TARRAY (Add_lu_ModeOnlyFrequencyList_t, lu_ModeOnlyCellSelectionParamsWithFreqDiff, lu_ModeOnlyCellSelectionParamsWithFreqDiff_t, NR_OF_FREQUENCIES),
3325CSN_DESCR_END (Add_lu_ModeOnlyFrequencyList_t)
3326
3327static const
3328CSN_DESCR_BEGIN(NC_lu_ModeOnlyCapableCellList_t)
3329 M_REC_TARRAY (NC_lu_ModeOnlyCapableCellList_t, Add_lu_ModeOnlyFrequencyList, Add_lu_ModeOnlyFrequencyList_t, Count_Add_lu_ModeOnlyFrequencyList),
3330CSN_DESCR_END (NC_lu_ModeOnlyCapableCellList_t)
3331
3332static const
3333CSN_DESCR_BEGIN(GPRS_AdditionalMeasurementParams3G_t)
3334 M_NEXT_EXIST (GPRS_AdditionalMeasurementParams3G_t, Exist_FDD_REPORTING_THRESHOLD_2, 1),
3335 M_UINT (GPRS_AdditionalMeasurementParams3G_t, FDD_REPORTING_THRESHOLD_2, 6),
3336CSN_DESCR_END (GPRS_AdditionalMeasurementParams3G_t)
3337
3338static const
3339CSN_DESCR_BEGIN(ServingCellPriorityParametersDescription_t)
3340 M_UINT (ServingCellPriorityParametersDescription_t, GERAN_PRIORITY, 3),
3341 M_UINT (ServingCellPriorityParametersDescription_t, THRESH_Priority_Search, 4),
3342 M_UINT (ServingCellPriorityParametersDescription_t, THRESH_GSM_low, 4),
3343 M_UINT (ServingCellPriorityParametersDescription_t, H_PRIO, 2),
3344 M_UINT (ServingCellPriorityParametersDescription_t, T_Reselection, 2),
3345CSN_DESCR_END (ServingCellPriorityParametersDescription_t)
3346
3347static const
3348CSN_DESCR_BEGIN(RepeatedUTRAN_PriorityParameters_t)
3349 M_REC_ARRAY (RepeatedUTRAN_PriorityParameters_t, UTRAN_FREQUENCY_INDEX_a, NumberOfFrequencyIndexes, 5),
3350
3351 M_NEXT_EXIST (RepeatedUTRAN_PriorityParameters_t, existUTRAN_PRIORITY, 1),
3352 M_UINT (RepeatedUTRAN_PriorityParameters_t, UTRAN_PRIORITY, 3),
3353
3354 M_UINT (RepeatedUTRAN_PriorityParameters_t, THRESH_UTRAN_high, 5),
3355
3356 M_NEXT_EXIST (RepeatedUTRAN_PriorityParameters_t, existTHRESH_UTRAN_low, 1),
3357 M_UINT (RepeatedUTRAN_PriorityParameters_t, THRESH_UTRAN_low, 5),
3358
3359 M_NEXT_EXIST (RepeatedUTRAN_PriorityParameters_t, existUTRAN_QRXLEVMIN, 1),
3360 M_UINT (RepeatedUTRAN_PriorityParameters_t, UTRAN_QRXLEVMIN, 5),
3361CSN_DESCR_END (RepeatedUTRAN_PriorityParameters_t)
3362
3363static const
3364CSN_DESCR_BEGIN(PriorityParametersDescription3G_PMO_t)
3365
3366 M_NEXT_EXIST (PriorityParametersDescription3G_PMO_t, existDEFAULT_UTRAN_Parameters, 3),
3367 M_UINT (PriorityParametersDescription3G_PMO_t, DEFAULT_UTRAN_PRIORITY, 3),
3368 M_UINT (PriorityParametersDescription3G_PMO_t, DEFAULT_THRESH_UTRAN, 5),
3369 M_UINT (PriorityParametersDescription3G_PMO_t, DEFAULT_UTRAN_QRXLEVMIN, 5),
3370
3371 M_REC_TARRAY (PriorityParametersDescription3G_PMO_t, RepeatedUTRAN_PriorityParameters_a, RepeatedUTRAN_PriorityParameters_t, NumberOfPriorityParameters),
3372CSN_DESCR_END (PriorityParametersDescription3G_PMO_t)
3373
3374static const
3375CSN_DESCR_BEGIN(EUTRAN_REPORTING_THRESHOLD_OFFSET_t)
3376 M_NEXT_EXIST (EUTRAN_REPORTING_THRESHOLD_OFFSET_t, existEUTRAN_FDD_REPORTING_THRESHOLD_OFFSET, 5),
3377 M_UINT (EUTRAN_REPORTING_THRESHOLD_OFFSET_t, EUTRAN_FDD_REPORTING_THRESHOLD, 3),
3378 M_NEXT_EXIST (EUTRAN_REPORTING_THRESHOLD_OFFSET_t, existEUTRAN_FDD_REPORTING_THRESHOLD_2, 1),
3379 M_UINT (EUTRAN_REPORTING_THRESHOLD_OFFSET_t, EUTRAN_FDD_REPORTING_THRESHOLD_2, 6),
3380 M_NEXT_EXIST (EUTRAN_REPORTING_THRESHOLD_OFFSET_t, existEUTRAN_FDD_REPORTING_OFFSET, 1),
3381 M_UINT (EUTRAN_REPORTING_THRESHOLD_OFFSET_t, EUTRAN_FDD_REPORTING_OFFSET, 3),
3382
3383 M_NEXT_EXIST (EUTRAN_REPORTING_THRESHOLD_OFFSET_t, existEUTRAN_TDD_REPORTING_THRESHOLD_OFFSET, 5),
3384 M_UINT (EUTRAN_REPORTING_THRESHOLD_OFFSET_t, EUTRAN_TDD_REPORTING_THRESHOLD, 3),
3385 M_NEXT_EXIST (EUTRAN_REPORTING_THRESHOLD_OFFSET_t, existEUTRAN_TDD_REPORTING_THRESHOLD_2, 1),
3386 M_UINT (EUTRAN_REPORTING_THRESHOLD_OFFSET_t, EUTRAN_TDD_REPORTING_THRESHOLD_2, 6),
3387 M_NEXT_EXIST (EUTRAN_REPORTING_THRESHOLD_OFFSET_t, existEUTRAN_TDD_REPORTING_OFFSET, 1),
3388 M_UINT (EUTRAN_REPORTING_THRESHOLD_OFFSET_t, EUTRAN_TDD_REPORTING_OFFSET, 3),
3389CSN_DESCR_END (EUTRAN_REPORTING_THRESHOLD_OFFSET_t)
3390
3391static const
3392CSN_DESCR_BEGIN(GPRS_EUTRAN_MeasurementParametersDescription_t)
3393 M_UINT (GPRS_EUTRAN_MeasurementParametersDescription_t, Qsearch_P_EUTRAN, 4),
Anders Broman8ea3cbe2020-01-28 17:36:33 +01003394 M_UINT (GPRS_EUTRAN_MeasurementParametersDescription_t, EUTRAN_REP_QUANT, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03003395 M_UINT (GPRS_EUTRAN_MeasurementParametersDescription_t, EUTRAN_MULTIRAT_REPORTING, 2),
3396 M_TYPE (GPRS_EUTRAN_MeasurementParametersDescription_t, EUTRAN_REPORTING_THRESHOLD_OFFSET, EUTRAN_REPORTING_THRESHOLD_OFFSET_t),
3397CSN_DESCR_END (GPRS_EUTRAN_MeasurementParametersDescription_t)
3398
3399static const
3400CSN_DESCR_BEGIN(RepeatedEUTRAN_Cells_t)
3401 M_UINT (RepeatedEUTRAN_Cells_t, EARFCN, 16),
3402 M_NEXT_EXIST (RepeatedEUTRAN_Cells_t, existMeasurementBandwidth, 1),
3403 M_UINT (RepeatedEUTRAN_Cells_t, MeasurementBandwidth, 3),
3404CSN_DESCR_END (RepeatedEUTRAN_Cells_t)
3405
3406static const
3407CSN_DESCR_BEGIN(RepeatedEUTRAN_NeighbourCells_t)
3408 M_REC_TARRAY (RepeatedEUTRAN_NeighbourCells_t, EUTRAN_Cells_a, RepeatedEUTRAN_Cells_t, nbrOfEUTRAN_Cells),
3409
3410 M_NEXT_EXIST (RepeatedEUTRAN_NeighbourCells_t, existEUTRAN_PRIORITY, 1),
3411 M_UINT (RepeatedEUTRAN_NeighbourCells_t, EUTRAN_PRIORITY, 3),
3412
3413 M_UINT (RepeatedEUTRAN_NeighbourCells_t, THRESH_EUTRAN_high, 5),
3414
3415 M_NEXT_EXIST (RepeatedEUTRAN_NeighbourCells_t, existTHRESH_EUTRAN_low, 1),
3416 M_UINT (RepeatedEUTRAN_NeighbourCells_t, THRESH_EUTRAN_low, 5),
3417
3418 M_NEXT_EXIST (RepeatedEUTRAN_NeighbourCells_t, existEUTRAN_QRXLEVMIN, 1),
3419 M_UINT (RepeatedEUTRAN_NeighbourCells_t, EUTRAN_QRXLEVMIN, 5),
3420CSN_DESCR_END (RepeatedEUTRAN_NeighbourCells_t)
3421
3422static const
3423CSN_DESCR_BEGIN(PCID_Pattern_t)
3424 M_UINT (PCID_Pattern_t, PCID_Pattern_length, 3),
3425 M_VAR_BITMAP (PCID_Pattern_t, PCID_Pattern, PCID_Pattern_length, 1), /* offset 1, 44.060 12.57 */
3426 M_UINT (PCID_Pattern_t, PCID_Pattern_sense, 1),
3427CSN_DESCR_END (PCID_Pattern_t)
3428
3429static const
3430CSN_DESCR_BEGIN(PCID_Group_IE_t)
3431
3432 M_REC_ARRAY (PCID_Group_IE_t, PCID_a, NumberOfPCIDs, 9),
3433
3434 M_NEXT_EXIST (PCID_Group_IE_t, existPCID_BITMAP_GROUP, 1),
3435 M_UINT (PCID_Group_IE_t, PCID_BITMAP_GROUP, 6),
3436
3437 M_REC_TARRAY (PCID_Group_IE_t, PCID_Pattern_a, PCID_Pattern_t, NumberOfPCID_Patterns),
3438CSN_DESCR_END (PCID_Group_IE_t)
3439
3440static const
3441CSN_DESCR_BEGIN(EUTRAN_FREQUENCY_INDEX_t)
3442 M_UINT (EUTRAN_FREQUENCY_INDEX_t, EUTRAN_FREQUENCY_INDEX, 3),
3443CSN_DESCR_END (EUTRAN_FREQUENCY_INDEX_t)
3444
3445static const
3446CSN_DESCR_BEGIN(RepeatedEUTRAN_NotAllowedCells_t)
3447 M_TYPE (RepeatedEUTRAN_NotAllowedCells_t, NotAllowedCells, PCID_Group_IE_t),
3448
3449 M_REC_TARRAY (RepeatedEUTRAN_NotAllowedCells_t, EUTRAN_FREQUENCY_INDEX_a, EUTRAN_FREQUENCY_INDEX_t, NumberOfFrequencyIndexes),
3450CSN_DESCR_END (RepeatedEUTRAN_NotAllowedCells_t)
3451
3452static const
3453CSN_DESCR_BEGIN(RepeatedEUTRAN_PCID_to_TA_mapping_t)
3454 M_REC_TARRAY (RepeatedEUTRAN_PCID_to_TA_mapping_t, PCID_ToTA_Mapping_a, PCID_Group_IE_t, NumberOfMappings),
3455 M_REC_TARRAY (RepeatedEUTRAN_PCID_to_TA_mapping_t, EUTRAN_FREQUENCY_INDEX_a, EUTRAN_FREQUENCY_INDEX_t, NumberOfFrequencyIndexes),
3456CSN_DESCR_END (RepeatedEUTRAN_PCID_to_TA_mapping_t)
3457
3458static const
3459CSN_DESCR_BEGIN(EUTRAN_ParametersDescription_PMO_t)
Anders Broman8ea3cbe2020-01-28 17:36:33 +01003460 M_UINT (EUTRAN_ParametersDescription_PMO_t, EUTRAN_CCN_ACTIVE, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03003461
3462 M_NEXT_EXIST (EUTRAN_ParametersDescription_PMO_t, existGPRS_EUTRAN_MeasurementParametersDescription, 1),
3463 M_TYPE (EUTRAN_ParametersDescription_PMO_t, GPRS_EUTRAN_MeasurementParametersDescription, GPRS_EUTRAN_MeasurementParametersDescription_t),
3464
3465 M_REC_TARRAY (EUTRAN_ParametersDescription_PMO_t, RepeatedEUTRAN_NeighbourCells_a, RepeatedEUTRAN_NeighbourCells_t, nbrOfRepeatedEUTRAN_NeighbourCellsStructs),
3466 M_REC_TARRAY (EUTRAN_ParametersDescription_PMO_t, RepeatedEUTRAN_NotAllowedCells_a, RepeatedEUTRAN_NotAllowedCells_t, NumberOfNotAllowedCells),
3467 M_REC_TARRAY (EUTRAN_ParametersDescription_PMO_t, RepeatedEUTRAN_PCID_to_TA_mapping_a, RepeatedEUTRAN_PCID_to_TA_mapping_t, NumberOfMappings),
3468CSN_DESCR_END (EUTRAN_ParametersDescription_PMO_t)
3469
3470static const
3471CSN_DESCR_BEGIN(PSC_Pattern_t)
3472 M_UINT (PSC_Pattern_t, PSC_Pattern_length, 3),
3473 M_VAR_BITMAP (PSC_Pattern_t, PSC_Pattern, PSC_Pattern_length, 1),
Anders Broman8ea3cbe2020-01-28 17:36:33 +01003474 M_UINT (PSC_Pattern_t, PSC_Pattern_sense, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03003475CSN_DESCR_END (PSC_Pattern_t)
3476
3477static const
3478CSN_DESCR_BEGIN(PSC_Group_t)
3479 M_REC_ARRAY (PSC_Group_t, PSC, PSC_Count, 9),
3480 M_REC_TARRAY (PSC_Group_t, PSC_Pattern, PSC_Pattern_t, PSC_Pattern_Count),
3481CSN_DESCR_END (PSC_Group_t)
3482
3483static const
3484CSN_DESCR_BEGIN(ThreeG_CSG_Description_Body_t)
3485 M_TYPE (ThreeG_CSG_Description_Body_t, CSG_PSC_SPLIT, PSC_Group_t),
3486 M_REC_ARRAY (ThreeG_CSG_Description_Body_t, UTRAN_FREQUENCY_INDEX, Count, 5),
3487CSN_DESCR_END (ThreeG_CSG_Description_Body_t)
3488
3489static const
3490CSN_DESCR_BEGIN(ThreeG_CSG_Description_t)
3491 M_REC_TARRAY (ThreeG_CSG_Description_t, ThreeG_CSG_Description_Body, ThreeG_CSG_Description_Body_t, Count),
3492CSN_DESCR_END (ThreeG_CSG_Description_t)
3493
3494static const
3495CSN_DESCR_BEGIN(EUTRAN_CSG_Description_Body_t)
3496 M_TYPE (EUTRAN_CSG_Description_Body_t, CSG_PCI_SPLIT, PSC_Group_t),
3497 M_REC_ARRAY (EUTRAN_CSG_Description_Body_t, EUTRAN_FREQUENCY_INDEX, Count, 3),
3498CSN_DESCR_END (EUTRAN_CSG_Description_Body_t)
3499
3500static const
3501CSN_DESCR_BEGIN(EUTRAN_CSG_Description_t)
3502 M_REC_TARRAY (EUTRAN_CSG_Description_t, EUTRAN_CSG_Description_Body, EUTRAN_CSG_Description_Body_t, Count),
3503CSN_DESCR_END (EUTRAN_CSG_Description_t)
3504
3505static const
3506CSN_DESCR_BEGIN(Meas_Ctrl_Param_Desp_t)
3507 M_NEXT_EXIST (Meas_Ctrl_Param_Desp_t, existMeasurement_Control_EUTRAN, 3),
Anders Broman8ea3cbe2020-01-28 17:36:33 +01003508 M_UINT (Meas_Ctrl_Param_Desp_t, Measurement_Control_EUTRAN, 1),
3509 M_UINT (Meas_Ctrl_Param_Desp_t, EUTRAN_FREQUENCY_INDEX_top, 3),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03003510 M_REC_ARRAY (Meas_Ctrl_Param_Desp_t, EUTRAN_FREQUENCY_INDEX, Count_EUTRAN_FREQUENCY_INDEX, 3),
3511 M_NEXT_EXIST (Meas_Ctrl_Param_Desp_t, existMeasurement_Control_UTRAN, 1),
Anders Broman8ea3cbe2020-01-28 17:36:33 +01003512 M_UINT (Meas_Ctrl_Param_Desp_t, Measurement_Control_UTRAN, 1),
3513 M_UINT (Meas_Ctrl_Param_Desp_t, UTRAN_FREQUENCY_INDEX_top, 5),
3514 M_REC_ARRAY (Meas_Ctrl_Param_Desp_t, UTRAN_FREQUENCY_INDEX, Count_UTRAN_FREQUENCY_INDEX, 5),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03003515CSN_DESCR_END (Meas_Ctrl_Param_Desp_t)
3516
3517static const
3518CSN_DESCR_BEGIN(Reselection_Based_On_RSRQ_t)
3519 M_UINT (Reselection_Based_On_RSRQ_t, THRESH_EUTRAN_high_Q, 5),
3520 M_NEXT_EXIST (Reselection_Based_On_RSRQ_t, existTHRESH_EUTRAN_low_Q, 1),
3521 M_UINT (Reselection_Based_On_RSRQ_t, THRESH_EUTRAN_low_Q, 5),
3522 M_NEXT_EXIST (Reselection_Based_On_RSRQ_t, existEUTRAN_QQUALMIN, 1),
3523 M_UINT (Reselection_Based_On_RSRQ_t, EUTRAN_QQUALMIN, 4),
3524 M_NEXT_EXIST (Reselection_Based_On_RSRQ_t, existEUTRAN_RSRPmin, 1),
3525 M_UINT (Reselection_Based_On_RSRQ_t, EUTRAN_RSRPmin, 5),
3526CSN_DESCR_END (Reselection_Based_On_RSRQ_t)
3527
3528static const
3529CSN_DESCR_BEGIN(Rept_EUTRAN_Enh_Cell_Resel_Param_t)
3530 M_REC_ARRAY (Rept_EUTRAN_Enh_Cell_Resel_Param_t, EUTRAN_FREQUENCY_INDEX, Count_EUTRAN_FREQUENCY_INDEX, 3),
3531 M_UNION (Rept_EUTRAN_Enh_Cell_Resel_Param_t, 2),
3532 M_UINT (Rept_EUTRAN_Enh_Cell_Resel_Param_t, u.EUTRAN_Qmin, 4),
3533 M_TYPE (Rept_EUTRAN_Enh_Cell_Resel_Param_t, u.Reselection_Based_On_RSRQ, Reselection_Based_On_RSRQ_t),
3534CSN_DESCR_END (Rept_EUTRAN_Enh_Cell_Resel_Param_t)
3535
3536static const
3537CSN_DESCR_BEGIN(Enh_Cell_Reselect_Param_Desp_t)
3538 M_REC_TARRAY (Enh_Cell_Reselect_Param_Desp_t, Repeated_EUTRAN_Enhanced_Cell_Reselection_Parameters, Rept_EUTRAN_Enh_Cell_Resel_Param_t, Count),
3539CSN_DESCR_END (Enh_Cell_Reselect_Param_Desp_t)
3540
3541static const
3542CSN_DESCR_BEGIN(UTRAN_CSG_Cells_Reporting_Desp_t)
3543 M_NEXT_EXIST (UTRAN_CSG_Cells_Reporting_Desp_t, existUTRAN_CSG_FDD_REPORTING_THRESHOLD, 2),
3544 M_UINT (UTRAN_CSG_Cells_Reporting_Desp_t, UTRAN_CSG_FDD_REPORTING_THRESHOLD, 3),
3545 M_UINT (UTRAN_CSG_Cells_Reporting_Desp_t, UTRAN_CSG_FDD_REPORTING_THRESHOLD_2, 6),
3546 M_NEXT_EXIST (UTRAN_CSG_Cells_Reporting_Desp_t, existUTRAN_CSG_TDD_REPORTING_THRESHOLD, 1),
3547 M_UINT (UTRAN_CSG_Cells_Reporting_Desp_t, UTRAN_CSG_TDD_REPORTING_THRESHOLD, 3),
3548CSN_DESCR_END (UTRAN_CSG_Cells_Reporting_Desp_t)
3549
3550static const
3551CSN_DESCR_BEGIN(EUTRAN_CSG_Cells_Reporting_Desp_t)
3552 M_NEXT_EXIST (EUTRAN_CSG_Cells_Reporting_Desp_t, existEUTRAN_CSG_FDD_REPORTING_THRESHOLD, 2),
3553 M_UINT (EUTRAN_CSG_Cells_Reporting_Desp_t, EUTRAN_CSG_FDD_REPORTING_THRESHOLD, 3),
3554 M_UINT (EUTRAN_CSG_Cells_Reporting_Desp_t, EUTRAN_CSG_FDD_REPORTING_THRESHOLD_2, 6),
3555 M_NEXT_EXIST (EUTRAN_CSG_Cells_Reporting_Desp_t, existEUTRAN_CSG_TDD_REPORTING_THRESHOLD, 2),
3556 M_UINT (EUTRAN_CSG_Cells_Reporting_Desp_t, EUTRAN_CSG_TDD_REPORTING_THRESHOLD, 3),
3557 M_UINT (EUTRAN_CSG_Cells_Reporting_Desp_t, EUTRAN_CSG_TDD_REPORTING_THRESHOLD_2, 6),
3558CSN_DESCR_END (EUTRAN_CSG_Cells_Reporting_Desp_t)
3559
3560
3561static const
3562CSN_DESCR_BEGIN(CSG_Cells_Reporting_Desp_t)
3563 M_NEXT_EXIST (CSG_Cells_Reporting_Desp_t, existUTRAN_CSG_Cells_Reporting_Description, 1),
3564 M_TYPE (CSG_Cells_Reporting_Desp_t, UTRAN_CSG_Cells_Reporting_Description, UTRAN_CSG_Cells_Reporting_Desp_t),
3565 M_NEXT_EXIST (CSG_Cells_Reporting_Desp_t, existEUTRAN_CSG_Cells_Reporting_Description, 1),
3566 M_TYPE (CSG_Cells_Reporting_Desp_t, EUTRAN_CSG_Cells_Reporting_Description, EUTRAN_CSG_Cells_Reporting_Desp_t),
3567CSN_DESCR_END (CSG_Cells_Reporting_Desp_t)
3568
3569static const
3570CSN_DESCR_BEGIN (PriorityAndEUTRAN_ParametersDescription_PMO_t)
3571 M_NEXT_EXIST (PriorityAndEUTRAN_ParametersDescription_PMO_t, existServingCellPriorityParametersDescription, 1),
3572 M_TYPE (PriorityAndEUTRAN_ParametersDescription_PMO_t, ServingCellPriorityParametersDescription, ServingCellPriorityParametersDescription_t),
3573 M_NEXT_EXIST (PriorityAndEUTRAN_ParametersDescription_PMO_t, existPriorityParametersDescription3G_PMO, 1),
3574 M_TYPE (PriorityAndEUTRAN_ParametersDescription_PMO_t, PriorityParametersDescription3G_PMO, PriorityParametersDescription3G_PMO_t),
3575 M_NEXT_EXIST (PriorityAndEUTRAN_ParametersDescription_PMO_t, existEUTRAN_ParametersDescription_PMO, 1),
3576 M_TYPE (PriorityAndEUTRAN_ParametersDescription_PMO_t, EUTRAN_ParametersDescription_PMO, EUTRAN_ParametersDescription_PMO_t),
3577CSN_DESCR_END (PriorityAndEUTRAN_ParametersDescription_PMO_t)
3578
3579
3580static const
3581CSN_DESCR_BEGIN (Delete_All_Stored_Individual_Priorities_t)
Anders Broman72c102a2020-01-24 14:31:15 +01003582 M_NULL (Delete_All_Stored_Individual_Priorities_t, dummy, 0),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03003583CSN_DESCR_END (Delete_All_Stored_Individual_Priorities_t)
3584
3585static const
3586CSN_DESCR_BEGIN (Individual_UTRAN_Priority_FDD_t)
3587 M_REC_ARRAY (Individual_UTRAN_Priority_FDD_t, FDD_ARFCN, Count, 14),
3588CSN_DESCR_END (Individual_UTRAN_Priority_FDD_t)
3589
3590static const
3591CSN_DESCR_BEGIN (Individual_UTRAN_Priority_TDD_t)
3592 M_REC_ARRAY (Individual_UTRAN_Priority_TDD_t, TDD_ARFCN, Count, 14),
3593CSN_DESCR_END (Individual_UTRAN_Priority_TDD_t)
3594
3595static const
3596CSN_DESCR_BEGIN (Repeated_Individual_UTRAN_Priority_Parameters_t)
3597 M_UNION (Repeated_Individual_UTRAN_Priority_Parameters_t, 2),
3598 M_TYPE (Repeated_Individual_UTRAN_Priority_Parameters_t, u.Individual_UTRAN_Priority_FDD, Individual_UTRAN_Priority_FDD_t),
3599 M_TYPE (Repeated_Individual_UTRAN_Priority_Parameters_t, u.Individual_UTRAN_Priority_TDD, Individual_UTRAN_Priority_TDD_t),
3600 M_UINT (Repeated_Individual_UTRAN_Priority_Parameters_t, UTRAN_PRIORITY, 3),
3601CSN_DESCR_END (Repeated_Individual_UTRAN_Priority_Parameters_t)
3602
3603static const
3604CSN_DESCR_BEGIN (ThreeG_Individual_Priority_Parameters_Description_t)
3605 M_NEXT_EXIST (ThreeG_Individual_Priority_Parameters_Description_t, Exist_DEFAULT_UTRAN_PRIORITY, 1),
3606 M_UINT (ThreeG_Individual_Priority_Parameters_Description_t, DEFAULT_UTRAN_PRIORITY, 3),
3607 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),
3608CSN_DESCR_END (ThreeG_Individual_Priority_Parameters_Description_t)
3609
3610static const
3611CSN_DESCR_BEGIN (Repeated_Individual_EUTRAN_Priority_Parameters_t)
3612 M_REC_ARRAY (Repeated_Individual_EUTRAN_Priority_Parameters_t, EARFCN, Count, 16),
3613 M_UINT (Repeated_Individual_EUTRAN_Priority_Parameters_t, EUTRAN_PRIORITY, 3),
3614CSN_DESCR_END (Repeated_Individual_EUTRAN_Priority_Parameters_t)
3615
3616static const
3617CSN_DESCR_BEGIN (EUTRAN_Individual_Priority_Parameters_Description_t)
3618 M_NEXT_EXIST (EUTRAN_Individual_Priority_Parameters_Description_t, Exist_DEFAULT_EUTRAN_PRIORITY, 1),
3619 M_UINT (EUTRAN_Individual_Priority_Parameters_Description_t, DEFAULT_EUTRAN_PRIORITY, 3),
3620 M_REC_TARRAY (EUTRAN_Individual_Priority_Parameters_Description_t, Repeated_Individual_EUTRAN_Priority_Parameters, Repeated_Individual_EUTRAN_Priority_Parameters_t, Count),
3621CSN_DESCR_END (EUTRAN_Individual_Priority_Parameters_Description_t)
3622
3623static const
3624CSN_DESCR_BEGIN (Provide_Individual_Priorities_t)
3625 M_UINT (Provide_Individual_Priorities_t, GERAN_PRIORITY, 3),
3626 M_NEXT_EXIST (Provide_Individual_Priorities_t, Exist_3G_Individual_Priority_Parameters_Description, 1),
3627 M_TYPE (Provide_Individual_Priorities_t, ThreeG_Individual_Priority_Parameters_Description, ThreeG_Individual_Priority_Parameters_Description_t),
3628 M_NEXT_EXIST (Provide_Individual_Priorities_t, Exist_EUTRAN_Individual_Priority_Parameters_Description, 1),
3629 M_TYPE (Provide_Individual_Priorities_t, EUTRAN_Individual_Priority_Parameters_Description, EUTRAN_Individual_Priority_Parameters_Description_t),
3630 M_NEXT_EXIST (Provide_Individual_Priorities_t, Exist_T3230_timeout_value, 1),
3631 M_UINT (Provide_Individual_Priorities_t, T3230_timeout_value, 3),
3632CSN_DESCR_END (Provide_Individual_Priorities_t)
3633
3634static const
3635CSN_DESCR_BEGIN (Individual_Priorities_t)
3636 M_UNION (Individual_Priorities_t, 2),
3637 M_TYPE (Individual_Priorities_t, u.Delete_All_Stored_Individual_Priorities, Delete_All_Stored_Individual_Priorities_t),
3638 M_TYPE (Individual_Priorities_t, u.Provide_Individual_Priorities, Provide_Individual_Priorities_t),
3639CSN_DESCR_END (Individual_Priorities_t)
3640
3641static const
3642CSN_DESCR_BEGIN (PMO_AdditionsR9_t)
3643 M_NEXT_EXIST (PMO_AdditionsR9_t, existEnhanced_Cell_Reselection_Parameters_Description, 1),
3644 M_TYPE (PMO_AdditionsR9_t, Enhanced_Cell_Reselection_Parameters_Description, Enh_Cell_Reselect_Param_Desp_t),
3645 M_NEXT_EXIST (PMO_AdditionsR9_t, existCSG_Cells_Reporting_Description, 1),
3646 M_TYPE (PMO_AdditionsR9_t, CSG_Cells_Reporting_Description, CSG_Cells_Reporting_Desp_t),
3647CSN_DESCR_END (PMO_AdditionsR9_t)
3648
3649static const
3650CSN_DESCR_BEGIN (PMO_AdditionsR8_t)
3651 M_NEXT_EXIST (PMO_AdditionsR8_t, existBA_IND_3G_PMO_IND, 2),
Anders Broman8ea3cbe2020-01-28 17:36:33 +01003652 M_UINT (PMO_AdditionsR8_t, BA_IND_3G, 1),
3653 M_UINT (PMO_AdditionsR8_t, PMO_IND, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03003654 M_NEXT_EXIST (PMO_AdditionsR8_t, existPriorityAndEUTRAN_ParametersDescription_PMO, 1),
3655 M_TYPE (PMO_AdditionsR8_t, PriorityAndEUTRAN_ParametersDescription_PMO, PriorityAndEUTRAN_ParametersDescription_PMO_t),
3656 M_NEXT_EXIST (PMO_AdditionsR8_t, existIndividualPriorities_PMO, 1),
3657 M_TYPE (PMO_AdditionsR8_t, IndividualPriorities_PMO, Individual_Priorities_t),
3658 M_NEXT_EXIST (PMO_AdditionsR8_t, existThreeG_CSG_Description, 1),
3659 M_TYPE (PMO_AdditionsR8_t, ThreeG_CSG_Description_PMO, ThreeG_CSG_Description_t),
3660 M_NEXT_EXIST (PMO_AdditionsR8_t, existEUTRAN_CSG_Description, 1),
3661 M_TYPE (PMO_AdditionsR8_t, EUTRAN_CSG_Description_PMO, EUTRAN_CSG_Description_t),
3662 M_NEXT_EXIST (PMO_AdditionsR8_t, existMeasurement_Control_Parameters_Description, 1),
3663 M_TYPE (PMO_AdditionsR8_t, Measurement_Control_Parameters_Description_PMO, Meas_Ctrl_Param_Desp_t),
3664 M_NEXT_EXIST_OR_NULL (PMO_AdditionsR8_t, existAdditionsR9, 1),
3665 M_TYPE (PMO_AdditionsR8_t, AdditionsR9, PMO_AdditionsR9_t),
3666CSN_DESCR_END (PMO_AdditionsR8_t)
3667
3668static const
3669CSN_DESCR_BEGIN (PMO_AdditionsR7_t)
3670 M_NEXT_EXIST (PMO_AdditionsR7_t, existREPORTING_OFFSET_THRESHOLD_700, 2),
3671 M_UINT (PMO_AdditionsR7_t, REPORTING_OFFSET_700, 3),
3672 M_UINT (PMO_AdditionsR7_t, REPORTING_THRESHOLD_700, 3),
3673
3674 M_NEXT_EXIST (PMO_AdditionsR7_t, existREPORTING_OFFSET_THRESHOLD_810, 2),
3675 M_UINT (PMO_AdditionsR7_t, REPORTING_OFFSET_810, 3),
3676 M_UINT (PMO_AdditionsR7_t, REPORTING_THRESHOLD_810, 3),
3677
3678 M_NEXT_EXIST_OR_NULL (PMO_AdditionsR7_t, existAdditionsR8, 1),
3679 M_TYPE (PMO_AdditionsR7_t, additionsR8, PMO_AdditionsR8_t),
3680CSN_DESCR_END (PMO_AdditionsR7_t)
3681
3682static const
3683CSN_DESCR_BEGIN (PMO_AdditionsR6_t)
3684 M_UINT (PMO_AdditionsR6_t, CCN_ACTIVE_3G, 1),
3685 M_NEXT_EXIST_OR_NULL (PMO_AdditionsR6_t, existAdditionsR7, 1),
3686 M_TYPE (PMO_AdditionsR6_t, additionsR7, PMO_AdditionsR7_t),
3687CSN_DESCR_END (PMO_AdditionsR6_t)
3688
3689static const
3690CSN_DESCR_BEGIN(PCCO_AdditionsR6_t)
3691 M_UINT (PCCO_AdditionsR6_t, CCN_ACTIVE_3G, 1),
3692CSN_DESCR_END (PCCO_AdditionsR6_t)
3693
3694static const
3695CSN_DESCR_BEGIN (PMO_AdditionsR5_t)
3696 M_NEXT_EXIST (PMO_AdditionsR5_t, existGRNTI_Extension, 1),
3697 M_UINT (PMO_AdditionsR5_t, GRNTI, 4),
3698 M_NEXT_EXIST (PMO_AdditionsR5_t, exist_lu_ModeNeighbourCellParams, 1),
3699 M_REC_TARRAY (PMO_AdditionsR5_t, lu_ModeNeighbourCellParams, lu_ModeNeighbourCellParams_t, count_lu_ModeNeighbourCellParams),
3700 M_NEXT_EXIST (PMO_AdditionsR5_t, existNC_lu_ModeOnlyCapableCellList, 1),
3701 M_TYPE (PMO_AdditionsR5_t, NC_lu_ModeOnlyCapableCellList, NC_lu_ModeOnlyCapableCellList_t),
3702 M_NEXT_EXIST (PMO_AdditionsR5_t, existGPRS_AdditionalMeasurementParams3G, 1),
3703 M_TYPE (PMO_AdditionsR5_t, GPRS_AdditionalMeasurementParams3G, GPRS_AdditionalMeasurementParams3G_t),
3704 M_NEXT_EXIST_OR_NULL (PMO_AdditionsR5_t, existAdditionsR6, 1),
3705 M_TYPE (PMO_AdditionsR5_t, additionsR6, PMO_AdditionsR6_t),
3706CSN_DESCR_END (PMO_AdditionsR5_t)
3707
3708static const
3709CSN_DESCR_BEGIN (PCCO_AdditionsR5_t)
3710 M_NEXT_EXIST (PCCO_AdditionsR5_t, existGRNTI_Extension, 1),
3711 M_UINT (PCCO_AdditionsR5_t, GRNTI, 4),
3712 M_NEXT_EXIST (PCCO_AdditionsR5_t, exist_lu_ModeNeighbourCellParams, 1),
3713 M_REC_TARRAY (PCCO_AdditionsR5_t, lu_ModeNeighbourCellParams, lu_ModeNeighbourCellParams_t, count_lu_ModeNeighbourCellParams),
3714 M_NEXT_EXIST (PCCO_AdditionsR5_t, existNC_lu_ModeOnlyCapableCellList, 1),
3715 M_TYPE (PCCO_AdditionsR5_t, NC_lu_ModeOnlyCapableCellList, NC_lu_ModeOnlyCapableCellList_t),
3716 M_NEXT_EXIST (PCCO_AdditionsR5_t, existGPRS_AdditionalMeasurementParams3G, 1),
3717 M_TYPE (PCCO_AdditionsR5_t, GPRS_AdditionalMeasurementParams3G, GPRS_AdditionalMeasurementParams3G_t),
3718 M_NEXT_EXIST_OR_NULL (PCCO_AdditionsR5_t, existAdditionsR6, 1),
3719 M_TYPE (PCCO_AdditionsR5_t, additionsR6, PCCO_AdditionsR6_t),
3720CSN_DESCR_END (PCCO_AdditionsR5_t)
3721
3722static const
3723CSN_DESCR_BEGIN (PMO_AdditionsR4_t)
3724 M_UINT (PMO_AdditionsR4_t, CCN_ACTIVE, 1),
3725 M_NEXT_EXIST (PMO_AdditionsR4_t, Exist_CCN_Support_Description_ID, 1),
3726 M_TYPE (PMO_AdditionsR4_t, CCN_Support_Description, CCN_Support_Description_t),
3727 M_NEXT_EXIST_OR_NULL (PMO_AdditionsR4_t, Exist_AdditionsR5, 1),
3728 M_TYPE (PMO_AdditionsR4_t, AdditionsR5, PMO_AdditionsR5_t),
3729CSN_DESCR_END (PMO_AdditionsR4_t)
3730
3731static const
3732CSN_DESCR_BEGIN (PMO_AdditionsR99_t)
3733 M_NEXT_EXIST (PMO_AdditionsR99_t, Exist_ENH_Measurement_Parameters, 1),
3734 M_TYPE (PMO_AdditionsR99_t, ENH_Measurement_Parameters, ENH_Measurement_Parameters_PMO_t),
3735 M_NEXT_EXIST_OR_NULL (PMO_AdditionsR99_t, Exist_AdditionsR4, 1),
3736 M_TYPE (PMO_AdditionsR99_t, AdditionsR4, PMO_AdditionsR4_t),
3737CSN_DESCR_END (PMO_AdditionsR99_t)
3738
3739static const
3740CSN_DESCR_BEGIN (PCCO_AdditionsR4_t)
3741 M_UINT (PCCO_AdditionsR4_t, CCN_ACTIVE, 1),
3742 M_NEXT_EXIST (PCCO_AdditionsR4_t, Exist_Container_ID, 1),
3743 M_UINT (PCCO_AdditionsR4_t, CONTAINER_ID, 2),
3744 M_NEXT_EXIST (PCCO_AdditionsR4_t, Exist_CCN_Support_Description_ID, 1),
3745 M_TYPE (PCCO_AdditionsR4_t, CCN_Support_Description, CCN_Support_Description_t),
3746 M_NEXT_EXIST_OR_NULL (PCCO_AdditionsR4_t, Exist_AdditionsR5, 1),
3747 M_TYPE (PCCO_AdditionsR4_t, AdditionsR5, PCCO_AdditionsR5_t),
3748CSN_DESCR_END (PCCO_AdditionsR4_t)
3749
3750static const
3751CSN_DESCR_BEGIN (PCCO_AdditionsR99_t)
3752 M_TYPE (PCCO_AdditionsR99_t, ENH_Measurement_Parameters, ENH_Measurement_Parameters_PCCO_t),
3753 M_NEXT_EXIST_OR_NULL (PCCO_AdditionsR99_t, Exist_AdditionsR4, 1),
3754 M_TYPE (PCCO_AdditionsR99_t, AdditionsR4, PCCO_AdditionsR4_t),
3755CSN_DESCR_END (PCCO_AdditionsR99_t)
3756
3757static const
3758CSN_DESCR_BEGIN(LSA_ID_Info_Element_t)
3759 M_UNION (LSA_ID_Info_Element_t, 2),
3760 M_UINT (LSA_ID_Info_Element_t, u.LSA_ID, 24),
3761 M_UINT (LSA_ID_Info_Element_t, u.ShortLSA_ID, 10),
3762CSN_DESCR_END (LSA_ID_Info_Element_t)
3763
3764static const
3765CSN_DESCR_BEGIN(LSA_ID_Info_t)
3766 M_REC_TARRAY (LSA_ID_Info_t, LSA_ID_Info_Elements, LSA_ID_Info_Element_t, Count_LSA_ID_Info_Element),
3767CSN_DESCR_END (LSA_ID_Info_t)
3768
3769static const
3770CSN_DESCR_BEGIN(LSA_Parameters_t)
3771 M_UINT (LSA_Parameters_t, NR_OF_FREQ_OR_CELLS, 5),
3772 M_VAR_TARRAY (LSA_Parameters_t, LSA_ID_Info, LSA_ID_Info_t, NR_OF_FREQ_OR_CELLS),
3773CSN_DESCR_END (LSA_Parameters_t)
3774
3775static const
3776CSN_DESCR_BEGIN (PMO_AdditionsR98_t)
3777 M_NEXT_EXIST (PMO_AdditionsR98_t, Exist_LSA_Parameters, 1),
3778 M_TYPE (PMO_AdditionsR98_t, LSA_Parameters, LSA_Parameters_t),
3779
3780 M_NEXT_EXIST_OR_NULL (PMO_AdditionsR98_t, Exist_AdditionsR99, 1),
3781 M_TYPE (PMO_AdditionsR98_t, AdditionsR99, PMO_AdditionsR99_t),
3782CSN_DESCR_END (PMO_AdditionsR98_t)
3783
3784static const
3785CSN_DESCR_BEGIN (PCCO_AdditionsR98_t)
3786 M_NEXT_EXIST (PCCO_AdditionsR98_t, Exist_LSA_Parameters, 1),
3787 M_TYPE (PCCO_AdditionsR98_t, LSA_Parameters, LSA_Parameters_t),
3788
3789 M_NEXT_EXIST_OR_NULL (PCCO_AdditionsR98_t, Exist_AdditionsR99, 1),
3790 M_TYPE (PCCO_AdditionsR98_t, AdditionsR99, PCCO_AdditionsR99_t),
3791CSN_DESCR_END (PCCO_AdditionsR98_t)
3792
3793static const
3794CSN_DESCR_BEGIN (Target_Cell_GSM_t)
3795 M_UINT (Target_Cell_GSM_t, IMMEDIATE_REL, 1),
3796 M_UINT (Target_Cell_GSM_t, ARFCN, 10),
3797 M_UINT (Target_Cell_GSM_t, BSIC, 6),
3798 M_TYPE (Target_Cell_GSM_t, NC_Measurement_Parameters, NC_Measurement_Parameters_with_Frequency_List_t),
3799 M_NEXT_EXIST_OR_NULL (Target_Cell_GSM_t, Exist_AdditionsR98, 1),
3800 M_TYPE (Target_Cell_GSM_t, AdditionsR98, PCCO_AdditionsR98_t),
3801CSN_DESCR_END (Target_Cell_GSM_t)
3802
3803static const
3804CSN_DESCR_BEGIN (Target_Cell_3G_AdditionsR8_t)
3805 M_NEXT_EXIST (Target_Cell_3G_AdditionsR8_t, Exist_EUTRAN_Target_Cell, 1),
3806 M_TYPE (Target_Cell_3G_AdditionsR8_t, EUTRAN_Target_Cell, EUTRAN_Target_Cell_t),
3807 M_NEXT_EXIST (Target_Cell_3G_AdditionsR8_t, Exist_Individual_Priorities, 1),
3808 M_TYPE (Target_Cell_3G_AdditionsR8_t, Individual_Priorities, Individual_Priorities_t),
3809CSN_DESCR_END (Target_Cell_3G_AdditionsR8_t)
3810
3811static const
3812CSN_DESCR_BEGIN (Target_Cell_3G_AdditionsR5_t)
3813 M_NEXT_EXIST (Target_Cell_3G_AdditionsR5_t, Exist_G_RNTI_Extention, 1),
3814 M_UINT (Target_Cell_3G_AdditionsR5_t, G_RNTI_Extention, 4),
3815 M_NEXT_EXIST_OR_NULL (Target_Cell_3G_AdditionsR5_t, Exist_AdditionsR8, 1),
3816 M_TYPE (Target_Cell_3G_AdditionsR5_t, AdditionsR8, Target_Cell_3G_AdditionsR8_t),
3817CSN_DESCR_END (Target_Cell_3G_AdditionsR5_t)
3818
3819static const
3820CSN_DESCR_BEGIN(Target_Cell_3G_t)
3821 /* 00 -- Message escape */
3822 M_FIXED (Target_Cell_3G_t, 2, 0x00),
3823 M_UINT (Target_Cell_3G_t, IMMEDIATE_REL, 1),
3824 M_NEXT_EXIST (Target_Cell_3G_t, Exist_FDD_Description, 1),
3825 M_TYPE (Target_Cell_3G_t, FDD_Target_Cell, FDD_Target_Cell_t),
3826 M_NEXT_EXIST (Target_Cell_3G_t, Exist_TDD_Description, 1),
3827 M_TYPE (Target_Cell_3G_t, TDD_Target_Cell, TDD_Target_Cell_t),
3828 M_NEXT_EXIST_OR_NULL (Target_Cell_3G_t, Exist_AdditionsR5, 1),
3829 M_TYPE (Target_Cell_3G_t, AdditionsR5, Target_Cell_3G_AdditionsR5_t),
3830CSN_DESCR_END (Target_Cell_3G_t)
3831
3832static const
3833CSN_DESCR_BEGIN(Packet_Cell_Change_Order_t)
3834 M_UINT (Packet_Cell_Change_Order_t, MESSAGE_TYPE, 6),
3835 M_UINT (Packet_Cell_Change_Order_t, PAGE_MODE, 2),
3836
3837 M_TYPE (Packet_Cell_Change_Order_t, ID, PacketCellChangeOrderID_t),
3838
3839 M_UNION (Packet_Cell_Change_Order_t, 2),
3840 M_TYPE (Packet_Cell_Change_Order_t, u.Target_Cell_GSM, Target_Cell_GSM_t),
3841 M_TYPE (Packet_Cell_Change_Order_t, u.Target_Cell_3G, Target_Cell_3G_t),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04003842
3843 M_PADDING_BITS(Packet_Cell_Change_Order_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03003844CSN_DESCR_END (Packet_Cell_Change_Order_t)
3845
3846/*< Packet (Enhanced) Measurement Report message contents > */
3847static const
3848CSN_DESCR_BEGIN(BA_USED_t)
3849 M_UINT (BA_USED_t, BA_USED, 1),
3850 M_UINT (BA_USED_t, BA_USED_3G, 1),
3851CSN_DESCR_END (BA_USED_t)
3852
3853static const
3854CSN_DESCR_BEGIN(Serving_Cell_Data_t)
3855 M_UINT (Serving_Cell_Data_t, RXLEV_SERVING_CELL, 6),
3856 M_FIXED (Serving_Cell_Data_t, 1, 0),
3857CSN_DESCR_END (Serving_Cell_Data_t)
3858
3859static const
3860CSN_DESCR_BEGIN(NC_Measurements_t)
3861 M_UINT (NC_Measurements_t, FREQUENCY_N, 6),
3862
3863 M_NEXT_EXIST (NC_Measurements_t, Exist_BSIC_N, 1),
3864 M_UINT (NC_Measurements_t, BSIC_N, 6),
3865 M_UINT (NC_Measurements_t, RXLEV_N, 6),
3866CSN_DESCR_END (NC_Measurements_t)
3867
3868static const
3869CSN_DESCR_BEGIN(RepeatedInvalid_BSIC_Info_t)
3870 M_UINT (RepeatedInvalid_BSIC_Info_t, BCCH_FREQ_N, 5),
3871 M_UINT (RepeatedInvalid_BSIC_Info_t, BSIC_N, 6),
3872 M_UINT (RepeatedInvalid_BSIC_Info_t, RXLEV_N, 6),
3873CSN_DESCR_END (RepeatedInvalid_BSIC_Info_t)
3874
3875static const
3876CSN_DESCR_BEGIN(REPORTING_QUANTITY_Instance_t)
3877 M_NEXT_EXIST (REPORTING_QUANTITY_Instance_t, Exist_REPORTING_QUANTITY, 1),
3878 M_UINT (REPORTING_QUANTITY_Instance_t, REPORTING_QUANTITY, 6),
3879CSN_DESCR_END (REPORTING_QUANTITY_Instance_t)
3880
3881static const
3882CSN_DESCR_BEGIN(NC_Measurement_Report_t)
3883 M_UINT (NC_Measurement_Report_t, NC_MODE, 1),
3884 M_TYPE (NC_Measurement_Report_t, Serving_Cell_Data, Serving_Cell_Data_t),
3885 M_UINT (NC_Measurement_Report_t, NUMBER_OF_NC_MEASUREMENTS, 3),
3886 M_VAR_TARRAY (NC_Measurement_Report_t, NC_Measurements, NC_Measurements_t, NUMBER_OF_NC_MEASUREMENTS),
3887CSN_DESCR_END (NC_Measurement_Report_t)
3888
3889static const
3890CSN_DESCR_BEGIN(ENH_NC_Measurement_Report_t)
3891 M_UINT (ENH_NC_Measurement_Report_t, NC_MODE, 1),
3892 M_UNION (ENH_NC_Measurement_Report_t, 2),
3893 M_TYPE (ENH_NC_Measurement_Report_t, u.BA_USED, BA_USED_t),
3894 M_UINT (ENH_NC_Measurement_Report_t, u.PSI3_CHANGE_MARK, 2),
3895 M_UINT (ENH_NC_Measurement_Report_t, PMO_USED, 1),
3896 M_UINT (ENH_NC_Measurement_Report_t, BSIC_Seen, 1),
3897 M_UINT (ENH_NC_Measurement_Report_t, SCALE, 1),
3898 M_NEXT_EXIST (ENH_NC_Measurement_Report_t, Exist_Serving_Cell_Data, 1),
3899 M_TYPE (ENH_NC_Measurement_Report_t, Serving_Cell_Data, Serving_Cell_Data_t),
Pau Espin Pedrol81b40cb2020-03-23 15:23:51 +01003900 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 +03003901 M_NEXT_EXIST (ENH_NC_Measurement_Report_t, Exist_ReportBitmap, 1),
3902 M_VAR_TARRAY (ENH_NC_Measurement_Report_t, REPORTING_QUANTITY_Instances, REPORTING_QUANTITY_Instance_t, Count_REPORTING_QUANTITY_Instances),
3903CSN_DESCR_END (ENH_NC_Measurement_Report_t)
3904
3905
3906static const
3907CSN_DESCR_BEGIN(EXT_Measurement_Report_t)
3908 M_UINT (EXT_Measurement_Report_t, EXT_REPORTING_TYPE, 2),
3909
3910 M_NEXT_EXIST (EXT_Measurement_Report_t, Exist_I_LEVEL, 1),
3911
3912 M_NEXT_EXIST (EXT_Measurement_Report_t, Slot[0].Exist, 1),
3913 M_UINT (EXT_Measurement_Report_t, Slot[0].I_LEVEL, 6),
3914
3915 M_NEXT_EXIST (EXT_Measurement_Report_t, Slot[1].Exist, 1),
3916 M_UINT (EXT_Measurement_Report_t, Slot[1].I_LEVEL, 6),
3917
3918 M_NEXT_EXIST (EXT_Measurement_Report_t, Slot[2].Exist, 1),
3919 M_UINT (EXT_Measurement_Report_t, Slot[2].I_LEVEL, 6),
3920
3921 M_NEXT_EXIST (EXT_Measurement_Report_t, Slot[3].Exist, 1),
3922 M_UINT (EXT_Measurement_Report_t, Slot[3].I_LEVEL, 6),
3923
3924 M_NEXT_EXIST (EXT_Measurement_Report_t, Slot[4].Exist, 1),
3925 M_UINT (EXT_Measurement_Report_t, Slot[4].I_LEVEL, 6),
3926
3927 M_NEXT_EXIST (EXT_Measurement_Report_t, Slot[5].Exist, 1),
3928 M_UINT (EXT_Measurement_Report_t, Slot[5].I_LEVEL, 6),
3929
3930 M_NEXT_EXIST (EXT_Measurement_Report_t, Slot[6].Exist, 1),
3931 M_UINT (EXT_Measurement_Report_t, Slot[6].I_LEVEL, 6),
3932
3933 M_NEXT_EXIST (EXT_Measurement_Report_t, Slot[7].Exist, 1),
3934 M_UINT (EXT_Measurement_Report_t, Slot[7].I_LEVEL, 6),
3935
3936 M_UINT (EXT_Measurement_Report_t, NUMBER_OF_EXT_MEASUREMENTS, 5),
3937 M_VAR_TARRAY (EXT_Measurement_Report_t, EXT_Measurements, NC_Measurements_t, NUMBER_OF_EXT_MEASUREMENTS),
3938CSN_DESCR_END (EXT_Measurement_Report_t)
3939
3940static const
3941CSN_DESCR_BEGIN (Measurements_3G_t)
3942 M_UINT (Measurements_3G_t, CELL_LIST_INDEX_3G, 7),
3943 M_UINT (Measurements_3G_t, REPORTING_QUANTITY, 6),
3944CSN_DESCR_END (Measurements_3G_t)
3945
3946static const
3947CSN_DESCR_BEGIN (EUTRAN_Measurement_Report_Body_t)
3948 M_UINT (EUTRAN_Measurement_Report_Body_t, EUTRAN_FREQUENCY_INDEX, 3),
3949 M_UINT (EUTRAN_Measurement_Report_Body_t, CELL_IDENTITY, 9),
3950 M_UINT (EUTRAN_Measurement_Report_Body_t, REPORTING_QUANTITY, 6),
3951CSN_DESCR_END (EUTRAN_Measurement_Report_Body_t)
3952
3953static const
3954CSN_DESCR_BEGIN (EUTRAN_Measurement_Report_t)
3955 M_UINT_OFFSET (EUTRAN_Measurement_Report_t, N_EUTRAN, 2, 1),
3956 M_VAR_TARRAY (EUTRAN_Measurement_Report_t, Report, EUTRAN_Measurement_Report_Body_t, N_EUTRAN),
3957CSN_DESCR_END (EUTRAN_Measurement_Report_t)
3958
3959static const
3960CSN_DESCR_BEGIN(UTRAN_CSG_Measurement_Report_t)
3961 M_UINT (UTRAN_CSG_Measurement_Report_t, UTRAN_CGI, 28),
3962 M_NEXT_EXIST (UTRAN_CSG_Measurement_Report_t, Exist_PLMN_ID, 1),
3963 M_TYPE (UTRAN_CSG_Measurement_Report_t, Plmn_ID, PLMN_t),
3964 M_UINT (UTRAN_CSG_Measurement_Report_t, CSG_ID, 27),
Anders Broman8ea3cbe2020-01-28 17:36:33 +01003965 M_UINT (UTRAN_CSG_Measurement_Report_t, Access_Mode, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03003966 M_UINT (UTRAN_CSG_Measurement_Report_t, REPORTING_QUANTITY, 6),
3967CSN_DESCR_END (UTRAN_CSG_Measurement_Report_t)
3968
3969static const
3970CSN_DESCR_BEGIN(EUTRAN_CSG_Measurement_Report_t)
Anders Broman8ea3cbe2020-01-28 17:36:33 +01003971 M_UINT (EUTRAN_CSG_Measurement_Report_t, EUTRAN_CGI, 28),
3972 M_UINT (EUTRAN_CSG_Measurement_Report_t, Tracking_Area_Code, 16),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03003973 M_NEXT_EXIST (EUTRAN_CSG_Measurement_Report_t, Exist_PLMN_ID, 1),
3974 M_TYPE (EUTRAN_CSG_Measurement_Report_t, Plmn_ID, PLMN_t),
Anders Broman8ea3cbe2020-01-28 17:36:33 +01003975 M_UINT (EUTRAN_CSG_Measurement_Report_t, CSG_ID, 27),
3976 M_UINT (EUTRAN_CSG_Measurement_Report_t, Access_Mode, 1),
3977 M_UINT (EUTRAN_CSG_Measurement_Report_t, REPORTING_QUANTITY, 6),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03003978CSN_DESCR_END (EUTRAN_CSG_Measurement_Report_t)
3979
3980static const
3981CSN_DESCR_BEGIN (PMR_AdditionsR9_t)
3982 M_NEXT_EXIST (PMR_AdditionsR9_t, Exist_UTRAN_CSG_Meas_Rpt, 1),
3983 M_TYPE (PMR_AdditionsR9_t, UTRAN_CSG_Meas_Rpt, UTRAN_CSG_Measurement_Report_t),
3984 M_NEXT_EXIST (PMR_AdditionsR9_t, Exist_EUTRAN_CSG_Meas_Rpt, 1),
3985 M_TYPE (PMR_AdditionsR9_t, EUTRAN_CSG_Meas_Rpt, EUTRAN_CSG_Measurement_Report_t),
3986CSN_DESCR_END (PMR_AdditionsR9_t)
3987
3988static const
3989CSN_DESCR_BEGIN (PMR_AdditionsR8_t)
3990 M_NEXT_EXIST (PMR_AdditionsR8_t, Exist_EUTRAN_Meas_Rpt, 1),
3991 M_TYPE (PMR_AdditionsR8_t, EUTRAN_Meas_Rpt, EUTRAN_Measurement_Report_t),
3992 M_NEXT_EXIST_OR_NULL(PMR_AdditionsR8_t, Exist_AdditionsR9, 1),
3993 M_TYPE (PMR_AdditionsR8_t, AdditionsR9, PMR_AdditionsR9_t),
3994CSN_DESCR_END (PMR_AdditionsR8_t)
3995
3996static const
3997CSN_DESCR_BEGIN (PMR_AdditionsR5_t)
Pascal Quantine4a243c2020-01-28 18:08:15 +01003998 M_NEXT_EXIST (PMR_AdditionsR5_t, Exist_GRNTI, 3),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03003999 M_UINT (PMR_AdditionsR5_t, GRNTI, 4),
4000 M_NEXT_EXIST_OR_NULL (PMR_AdditionsR5_t, Exist_AdditionsR8, 1),
4001 M_TYPE (PMR_AdditionsR5_t, AdditionsR8, PMR_AdditionsR8_t),
4002CSN_DESCR_END (PMR_AdditionsR5_t)
4003
4004static const
4005CSN_DESCR_BEGIN (PMR_AdditionsR99_t)
4006 M_NEXT_EXIST (PMR_AdditionsR99_t, Exist_Info3G, 4),
4007 M_UNION (PMR_AdditionsR99_t, 2),
4008 M_TYPE (PMR_AdditionsR99_t, u.BA_USED, BA_USED_t),
4009 M_UINT (PMR_AdditionsR99_t, u.PSI3_CHANGE_MARK, 2),
4010 M_UINT (PMR_AdditionsR99_t, PMO_USED, 1),
4011
4012 M_NEXT_EXIST (PMR_AdditionsR99_t, Exist_MeasurementReport3G, 2),
4013 M_UINT_OFFSET (PMR_AdditionsR99_t, N_3G, 3, 1), /* offset 1 */
4014 M_VAR_TARRAY_OFFSET (PMR_AdditionsR99_t, Measurements_3G, Measurements_3G_t, N_3G),
4015
4016 M_NEXT_EXIST_OR_NULL (PMR_AdditionsR99_t, Exist_AdditionsR5, 1),
4017 M_TYPE (PMR_AdditionsR99_t, AdditionsR5, PMR_AdditionsR5_t),
4018CSN_DESCR_END (PMR_AdditionsR99_t)
4019
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01004020#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004021static const
4022CSN_DESCR_BEGIN(EMR_ServingCell_t)
4023 /*CSN_MEMBER_BIT (EMR_ServingCell_t, DTX_USED),*/
Anders Broman8ea3cbe2020-01-28 17:36:33 +01004024 M_UINT (EMR_ServingCell_t, DTX_USED, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004025 M_UINT (EMR_ServingCell_t, RXLEV_VAL, 6),
4026 M_UINT (EMR_ServingCell_t, RX_QUAL_FULL, 3),
4027 M_UINT (EMR_ServingCell_t, MEAN_BEP, 5),
4028 M_UINT (EMR_ServingCell_t, CV_BEP, 3),
4029 M_UINT (EMR_ServingCell_t, NBR_RCVD_BLOCKS, 5),
4030CSN_DESCR_END(EMR_ServingCell_t)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01004031#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004032
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01004033#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004034static const
4035CSN_DESCR_BEGIN (EnhancedMeasurementReport_t)
4036 M_UINT (EnhancedMeasurementReport_t, RR_Short_PD, 1),
4037 M_UINT (EnhancedMeasurementReport_t, MESSAGE_TYPE, 5),
4038 M_UINT (EnhancedMeasurementReport_t, ShortLayer2_Header, 2),
4039 M_TYPE (EnhancedMeasurementReport_t, BA_USED, BA_USED_t),
4040 M_UINT (EnhancedMeasurementReport_t, BSIC_Seen, 1),
4041 M_UINT (EnhancedMeasurementReport_t, SCALE, 1),
4042 M_NEXT_EXIST (EnhancedMeasurementReport_t, Exist_ServingCellData, 1),
4043 M_TYPE (EnhancedMeasurementReport_t, ServingCellData, EMR_ServingCell_t),
Pau Espin Pedrol81b40cb2020-03-23 15:23:51 +01004044 M_REC_TARRAY (EnhancedMeasurementReport_t, RepeatedInvalid_BSIC_Info, RepeatedInvalid_BSIC_Info_t,
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004045 Count_RepeatedInvalid_BSIC_Info),
4046 M_NEXT_EXIST (EnhancedMeasurementReport_t, Exist_ReportBitmap, 1),
4047 M_VAR_TARRAY (EnhancedMeasurementReport_t, REPORTING_QUANTITY_Instances, REPORTING_QUANTITY_Instance_t, Count_REPORTING_QUANTITY_Instances),
4048CSN_DESCR_END (EnhancedMeasurementReport_t)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01004049#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004050
4051static const
4052CSN_DESCR_BEGIN (Packet_Measurement_Report_t)
4053 /* Mac header */
4054 M_UINT (Packet_Measurement_Report_t, PayloadType, 2),
4055 M_UINT (Packet_Measurement_Report_t, spare, 5),
4056 M_UINT (Packet_Measurement_Report_t, R, 1),
4057 M_UINT (Packet_Measurement_Report_t, MESSAGE_TYPE, 6),
4058 /* Mac header */
4059
4060 M_UINT (Packet_Measurement_Report_t, TLLI, 32),
4061
4062 M_NEXT_EXIST (Packet_Measurement_Report_t, Exist_PSI5_CHANGE_MARK, 1),
4063 M_UINT (Packet_Measurement_Report_t, PSI5_CHANGE_MARK, 2),
4064
4065 M_UNION (Packet_Measurement_Report_t, 2),
4066 M_TYPE (Packet_Measurement_Report_t, u.NC_Measurement_Report, NC_Measurement_Report_t),
4067 M_TYPE (Packet_Measurement_Report_t, u.EXT_Measurement_Report, EXT_Measurement_Report_t),
4068
4069 M_NEXT_EXIST_OR_NULL(Packet_Measurement_Report_t, Exist_AdditionsR99, 1),
4070 M_TYPE (Packet_Measurement_Report_t, AdditionsR99, PMR_AdditionsR99_t),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04004071
4072 M_PADDING_BITS (Packet_Measurement_Report_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004073CSN_DESCR_END (Packet_Measurement_Report_t)
4074
4075static const
4076CSN_DESCR_BEGIN (PEMR_AdditionsR9_t)
4077 M_NEXT_EXIST (PEMR_AdditionsR9_t, Exist_UTRAN_CSG_Target_Cell, 1),
4078 M_TYPE (PEMR_AdditionsR9_t, UTRAN_CSG_Target_Cell, UTRAN_CSG_Target_Cell_t),
4079 M_NEXT_EXIST (PEMR_AdditionsR9_t, Exist_EUTRAN_CSG_Target_Cell, 1),
4080 M_TYPE (PEMR_AdditionsR9_t, EUTRAN_CSG_Target_Cell, EUTRAN_CSG_Target_Cell_t),
4081CSN_DESCR_END (PEMR_AdditionsR9_t)
4082
4083static const
4084CSN_DESCR_BEGIN (Bitmap_Report_Quantity_t)
4085 M_NEXT_EXIST (Bitmap_Report_Quantity_t, Exist_REPORTING_QUANTITY, 1),
4086 M_UINT (Bitmap_Report_Quantity_t, REPORTING_QUANTITY, 6),
4087CSN_DESCR_END (Bitmap_Report_Quantity_t)
4088
4089static const
4090CSN_DESCR_BEGIN (PEMR_AdditionsR8_t)
4091 M_UINT_OFFSET (PEMR_AdditionsR8_t, BITMAP_LENGTH, 7, 1),
4092 M_VAR_TARRAY (PEMR_AdditionsR8_t, Bitmap_Report_Quantity, Bitmap_Report_Quantity_t, BITMAP_LENGTH),
4093 M_NEXT_EXIST (PEMR_AdditionsR8_t, Exist_EUTRAN_Meas_Rpt, 1),
4094 M_TYPE (PEMR_AdditionsR8_t, EUTRAN_Meas_Rpt, EUTRAN_Measurement_Report_t),
4095 M_NEXT_EXIST_OR_NULL(PEMR_AdditionsR8_t, Exist_AdditionsR9, 1),
4096 M_TYPE (PEMR_AdditionsR8_t, AdditionsR9, PEMR_AdditionsR9_t),
4097CSN_DESCR_END (PEMR_AdditionsR8_t)
4098
4099static const
4100CSN_DESCR_BEGIN (PEMR_AdditionsR5_t)
4101 M_NEXT_EXIST (PEMR_AdditionsR5_t, Exist_GRNTI_Ext, 1),
4102 M_UINT (PEMR_AdditionsR5_t, GRNTI_Ext, 4),
4103 M_NEXT_EXIST_OR_NULL(PEMR_AdditionsR5_t, Exist_AdditionsR8, 1),
4104 M_TYPE (PEMR_AdditionsR5_t, AdditionsR8, PEMR_AdditionsR8_t),
4105CSN_DESCR_END (PEMR_AdditionsR5_t)
4106
4107
4108static const
4109CSN_DESCR_BEGIN (Packet_Enh_Measurement_Report_t)
4110 /* Mac header */
4111 M_UINT (Packet_Enh_Measurement_Report_t, PayloadType, 2),
4112 M_UINT (Packet_Enh_Measurement_Report_t, spare, 5),
4113 M_UINT (Packet_Enh_Measurement_Report_t, R, 1),
4114 M_UINT (Packet_Enh_Measurement_Report_t, MESSAGE_TYPE, 6),
4115 /* Mac header */
4116
4117 M_UINT (Packet_Enh_Measurement_Report_t, TLLI, 32),
4118
4119 M_TYPE (Packet_Enh_Measurement_Report_t, Measurements, ENH_NC_Measurement_Report_t),
4120
4121 M_NEXT_EXIST_OR_NULL(Packet_Enh_Measurement_Report_t, Exist_AdditionsR5, 1),
4122 M_TYPE (Packet_Enh_Measurement_Report_t, AdditionsR5, PEMR_AdditionsR5_t),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04004123
4124 M_PADDING_BITS(Packet_Enh_Measurement_Report_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004125CSN_DESCR_END (Packet_Enh_Measurement_Report_t)
4126
4127/*< Packet Measurement Order message contents >*/
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01004128#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004129static const
4130CSN_DESCR_BEGIN(EXT_Frequency_List_t)
4131 M_UINT (EXT_Frequency_List_t, START_FREQUENCY, 10),
4132 M_UINT (EXT_Frequency_List_t, NR_OF_FREQUENCIES, 5),
4133 M_UINT (EXT_Frequency_List_t, FREQ_DIFF_LENGTH, 3),
4134
4135/* TBD: Count_FREQUENCY_DIFF
4136 * guint8 FREQUENCY_DIFF[31];
4137 * bit (FREQ_DIFF_LENGTH) * NR_OF_FREQUENCIES --> MAX is bit(7) * 31
4138 */
4139CSN_DESCR_END (EXT_Frequency_List_t)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01004140#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004141
4142static const
4143CSN_DESCR_BEGIN (Packet_Measurement_Order_t)
4144 M_UINT (Packet_Measurement_Order_t, MESSAGE_TYPE, 6),
4145 M_UINT (Packet_Measurement_Order_t, PAGE_MODE, 2),
4146
4147 M_TYPE (Packet_Measurement_Order_t, ID, PacketDownlinkID_t), /* reuse the PDA ID type */
4148
4149 M_UINT (Packet_Measurement_Order_t, PMO_INDEX, 3),
4150 M_UINT (Packet_Measurement_Order_t, PMO_COUNT, 3),
4151
4152 M_NEXT_EXIST (Packet_Measurement_Order_t, Exist_NC_Measurement_Parameters, 1),
4153 M_TYPE (Packet_Measurement_Order_t, NC_Measurement_Parameters, NC_Measurement_Parameters_with_Frequency_List_t),
4154
4155 M_NEXT_EXIST (Packet_Measurement_Order_t, Exist_EXT_Measurement_Parameters, 1),
4156 M_FIXED (Packet_Measurement_Order_t, 2, 0x0), /* EXT_Measurement_Parameters not handled */
4157
4158 M_NEXT_EXIST_OR_NULL (Packet_Measurement_Order_t, Exist_AdditionsR98, 1),
4159 M_TYPE (Packet_Measurement_Order_t, AdditionsR98, PMO_AdditionsR98_t),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04004160
4161 M_PADDING_BITS (Packet_Measurement_Order_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004162CSN_DESCR_END (Packet_Measurement_Order_t)
4163
4164static const
4165CSN_DESCR_BEGIN(CCN_Measurement_Report_t)
4166 M_UINT (CCN_Measurement_Report_t, RXLEV_SERVING_CELL, 6),
4167 M_FIXED (CCN_Measurement_Report_t, 1, 0),
4168 M_UINT (CCN_Measurement_Report_t, NUMBER_OF_NC_MEASUREMENTS, 3),
4169 M_VAR_TARRAY (CCN_Measurement_Report_t, NC_Measurements, NC_Measurements_t, NUMBER_OF_NC_MEASUREMENTS),
4170CSN_DESCR_END (CCN_Measurement_Report_t)
4171
4172static const
4173CSN_DESCR_BEGIN(Target_Cell_GSM_Notif_t)
4174 M_UINT (Target_Cell_GSM_Notif_t, ARFCN, 10),
4175 M_UINT (Target_Cell_GSM_Notif_t, BSIC, 6),
4176CSN_DESCR_END (Target_Cell_GSM_Notif_t)
4177
4178static const
4179CSN_DESCR_BEGIN(FDD_Target_Cell_Notif_t)
4180 M_UINT (FDD_Target_Cell_Notif_t, FDD_ARFCN, 14),
4181 M_NEXT_EXIST (FDD_Target_Cell_Notif_t, Exist_Bandwith_FDD, 1),
4182 M_UINT (FDD_Target_Cell_Notif_t, BANDWITH_FDD, 3),
4183 M_UINT (FDD_Target_Cell_Notif_t, SCRAMBLING_CODE, 9),
4184CSN_DESCR_END (FDD_Target_Cell_Notif_t)
4185
4186static const
4187CSN_DESCR_BEGIN(TDD_Target_Cell_Notif_t)
4188 M_UINT (TDD_Target_Cell_Notif_t, TDD_ARFCN, 14),
4189 M_NEXT_EXIST (TDD_Target_Cell_Notif_t, Exist_Bandwith_TDD, 1),
4190 M_UINT (TDD_Target_Cell_Notif_t, BANDWITH_TDD, 3),
4191 M_UINT (TDD_Target_Cell_Notif_t, CELL_PARAMETER, 7),
4192 M_UINT (TDD_Target_Cell_Notif_t, Sync_Case_TSTD, 1),
4193CSN_DESCR_END (TDD_Target_Cell_Notif_t)
4194
4195static const
4196CSN_DESCR_BEGIN(Target_Cell_3G_Notif_t)
4197 M_NEXT_EXIST (Target_Cell_3G_Notif_t, Exist_FDD_Description, 1),
4198 M_TYPE (Target_Cell_3G_Notif_t, FDD_Target_Cell_Notif, FDD_Target_Cell_Notif_t),
4199 M_NEXT_EXIST (Target_Cell_3G_Notif_t, Exist_TDD_Description, 1),
4200 M_TYPE (Target_Cell_3G_Notif_t, TDD_Target_Cell, TDD_Target_Cell_Notif_t),
4201 M_UINT (Target_Cell_3G_Notif_t, REPORTING_QUANTITY, 6),
4202CSN_DESCR_END (Target_Cell_3G_Notif_t)
4203
4204static const
4205CSN_DESCR_BEGIN(Target_EUTRAN_Cell_Notif_t)
4206 M_UINT (Target_EUTRAN_Cell_Notif_t, EARFCN, 16),
4207 M_NEXT_EXIST (Target_EUTRAN_Cell_Notif_t, Exist_Measurement_Bandwidth, 1),
4208 M_UINT (Target_EUTRAN_Cell_Notif_t, Measurement_Bandwidth, 3),
4209 M_UINT (Target_EUTRAN_Cell_Notif_t, Physical_Layer_Cell_Identity, 9),
4210 M_UINT (Target_EUTRAN_Cell_Notif_t, Reporting_Quantity, 6),
4211CSN_DESCR_END (Target_EUTRAN_Cell_Notif_t)
4212
4213static const
4214CSN_DESCR_BEGIN(Eutran_Ccn_Measurement_Report_Cell_t)
4215 M_UINT (Eutran_Ccn_Measurement_Report_Cell_t, EUTRAN_FREQUENCY_INDEX, 3),
4216 M_UINT (Eutran_Ccn_Measurement_Report_Cell_t, CELL_IDENTITY, 9),
4217 M_UINT (Eutran_Ccn_Measurement_Report_Cell_t, REPORTING_QUANTITY, 6),
4218CSN_DESCR_END (Eutran_Ccn_Measurement_Report_Cell_t)
4219
4220
4221static const
4222CSN_DESCR_BEGIN(Eutran_Ccn_Measurement_Report_t)
Anders Broman8ea3cbe2020-01-28 17:36:33 +01004223 M_UINT (Eutran_Ccn_Measurement_Report_t, ThreeG_BA_USED, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004224 M_UINT_OFFSET(Eutran_Ccn_Measurement_Report_t, N_EUTRAN, 2, 1),
4225 M_VAR_TARRAY (Eutran_Ccn_Measurement_Report_t, Eutran_Ccn_Measurement_Report_Cell, Eutran_Ccn_Measurement_Report_Cell_t, N_EUTRAN),
4226CSN_DESCR_END (Eutran_Ccn_Measurement_Report_t)
4227
4228static const
4229CSN_DESCR_BEGIN(Target_Cell_4G_Notif_t)
4230 M_NEXT_EXIST (Target_Cell_4G_Notif_t, Exist_Arfcn, 2),
4231 M_UINT (Target_Cell_4G_Notif_t, Arfcn, 10),
4232 M_UINT (Target_Cell_4G_Notif_t, bsic, 6),
4233 M_NEXT_EXIST (Target_Cell_4G_Notif_t, Exist_3G_Target_Cell, 1),
4234 M_TYPE (Target_Cell_4G_Notif_t, Target_Cell_3G_Notif, Target_Cell_3G_Notif_t),
4235 M_NEXT_EXIST (Target_Cell_4G_Notif_t, Exist_Eutran_Target_Cell, 1),
4236 M_TYPE (Target_Cell_4G_Notif_t, Target_EUTRAN_Cell, Target_EUTRAN_Cell_Notif_t),
4237 M_NEXT_EXIST (Target_Cell_4G_Notif_t, Exist_Eutran_Ccn_Measurement_Report, 1),
4238 M_TYPE (Target_Cell_4G_Notif_t, Eutran_Ccn_Measurement_Report, Eutran_Ccn_Measurement_Report_t),
4239CSN_DESCR_END (Target_Cell_4G_Notif_t)
4240
4241static const
4242CSN_DESCR_BEGIN(Target_Cell_CSG_Notif_t)
4243 M_FIXED (Target_Cell_CSG_Notif_t, 1, 0x00),
4244 M_UNION (Target_Cell_CSG_Notif_t, 2),
4245 M_TYPE (Target_Cell_CSG_Notif_t, u.UTRAN_CSG_Measurement_Report, UTRAN_CSG_Measurement_Report_t),
4246 M_TYPE (Target_Cell_CSG_Notif_t, u.EUTRAN_CSG_Measurement_Report, EUTRAN_CSG_Measurement_Report_t),
4247 M_NEXT_EXIST (Target_Cell_CSG_Notif_t, Exist_Eutran_Ccn_Measurement_Report, 1),
4248 M_TYPE (Target_Cell_CSG_Notif_t, Eutran_Ccn_Measurement_Report, Eutran_Ccn_Measurement_Report_t),
4249CSN_DESCR_END (Target_Cell_CSG_Notif_t)
4250
4251static const
4252CSN_DESCR_BEGIN(Target_Other_RAT_2_Notif_t)
4253 /* 110 vs 1110 */
4254 M_UNION (Target_Other_RAT_2_Notif_t, 2),
4255 M_TYPE (Target_Other_RAT_2_Notif_t, u.Target_Cell_4G_Notif, Target_Cell_4G_Notif_t),
4256 M_TYPE (Target_Other_RAT_2_Notif_t, u.Target_Cell_CSG_Notif, Target_Cell_CSG_Notif_t),
4257CSN_DESCR_END (Target_Other_RAT_2_Notif_t)
4258
4259static const
4260CSN_DESCR_BEGIN(Target_Other_RAT_Notif_t)
4261 /* 10 vs 110 */
4262 M_UNION (Target_Other_RAT_Notif_t, 2),
4263 M_TYPE (Target_Other_RAT_Notif_t, u.Target_Cell_3G_Notif, Target_Cell_3G_Notif_t),
4264 M_TYPE (Target_Other_RAT_Notif_t, u.Target_Other_RAT_2_Notif, Target_Other_RAT_2_Notif_t),
4265CSN_DESCR_END (Target_Other_RAT_Notif_t)
4266
4267static const
4268CSN_DESCR_BEGIN(Target_Cell_t)
4269 /* 0 vs 10 */
4270 M_UNION (Target_Cell_t, 2),
4271 M_TYPE (Target_Cell_t, u.Target_Cell_GSM_Notif, Target_Cell_GSM_Notif_t),
4272 M_TYPE (Target_Cell_t, u.Target_Other_RAT_Notif, Target_Other_RAT_Notif_t),
4273CSN_DESCR_END (Target_Cell_t)
4274
4275static const
4276CSN_DESCR_BEGIN (PCCN_AdditionsR6_t)
4277 M_NEXT_EXIST (PCCN_AdditionsR6_t, Exist_BA_USED_3G, 1),
4278 M_UINT (PCCN_AdditionsR6_t, BA_USED_3G, 1),
4279
4280 M_UINT_OFFSET (PCCN_AdditionsR6_t, N_3G, 3, 1), /* offset 1 */
4281 M_VAR_TARRAY_OFFSET (PCCN_AdditionsR6_t, Measurements_3G, Measurements_3G_t, N_3G),
4282CSN_DESCR_END (PCCN_AdditionsR6_t)
4283
4284/*< Packet Cell Change Notification message contents > */
4285static const
4286CSN_DESCR_BEGIN(Packet_Cell_Change_Notification_t)
4287 /* Mac header */
4288 M_UINT (Packet_Cell_Change_Notification_t, PayloadType, 2),
4289 M_UINT (Packet_Cell_Change_Notification_t, spare, 5),
4290 M_UINT (Packet_Cell_Change_Notification_t, R, 1),
4291 M_UINT (Packet_Cell_Change_Notification_t, MESSAGE_TYPE, 6),
4292 /* Mac header */
4293
4294 M_TYPE (Packet_Cell_Change_Notification_t, Global_TFI, Global_TFI_t),
4295 M_TYPE (Packet_Cell_Change_Notification_t, Target_Cell, Target_Cell_t),
4296
4297 M_UNION (Packet_Cell_Change_Notification_t, 2),
4298 M_UINT (Packet_Cell_Change_Notification_t, u.BA_IND, 1),
4299 M_UINT (Packet_Cell_Change_Notification_t, u.PSI3_CHANGE_MARK, 2),
4300
4301 M_UINT (Packet_Cell_Change_Notification_t, PMO_USED, 1),
4302 M_UINT (Packet_Cell_Change_Notification_t, PCCN_SENDING, 1),
4303 M_TYPE (Packet_Cell_Change_Notification_t, CCN_Measurement_Report, CCN_Measurement_Report_t),
4304
4305 M_NEXT_EXIST_OR_NULL(Packet_Cell_Change_Notification_t, Exist_AdditionsR6, 1),
4306 M_TYPE (Packet_Cell_Change_Notification_t, AdditionsR6, PCCN_AdditionsR6_t),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04004307
4308 M_PADDING_BITS(Packet_Cell_Change_Notification_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004309CSN_DESCR_END (Packet_Cell_Change_Notification_t)
4310
4311/*< Packet Cell Change Continue message contents > */
4312static const
4313CSN_DESCR_BEGIN(Packet_Cell_Change_Continue_t)
4314 M_UINT (Packet_Cell_Change_Continue_t, MESSAGE_TYPE, 6),
4315 M_UINT (Packet_Cell_Change_Continue_t, PAGE_MODE, 2),
4316 M_FIXED (Packet_Cell_Change_Continue_t, 1, 0x00),
4317 M_TYPE (Packet_Cell_Change_Continue_t, Global_TFI, Global_TFI_t),
4318
4319 M_NEXT_EXIST (Packet_Cell_Change_Continue_t, Exist_ID, 3),
4320 M_UINT (Packet_Cell_Change_Continue_t, ARFCN, 10),
4321 M_UINT (Packet_Cell_Change_Continue_t, BSIC, 6),
4322 M_UINT (Packet_Cell_Change_Continue_t, CONTAINER_ID, 2),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04004323
4324 M_PADDING_BITS(Packet_Cell_Change_Continue_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004325CSN_DESCR_END (Packet_Cell_Change_Continue_t)
4326
4327/*< Packet Neighbour Cell Data message contents > */
4328static const
4329CSN_DESCR_BEGIN(PNCD_Container_With_ID_t)
4330 M_UINT (PNCD_Container_With_ID_t, ARFCN, 10),
4331 M_UINT (PNCD_Container_With_ID_t, BSIC, 6),
4332 M_UINT_ARRAY (PNCD_Container_With_ID_t, CONTAINER, 8, 17),/* 8*17 bits */
4333CSN_DESCR_END (PNCD_Container_With_ID_t)
4334
4335static const
4336CSN_DESCR_BEGIN(PNCD_Container_Without_ID_t)
4337 M_UINT_ARRAY (PNCD_Container_Without_ID_t, CONTAINER, 8, 19),/* 8*19 bits */
4338CSN_DESCR_END (PNCD_Container_Without_ID_t)
4339
4340static const
4341CSN_ChoiceElement_t PNCDContainer[] =
4342{
Pau Espin Pedrol7cce8252020-01-24 16:41:14 +01004343 {1, 0x0, 0, M_TYPE(PNCDContainer_t, u.PNCD_Container_Without_ID, PNCD_Container_Without_ID_t)},
4344 {1, 0x1, 0, M_TYPE(PNCDContainer_t, u.PNCD_Container_With_ID, PNCD_Container_With_ID_t)},
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004345};
4346
4347static const
4348CSN_DESCR_BEGIN(PNCDContainer_t)
4349 M_CHOICE (PNCDContainer_t, UnionType, PNCDContainer, ElementsOf(PNCDContainer)),
4350CSN_DESCR_END (PNCDContainer_t)
4351
4352static const
4353CSN_DESCR_BEGIN(Packet_Neighbour_Cell_Data_t)
4354 M_UINT (Packet_Neighbour_Cell_Data_t, MESSAGE_TYPE, 6),
4355 M_UINT (Packet_Neighbour_Cell_Data_t, PAGE_MODE, 2),
4356 M_FIXED (Packet_Neighbour_Cell_Data_t, 1, 0x00),
4357 M_TYPE (Packet_Neighbour_Cell_Data_t, Global_TFI, Global_TFI_t),
4358
4359 M_UINT (Packet_Neighbour_Cell_Data_t, CONTAINER_ID, 2),
4360 M_UINT (Packet_Neighbour_Cell_Data_t, spare, 1),
4361 M_UINT (Packet_Neighbour_Cell_Data_t, CONTAINER_INDEX, 5),
4362
4363 M_TYPE (Packet_Neighbour_Cell_Data_t, Container, PNCDContainer_t),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04004364 M_PADDING_BITS(Packet_Neighbour_Cell_Data_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004365CSN_DESCR_END (Packet_Neighbour_Cell_Data_t)
4366
4367/*< Packet Serving Cell Data message contents > */
4368static const
4369CSN_DESCR_BEGIN(Packet_Serving_Cell_Data_t)
4370 M_UINT (Packet_Serving_Cell_Data_t, MESSAGE_TYPE, 6),
4371 M_UINT (Packet_Serving_Cell_Data_t, PAGE_MODE, 2),
4372 M_FIXED (Packet_Serving_Cell_Data_t, 1, 0x00),
4373 M_TYPE (Packet_Serving_Cell_Data_t, Global_TFI, Global_TFI_t),
4374
4375 M_UINT (Packet_Serving_Cell_Data_t, spare, 4),
4376 M_UINT (Packet_Serving_Cell_Data_t, CONTAINER_INDEX, 5),
4377 M_UINT_ARRAY (Packet_Serving_Cell_Data_t, CONTAINER, 8, 19),/* 8*19 bits */
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04004378 M_PADDING_BITS(Packet_Serving_Cell_Data_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004379CSN_DESCR_END (Packet_Serving_Cell_Data_t)
4380
4381
4382/* Enhanced Measurement Report */
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01004383#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004384static const
4385CSN_DESCR_BEGIN (ServingCellData_t)
4386 M_UINT (ServingCellData_t, RXLEV_SERVING_CELL, 6),
4387 M_FIXED (ServingCellData_t, 1, 0),
4388CSN_DESCR_END (ServingCellData_t)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01004389#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004390
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01004391#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004392static const
4393CSN_DESCR_BEGIN (Repeated_Invalid_BSIC_Info_t)
4394 M_UINT (Repeated_Invalid_BSIC_Info_t, BCCH_FREQ_NCELL, 5),
4395 M_UINT (Repeated_Invalid_BSIC_Info_t, BSIC, 6),
4396 M_UINT (Repeated_Invalid_BSIC_Info_t, RXLEV_NCELL, 5),
4397CSN_DESCR_END (Repeated_Invalid_BSIC_Info_t)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01004398#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004399
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01004400#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004401static const
4402CSN_DESCR_BEGIN (REPORTING_QUANTITY_t)
4403 M_NEXT_EXIST (REPORTING_QUANTITY_t, Exist_REPORTING_QUANTITY, 1),
4404 M_UINT (REPORTING_QUANTITY_t, REPORTING_QUANTITY, 6),
4405CSN_DESCR_END (REPORTING_QUANTITY_t)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01004406#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004407
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01004408#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004409static const
4410CSN_DESCR_BEGIN (NC_MeasurementReport_t)
Anders Broman8ea3cbe2020-01-28 17:36:33 +01004411 M_UINT (NC_MeasurementReport_t, NC_MODE, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004412 M_UNION (NC_MeasurementReport_t, 2),
4413 M_TYPE (NC_MeasurementReport_t, u.BA_USED, BA_USED_t),
Anders Broman8ea3cbe2020-01-28 17:36:33 +01004414 M_UINT (NC_MeasurementReport_t, u.PSI3_CHANGE_MARK, 2),
4415 M_UINT (NC_MeasurementReport_t, PMO_USED, 1),
4416 M_UINT (NC_MeasurementReport_t, SCALE, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004417
4418 M_NEXT_EXIST (NC_MeasurementReport_t, Exist_ServingCellData, 1),
4419 M_TYPE (NC_MeasurementReport_t, ServingCellData, ServingCellData_t),
4420
4421 M_REC_TARRAY (NC_MeasurementReport_t, Repeated_Invalid_BSIC_Info, Repeated_Invalid_BSIC_Info_t, Count_Repeated_Invalid_BSIC_Info),
4422
4423 M_NEXT_EXIST (NC_MeasurementReport_t, Exist_Repeated_REPORTING_QUANTITY, 1),
4424 M_VAR_TARRAY (NC_MeasurementReport_t, Repeated_REPORTING_QUANTITY, REPORTING_QUANTITY_t, Count_Repeated_Reporting_Quantity),
4425CSN_DESCR_END (NC_MeasurementReport_t)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01004426#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004427
4428
4429/*< Packet Handover Command message content > */
4430static const
4431CSN_DESCR_BEGIN (GlobalTimeslotDescription_t)
4432 M_UNION (GlobalTimeslotDescription_t, 2),
4433 M_UINT (GlobalTimeslotDescription_t, u.MS_TimeslotAllocation, 8),
4434 M_TYPE (GlobalTimeslotDescription_t, u.Power_Control_Parameters, Power_Control_Parameters_t),
4435CSN_DESCR_END (GlobalTimeslotDescription_t)
4436
4437static const
4438CSN_DESCR_BEGIN (PHO_DownlinkAssignment_t)
4439 M_UINT (PHO_DownlinkAssignment_t, TimeslotAllocation, 8),
4440 M_UINT (PHO_DownlinkAssignment_t, PFI, 7),
Anders Broman8ea3cbe2020-01-28 17:36:33 +01004441 M_UINT (PHO_DownlinkAssignment_t, RLC_Mode, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004442 M_UINT (PHO_DownlinkAssignment_t, TFI_Assignment, 5),
Anders Broman8ea3cbe2020-01-28 17:36:33 +01004443 M_UINT (PHO_DownlinkAssignment_t, ControlACK, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004444
4445 M_NEXT_EXIST (PHO_DownlinkAssignment_t, Exist_EGPRS_WindowSize, 1),
4446 M_UINT (PHO_DownlinkAssignment_t, EGPRS_WindowSize, 5),
4447CSN_DESCR_END (PHO_DownlinkAssignment_t)
4448
4449static const
4450CSN_DESCR_BEGIN (PHO_USF_1_7_t)
4451 M_NEXT_EXIST (PHO_USF_1_7_t, Exist_USF, 1),
4452 M_UINT (PHO_USF_1_7_t, USF, 3),
4453CSN_DESCR_END (PHO_USF_1_7_t)
4454
4455static const
4456CSN_DESCR_BEGIN (USF_AllocationArray_t)
4457 M_UINT (USF_AllocationArray_t, USF_0, 3),
4458 M_VAR_TARRAY_OFFSET (USF_AllocationArray_t, USF_1_7, PHO_USF_1_7_t, NBR_OfAllocatedTimeslots),
4459CSN_DESCR_END (USF_AllocationArray_t)
4460
4461static const
4462CSN_DESCR_BEGIN (PHO_UplinkAssignment_t)
4463 M_UINT (PHO_UplinkAssignment_t, PFI, 7),
Anders Broman8ea3cbe2020-01-28 17:36:33 +01004464 M_UINT (PHO_UplinkAssignment_t, RLC_Mode, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004465 M_UINT (PHO_UplinkAssignment_t, TFI_Assignment, 5),
4466
4467 M_NEXT_EXIST (PHO_UplinkAssignment_t, Exist_ChannelCodingCommand, 1),
4468 M_UINT (PHO_UplinkAssignment_t, ChannelCodingCommand, 2),
4469
4470 M_NEXT_EXIST (PHO_UplinkAssignment_t, Exist_EGPRS_ChannelCodingCommand, 1),
4471 M_UINT (PHO_UplinkAssignment_t, EGPRS_ChannelCodingCommand, 4),
4472
4473 M_NEXT_EXIST (PHO_UplinkAssignment_t, Exist_EGPRS_WindowSize, 1),
4474 M_UINT (PHO_UplinkAssignment_t, EGPRS_WindowSize, 5),
4475
Anders Broman8ea3cbe2020-01-28 17:36:33 +01004476 M_UINT (PHO_UplinkAssignment_t, USF_Granularity, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004477
4478 M_NEXT_EXIST (PHO_UplinkAssignment_t, Exist_TBF_TimeslotAllocation, 1),
4479 M_LEFT_VAR_BMP (PHO_UplinkAssignment_t, TBF_TimeslotAllocation, u.USF_AllocationArray.NBR_OfAllocatedTimeslots, 0),
4480
4481 M_UNION (PHO_UplinkAssignment_t, 2),
4482 M_UINT (PHO_UplinkAssignment_t, u.USF_SingleAllocation, 3),
4483 M_TYPE (PHO_UplinkAssignment_t, u.USF_AllocationArray, USF_AllocationArray_t),
4484CSN_DESCR_END (PHO_UplinkAssignment_t)
4485
4486static const
4487CSN_DESCR_BEGIN (GlobalTimeslotDescription_UA_t)
4488 M_TYPE (GlobalTimeslotDescription_UA_t, GlobalTimeslotDescription, GlobalTimeslotDescription_t),
Pascal Quantin46374692020-01-28 18:03:22 +01004489 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 +03004490
4491 M_TYPE (GlobalTimeslotDescription_UA_t, PHO_UA, PHO_UplinkAssignment_t),
4492 M_FIXED (GlobalTimeslotDescription_UA_t, 1, 0x0), /* Escape recursive */
4493CSN_DESCR_END (GlobalTimeslotDescription_UA_t)
4494
4495static const
4496CSN_DESCR_BEGIN (PHO_GPRS_t)
4497 M_NEXT_EXIST (PHO_GPRS_t, Exist_ChannelCodingCommand, 1),
4498 M_UINT (PHO_GPRS_t, ChannelCodingCommand, 2),
4499
4500 M_NEXT_EXIST (PHO_GPRS_t, Exist_GlobalTimeslotDescription_UA, 1),
4501 M_TYPE (PHO_GPRS_t, GTD_UA, GlobalTimeslotDescription_UA_t),
4502
4503 M_NEXT_EXIST (PHO_GPRS_t, Exist_DownlinkAssignment, 2), /* Don't use M_REC_TARRAY as we don't support multiple TBFs */
4504 M_TYPE (PHO_GPRS_t, DownlinkAssignment, PHO_DownlinkAssignment_t),
4505 M_FIXED (PHO_GPRS_t, 1, 0x0), /* Escape recursive */
4506CSN_DESCR_END (PHO_GPRS_t)
4507
4508static const
4509CSN_DESCR_BEGIN (EGPRS_Description_t)
4510 M_NEXT_EXIST (EGPRS_Description_t, Exist_EGPRS_WindowSize, 1),
4511 M_UINT (EGPRS_Description_t, EGPRS_WindowSize, 5),
4512
4513 M_UINT (EGPRS_Description_t, LinkQualityMeasurementMode, 2),
4514 M_NEXT_EXIST (EGPRS_Description_t, Exist_BEP_Period2, 1),
4515 M_UINT (EGPRS_Description_t, BEP_Period2, 4),
4516CSN_DESCR_END (EGPRS_Description_t)
4517
4518static const
4519CSN_DESCR_BEGIN (DownlinkTBF_t)
4520 M_NEXT_EXIST (DownlinkTBF_t, Exist_EGPRS_Description, 1),
4521 M_TYPE (DownlinkTBF_t, EGPRS_Description, EGPRS_Description_t),
4522
4523 M_NEXT_EXIST (DownlinkTBF_t, Exist_DownlinkAssignment, 2), /* Don't use M_REC_TARRAY as we don't support multiple TBFs */
4524 M_TYPE (DownlinkTBF_t, DownlinkAssignment, PHO_DownlinkAssignment_t),
4525 M_FIXED (DownlinkTBF_t, 1, 0x0), /* Escape recursive */
4526CSN_DESCR_END (DownlinkTBF_t)
4527
4528static const
4529CSN_DESCR_BEGIN (PHO_EGPRS_t)
4530 M_NEXT_EXIST (PHO_EGPRS_t, Exist_EGPRS_WindowSize, 1),
4531 M_UINT (PHO_EGPRS_t, EGPRS_WindowSize, 5),
4532
4533 M_NEXT_EXIST (PHO_EGPRS_t, Exist_EGPRS_ChannelCodingCommand, 1),
4534 M_UINT (PHO_EGPRS_t, EGPRS_ChannelCodingCommand, 4),
4535
4536 M_NEXT_EXIST (PHO_EGPRS_t, Exist_BEP_Period2, 1),
4537 M_UINT (PHO_EGPRS_t, BEP_Period2, 4),
4538
4539 M_NEXT_EXIST (PHO_EGPRS_t, Exist_GlobalTimeslotDescription_UA, 1),
4540 M_TYPE (PHO_EGPRS_t, GTD_UA, GlobalTimeslotDescription_UA_t),
4541
Pascal Quantin46374692020-01-28 18:03:22 +01004542 M_NEXT_EXIST (PHO_EGPRS_t, Exist_DownlinkTBF, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004543 M_TYPE (PHO_EGPRS_t, DownlinkTBF, DownlinkTBF_t),
4544CSN_DESCR_END (PHO_EGPRS_t)
4545
4546static const
4547CSN_DESCR_BEGIN(PHO_TimingAdvance_t)
Vadim Yanitskiy48587d52020-08-22 02:08:25 +07004548 M_TYPE (PHO_TimingAdvance_t, GlobalPacket_Timing_Advance, Global_Packet_Timing_Advance_t),
4549 M_NEXT_EXIST (PHO_TimingAdvance_t, Exist_Packet_Extended_Timing_Advance, 1),
4550 M_UINT (PHO_TimingAdvance_t, Packet_Extended_Timing_Advance, 2),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004551CSN_DESCR_END (PHO_TimingAdvance_t)
4552
4553static const
Vincent Helfree525bf92020-01-28 18:14:30 +01004554CSN_DESCR_BEGIN(NAS_Container_For_PS_HO_t)
4555 M_UINT (NAS_Container_For_PS_HO_t, NAS_ContainerLength, 7),
4556 M_UINT (NAS_Container_For_PS_HO_t, Spare_1a, 1),
4557 M_UINT (NAS_Container_For_PS_HO_t, Spare_1b, 1),
4558 M_UINT (NAS_Container_For_PS_HO_t, Spare_1c, 1),
4559 M_UINT (NAS_Container_For_PS_HO_t, Old_XID, 1),
4560 M_UINT (NAS_Container_For_PS_HO_t, Spare_1e, 1),
4561 M_UINT (NAS_Container_For_PS_HO_t, Type_of_Ciphering_Algo, 3),
4562 M_UINT (NAS_Container_For_PS_HO_t, IOV_UI_value, 32),
4563CSN_DESCR_END (NAS_Container_For_PS_HO_t)
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004564
4565static const
4566CSN_DESCR_BEGIN(PS_HandoverTo_UTRAN_Payload_t)
4567 M_UINT (PS_HandoverTo_UTRAN_Payload_t, RRC_ContainerLength, 8),
4568 M_VAR_ARRAY (PS_HandoverTo_UTRAN_Payload_t, RRC_Container, RRC_ContainerLength, 0),
4569CSN_DESCR_END (PS_HandoverTo_UTRAN_Payload_t)
4570
4571
4572static const
Pau Espin Pedrol99eb3532020-03-26 18:50:00 +01004573CSN_DESCR_BEGIN(PS_HandoverTo_E_UTRAN_Payload_t)
4574 M_UINT (PS_HandoverTo_E_UTRAN_Payload_t, RRC_ContainerLength, 8),
4575 M_VAR_ARRAY (PS_HandoverTo_E_UTRAN_Payload_t, RRC_Container, RRC_ContainerLength, 0),
4576CSN_DESCR_END (PS_HandoverTo_E_UTRAN_Payload_t)
4577
4578static const
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004579CSN_DESCR_BEGIN(PHO_RadioResources_t)
4580 M_NEXT_EXIST (PHO_RadioResources_t, Exist_HandoverReference, 1),
4581 M_UINT (PHO_RadioResources_t, HandoverReference, 8),
4582
4583 M_UINT (PHO_RadioResources_t, ARFCN, 10),
4584 M_UINT (PHO_RadioResources_t, SI, 2),
Anders Broman8ea3cbe2020-01-28 17:36:33 +01004585 M_UINT (PHO_RadioResources_t, NCI, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004586 M_UINT (PHO_RadioResources_t, BSIC, 6),
4587 M_NEXT_EXIST (PHO_RadioResources_t, Exist_CCN_Active, 1),
Anders Broman8ea3cbe2020-01-28 17:36:33 +01004588 M_UINT (PHO_RadioResources_t, CCN_Active, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004589
4590 M_NEXT_EXIST (PHO_RadioResources_t, Exist_CCN_Active_3G, 1),
Anders Broman8ea3cbe2020-01-28 17:36:33 +01004591 M_UINT (PHO_RadioResources_t, CCN_Active_3G, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004592
4593 M_NEXT_EXIST (PHO_RadioResources_t, Exist_CCN_Support_Description, 1),
4594 M_TYPE (PHO_RadioResources_t, CCN_Support_Description, CCN_Support_Description_t),
4595
4596 M_TYPE (PHO_RadioResources_t, Frequency_Parameters, Frequency_Parameters_t),
4597 M_UINT (PHO_RadioResources_t, NetworkControlOrder, 2),
4598 M_NEXT_EXIST (PHO_RadioResources_t, Exist_PHO_TimingAdvance, 1),
4599 M_TYPE (PHO_RadioResources_t, PHO_TimingAdvance, PHO_TimingAdvance_t),
4600
Anders Broman8ea3cbe2020-01-28 17:36:33 +01004601 M_UINT (PHO_RadioResources_t, Extended_Dynamic_Allocation, 1),
4602 M_UINT (PHO_RadioResources_t, RLC_Reset, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004603 M_NEXT_EXIST (PHO_RadioResources_t, Exist_PO_PR, 2),
4604 M_UINT (PHO_RadioResources_t, PO, 4),
Anders Broman8ea3cbe2020-01-28 17:36:33 +01004605 M_UINT (PHO_RadioResources_t, PR_Mode, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004606
4607
4608 M_NEXT_EXIST (PHO_RadioResources_t, Exist_UplinkControlTimeslot, 1),
4609 M_UINT (PHO_RadioResources_t, UplinkControlTimeslot, 3),
4610
4611 M_UNION (PHO_RadioResources_t, 2),
4612 M_TYPE (PHO_RadioResources_t, u.PHO_GPRS_Mode, PHO_GPRS_t),
4613 M_TYPE (PHO_RadioResources_t, u.PHO_EGPRS_Mode, PHO_EGPRS_t),
4614CSN_DESCR_END (PHO_RadioResources_t)
4615
4616static const
4617CSN_DESCR_BEGIN(PS_HandoverTo_A_GB_ModePayload_t)
4618 M_FIXED (PS_HandoverTo_A_GB_ModePayload_t, 2, 0x00), /* For future extension to enum. */
4619 M_TYPE (PS_HandoverTo_A_GB_ModePayload_t, PHO_RadioResources, PHO_RadioResources_t),
4620
4621 M_NEXT_EXIST (PS_HandoverTo_A_GB_ModePayload_t, Exist_NAS_Container, 1),
Vincent Helfree525bf92020-01-28 18:14:30 +01004622 M_TYPE (PS_HandoverTo_A_GB_ModePayload_t, NAS_Container, NAS_Container_For_PS_HO_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004623CSN_DESCR_END (PS_HandoverTo_A_GB_ModePayload_t)
4624
4625static const
4626CSN_DESCR_BEGIN(Packet_Handover_Command_t)
4627 M_UINT (Packet_Handover_Command_t, MessageType, 6),
4628 M_UINT (Packet_Handover_Command_t, PageMode, 2),
4629
4630 M_FIXED (Packet_Handover_Command_t, 1, 0x00), /* 0 fixed */
4631 M_TYPE (Packet_Handover_Command_t, Global_TFI, Global_TFI_t),
4632
4633 M_UINT (Packet_Handover_Command_t, ContainerID, 2),
4634
4635 M_UNION (Packet_Handover_Command_t, 4),
4636 M_TYPE (Packet_Handover_Command_t, u.PS_HandoverTo_A_GB_ModePayload, PS_HandoverTo_A_GB_ModePayload_t),
4637 M_TYPE (Packet_Handover_Command_t, u.PS_HandoverTo_UTRAN_Payload, PS_HandoverTo_UTRAN_Payload_t),
Pau Espin Pedrol99eb3532020-03-26 18:50:00 +01004638 M_TYPE (Packet_Handover_Command_t, u.PS_HandoverTo_E_UTRAN_Payload, PS_HandoverTo_E_UTRAN_Payload_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004639 CSN_ERROR (Packet_Handover_Command_t, "11 <extension> not implemented", CSN_ERROR_STREAM_NOT_SUPPORTED),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04004640
4641 M_PADDING_BITS(Packet_Handover_Command_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004642CSN_DESCR_END (Packet_Handover_Command_t)
4643
4644/*< End Packet Handover Command >*/
4645
4646/*< Packet Physical Information message content > */
4647
4648static const
4649CSN_DESCR_BEGIN(Packet_PhysicalInformation_t)
4650 M_UINT (Packet_PhysicalInformation_t, MessageType, 6),
4651 M_UINT (Packet_PhysicalInformation_t, PageMode, 2),
4652
4653 M_TYPE (Packet_PhysicalInformation_t, Global_TFI, Global_TFI_t),
4654
4655 M_UINT (Packet_PhysicalInformation_t, TimingAdvance, 8),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04004656 M_PADDING_BITS(Packet_PhysicalInformation_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004657CSN_DESCR_END (Packet_PhysicalInformation_t)
4658
4659/*< End Packet Physical Information > */
4660
4661
4662/*< ADDITIONAL MS RADIO ACCESS CAPABILITIES content > */
4663static const
4664CSN_ChoiceElement_t AdditionalMsRadAccessCapID[] =
4665{
Pau Espin Pedrol7cce8252020-01-24 16:41:14 +01004666 {1, 0, 0, M_TYPE(AdditionalMsRadAccessCapID_t, u.Global_TFI, Global_TFI_t)},
4667 {1, 0x01, 0, M_UINT(AdditionalMsRadAccessCapID_t, u.TLLI, 32)},
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004668};
4669
4670static const
4671CSN_DESCR_BEGIN(AdditionalMsRadAccessCapID_t)
4672 M_CHOICE (AdditionalMsRadAccessCapID_t, UnionType, AdditionalMsRadAccessCapID, ElementsOf(AdditionalMsRadAccessCapID)),
4673CSN_DESCR_END (AdditionalMsRadAccessCapID_t)
4674
4675
4676static const
4677CSN_DESCR_BEGIN (Additional_MS_Rad_Access_Cap_t)
4678 /* Mac header */
4679 M_UINT (Additional_MS_Rad_Access_Cap_t, PayloadType, 2),
4680 M_UINT (Additional_MS_Rad_Access_Cap_t, spare, 5),
4681 M_UINT (Additional_MS_Rad_Access_Cap_t, R, 1),
4682 M_UINT (Additional_MS_Rad_Access_Cap_t, MESSAGE_TYPE, 6),
4683 /* Mac header */
4684
4685 M_TYPE (Additional_MS_Rad_Access_Cap_t, ID, AdditionalMsRadAccessCapID_t),
Pau Espin Pedrolde635482020-03-25 20:26:02 +01004686 M_TYPE (Additional_MS_Rad_Access_Cap_t, MS_Radio_Access_capability2, MS_Radio_Access_capability2_t),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04004687 M_PADDING_BITS (Additional_MS_Rad_Access_Cap_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004688CSN_DESCR_END (Additional_MS_Rad_Access_Cap_t)
4689
4690
4691/*< End ADDITIONAL MS RADIO ACCESS CAPABILITIES > */
4692
4693
4694/*< Packet Pause content > */
4695
4696static const
4697CSN_DESCR_BEGIN (Packet_Pause_t)
4698 M_UINT (Packet_Pause_t, MESSAGE_TYPE, 2),
4699 M_UINT (Packet_Pause_t, TLLI, 32),
4700 M_BITMAP (Packet_Pause_t, RAI, 48),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04004701 M_PADDING_BITS (Packet_Pause_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004702CSN_DESCR_END (Packet_Pause_t)
4703
4704
4705/*< End Packet Pause > */
4706
4707
4708/*< Packet System Information Type 1 message content >*/
Pascal Quantin29248d62020-01-28 17:13:17 +01004709CSN_DESCR_BEGIN(PSI1_AdditionsR6_t)
4710 M_UINT (PSI1_AdditionsR6_t, LB_MS_TXPWR_MAX_CCH, 5),
4711CSN_DESCR_END (PSI1_AdditionsR6_t)
4712
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004713static const
Pascal Quantin29248d62020-01-28 17:13:17 +01004714CSN_DESCR_BEGIN (PSI1_AdditionsR99_t)
4715 M_UINT (PSI1_AdditionsR99_t, MSCR, 1),
4716 M_UINT (PSI1_AdditionsR99_t, SGSNR, 1),
4717 M_UINT (PSI1_AdditionsR99_t, BandIndicator, 1),
4718 M_NEXT_EXIST_OR_NULL (PSI1_AdditionsR99_t, Exist_AdditionsR6, 1),
4719 M_TYPE (PSI1_AdditionsR99_t, AdditionsR6, PSI1_AdditionsR6_t),
4720CSN_DESCR_END (PSI1_AdditionsR99_t)
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004721
4722static const
4723CSN_DESCR_BEGIN(PCCCH_Organization_t)
4724 M_UINT (PCCCH_Organization_t, BS_PCC_REL, 1),
4725 M_UINT (PCCCH_Organization_t, BS_PBCCH_BLKS, 2),
4726 M_UINT (PCCCH_Organization_t, BS_PAG_BLKS_RES, 4),
4727 M_UINT (PCCCH_Organization_t, BS_PRACH_BLKS, 4),
4728CSN_DESCR_END (PCCCH_Organization_t)
4729
4730
4731static const
4732CSN_DESCR_BEGIN(PSI1_t)
Pascal Quantin29248d62020-01-28 17:13:17 +01004733 M_UINT (PSI1_t, MESSAGE_TYPE, 6),
4734 M_UINT (PSI1_t, PAGE_MODE, 2),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004735
Pascal Quantin29248d62020-01-28 17:13:17 +01004736 M_UINT (PSI1_t, PBCCH_CHANGE_MARK, 3),
4737 M_UINT (PSI1_t, PSI_CHANGE_FIELD, 4),
4738 M_UINT (PSI1_t, PSI1_REPEAT_PERIOD, 4),
4739 M_UINT (PSI1_t, PSI_COUNT_LR, 6),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004740
Pascal Quantin29248d62020-01-28 17:13:17 +01004741 M_NEXT_EXIST (PSI1_t, Exist_PSI_COUNT_HR, 1),
4742 M_UINT (PSI1_t, PSI_COUNT_HR, 4),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004743
Pascal Quantin29248d62020-01-28 17:13:17 +01004744 M_UINT (PSI1_t, MEASUREMENT_ORDER, 1),
4745 M_TYPE (PSI1_t, GPRS_Cell_Options, GPRS_Cell_Options_t),
4746 M_TYPE (PSI1_t, PRACH_Control, PRACH_Control_t),
4747 M_TYPE (PSI1_t, PCCCH_Organization, PCCCH_Organization_t),
4748 M_TYPE (PSI1_t, Global_Power_Control_Parameters, Global_Power_Control_Parameters_t),
4749 M_UINT (PSI1_t, PSI_STATUS_IND, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004750
Pascal Quantin29248d62020-01-28 17:13:17 +01004751 M_NEXT_EXIST_OR_NULL (PSI1_t, Exist_AdditionsR99, 1),
4752 M_TYPE (PSI1_t, AdditionsR99, PSI1_AdditionsR99_t),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04004753
4754 M_PADDING_BITS(PSI1_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004755CSN_DESCR_END (PSI1_t)
4756/*< End Packet System Information Type 1 message content >*/
4757
4758
4759/*< Packet System Information Type 2 message content >*/
4760
4761static const
4762CSN_DESCR_BEGIN(LAI_t)
4763 M_TYPE (LAI_t, PLMN, PLMN_t),
4764 M_UINT (LAI_t, LAC, 16),
4765CSN_DESCR_END (LAI_t)
4766
4767static const
4768CSN_DESCR_BEGIN(Cell_Identification_t)
4769 M_TYPE (Cell_Identification_t, LAI, LAI_t),
4770 M_UINT (Cell_Identification_t, RAC, 8),
4771 M_UINT (Cell_Identification_t, Cell_Identity, 16),
4772CSN_DESCR_END (Cell_Identification_t)
4773
4774static const
4775CSN_DESCR_BEGIN(Non_GPRS_Cell_Options_t)
Anders Broman8ea3cbe2020-01-28 17:36:33 +01004776 M_UINT (Non_GPRS_Cell_Options_t, ATT, 1),
Pau Espin Pedrol034e32f2020-01-28 17:14:26 +01004777
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004778 M_NEXT_EXIST (Non_GPRS_Cell_Options_t, Exist_T3212, 1),
4779 M_UINT (Non_GPRS_Cell_Options_t, T3212, 8),
Pau Espin Pedrol034e32f2020-01-28 17:14:26 +01004780
Anders Broman8ea3cbe2020-01-28 17:36:33 +01004781 M_UINT (Non_GPRS_Cell_Options_t, NECI, 1),
4782 M_UINT (Non_GPRS_Cell_Options_t, PWRC, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004783 M_UINT (Non_GPRS_Cell_Options_t, DTX, 2),
4784 M_UINT (Non_GPRS_Cell_Options_t, RADIO_LINK_TIMEOUT, 4),
4785 M_UINT (Non_GPRS_Cell_Options_t, BS_AG_BLKS_RES, 3),
4786 M_UINT (Non_GPRS_Cell_Options_t, CCCH_CONF, 3),
4787 M_UINT (Non_GPRS_Cell_Options_t, BS_PA_MFRMS, 3),
4788 M_UINT (Non_GPRS_Cell_Options_t, MAX_RETRANS, 2),
4789 M_UINT (Non_GPRS_Cell_Options_t, TX_INTEGER, 4),
Anders Broman8ea3cbe2020-01-28 17:36:33 +01004790 M_UINT (Non_GPRS_Cell_Options_t, EC, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004791 M_UINT (Non_GPRS_Cell_Options_t, MS_TXPWR_MAX_CCCH, 5),
4792
4793 M_NEXT_EXIST (Non_GPRS_Cell_Options_t, Exist_Extension_Bits, 1),
4794 M_TYPE (Non_GPRS_Cell_Options_t, Extension_Bits, Extension_Bits_t),
4795CSN_DESCR_END (Non_GPRS_Cell_Options_t)
4796
4797static const
4798CSN_DESCR_BEGIN(Reference_Frequency_t)
4799 M_UINT(Reference_Frequency_t, NUMBER, 4),
4800 M_UINT_OFFSET(Reference_Frequency_t, Length, 4, 3),
4801 M_VAR_ARRAY (Reference_Frequency_t, Contents[0], Length, 0),
4802CSN_DESCR_END (Reference_Frequency_t)
4803
4804static const
4805CSN_DESCR_BEGIN(PSI2_MA_t)
4806 M_UINT(PSI2_MA_t, NUMBER, 4),
4807 M_TYPE(PSI2_MA_t, Mobile_Allocation, GPRS_Mobile_Allocation_t),
4808CSN_DESCR_END (PSI2_MA_t)
4809
4810static const
4811CSN_DESCR_BEGIN(Non_Hopping_PCCCH_Carriers_t)
4812 M_UINT(Non_Hopping_PCCCH_Carriers_t, ARFCN, 10),
4813 M_UINT(Non_Hopping_PCCCH_Carriers_t, TIMESLOT_ALLOCATION, 8),
4814CSN_DESCR_END (Non_Hopping_PCCCH_Carriers_t)
4815
4816static const
4817CSN_DESCR_BEGIN(NonHoppingPCCCH_t)
Pau Espin Pedrol81b40cb2020-03-23 15:23:51 +01004818 M_REC_TARRAY (NonHoppingPCCCH_t, Carriers, Non_Hopping_PCCCH_Carriers_t, Count_Carriers),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004819CSN_DESCR_END (NonHoppingPCCCH_t)
4820
4821static const
4822CSN_DESCR_BEGIN(Hopping_PCCCH_Carriers_t)
4823 M_UINT(Hopping_PCCCH_Carriers_t, MAIO, 6),
4824 M_UINT(Hopping_PCCCH_Carriers_t, TIMESLOT_ALLOCATION, 8),
4825CSN_DESCR_END (Hopping_PCCCH_Carriers_t)
4826
4827static const
4828CSN_DESCR_BEGIN(HoppingPCCCH_t)
4829 M_UINT(HoppingPCCCH_t, MA_NUMBER, 4),
Pau Espin Pedrol81b40cb2020-03-23 15:23:51 +01004830 M_REC_TARRAY (HoppingPCCCH_t, Carriers, Hopping_PCCCH_Carriers_t, Count_Carriers),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004831CSN_DESCR_END (HoppingPCCCH_t)
4832
4833static const
4834CSN_DESCR_BEGIN(PCCCH_Description_t)
4835 M_UINT(PCCCH_Description_t, TSC, 3),
4836 M_UNION (PCCCH_Description_t, 2),
4837 M_TYPE (PCCCH_Description_t, u.NonHopping, NonHoppingPCCCH_t),
4838 M_TYPE (PCCCH_Description_t, u.Hopping, HoppingPCCCH_t),
4839CSN_DESCR_END (PCCCH_Description_t)
4840
4841static const
4842CSN_DESCR_BEGIN(PSI2_t)
4843 M_UINT (PSI2_t, MESSAGE_TYPE, 6),
4844 M_UINT (PSI2_t, PAGE_MODE, 2),
4845
4846 M_UINT (PSI2_t, CHANGE_MARK, 2),
4847 M_UINT (PSI2_t, INDEX, 3),
4848 M_UINT (PSI2_t, COUNT, 3),
4849
4850 M_NEXT_EXIST (PSI2_t, Exist_Cell_Identification, 1),
4851 M_TYPE (PSI2_t, Cell_Identification, Cell_Identification_t),
4852
4853 M_NEXT_EXIST (PSI2_t, Exist_Non_GPRS_Cell_Options, 1),
4854 M_TYPE (PSI2_t, Non_GPRS_Cell_Options, Non_GPRS_Cell_Options_t),
4855
Pau Espin Pedrol81b40cb2020-03-23 15:23:51 +01004856 M_REC_TARRAY (PSI2_t, Reference_Frequency, Reference_Frequency_t, Count_Reference_Frequency),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004857 M_TYPE (PSI2_t, Cell_Allocation, Cell_Allocation_t),
Pau Espin Pedrol81b40cb2020-03-23 15:23:51 +01004858 M_REC_TARRAY (PSI2_t, GPRS_MA, PSI2_MA_t, Count_GPRS_MA),
4859 M_REC_TARRAY (PSI2_t, PCCCH_Description, PCCCH_Description_t, Count_PCCCH_Description),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04004860 M_PADDING_BITS(PSI2_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004861CSN_DESCR_END (PSI2_t)
4862/*< End Packet System Information Type 2 message content >*/
4863
4864
4865
4866/*< Packet System Information Type 3 message content >*/
4867static const
4868CSN_DESCR_BEGIN(Serving_Cell_params_t)
Anders Broman8ea3cbe2020-01-28 17:36:33 +01004869 M_UINT (Serving_Cell_params_t, CELL_BAR_ACCESS_2, 1),
4870 M_UINT (Serving_Cell_params_t, EXC_ACC, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004871 M_UINT (Serving_Cell_params_t, GPRS_RXLEV_ACCESS_MIN, 6),
4872 M_UINT (Serving_Cell_params_t, GPRS_MS_TXPWR_MAX_CCH, 5),
4873 M_NEXT_EXIST (Serving_Cell_params_t, Exist_HCS, 1),
4874 M_TYPE (Serving_Cell_params_t, HCS, HCS_t),
4875 M_UINT (Serving_Cell_params_t, MULTIBAND_REPORTING, 2),
4876CSN_DESCR_END (Serving_Cell_params_t)
4877
4878
4879static const
4880CSN_DESCR_BEGIN(Gen_Cell_Sel_t)
4881 M_UINT (Gen_Cell_Sel_t, GPRS_CELL_RESELECT_HYSTERESIS, 3),
Anders Broman8ea3cbe2020-01-28 17:36:33 +01004882 M_UINT (Gen_Cell_Sel_t, C31_HYST, 1),
4883 M_UINT (Gen_Cell_Sel_t, C32_QUAL, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004884 M_FIXED (Gen_Cell_Sel_t, 1, 0x01),
Pau Espin Pedrol034e32f2020-01-28 17:14:26 +01004885
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004886 M_NEXT_EXIST (Gen_Cell_Sel_t, Exist_T_RESEL, 1),
4887 M_UINT (Gen_Cell_Sel_t, T_RESEL, 3),
4888
4889 M_NEXT_EXIST (Gen_Cell_Sel_t, Exist_RA_RESELECT_HYSTERESIS, 1),
4890 M_UINT (Gen_Cell_Sel_t, RA_RESELECT_HYSTERESIS, 3),
4891CSN_DESCR_END (Gen_Cell_Sel_t)
4892
4893
4894static const
4895CSN_DESCR_BEGIN(COMPACT_Cell_Sel_t)
4896 M_UINT (COMPACT_Cell_Sel_t, bsic, 6),
Anders Broman8ea3cbe2020-01-28 17:36:33 +01004897 M_UINT (COMPACT_Cell_Sel_t, CELL_BAR_ACCESS_2, 1),
4898 M_UINT (COMPACT_Cell_Sel_t, EXC_ACC, 1),
4899 M_UINT (COMPACT_Cell_Sel_t, SAME_RA_AS_SERVING_CELL, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004900 M_NEXT_EXIST (COMPACT_Cell_Sel_t, Exist_GPRS_RXLEV_ACCESS_MIN, 2),
4901 M_UINT (COMPACT_Cell_Sel_t, GPRS_RXLEV_ACCESS_MIN, 6),
4902 M_UINT (COMPACT_Cell_Sel_t, GPRS_MS_TXPWR_MAX_CCH, 5),
4903 M_NEXT_EXIST (COMPACT_Cell_Sel_t, Exist_GPRS_TEMPORARY_OFFSET, 2),
4904 M_UINT (COMPACT_Cell_Sel_t, GPRS_TEMPORARY_OFFSET, 3),
4905 M_UINT (COMPACT_Cell_Sel_t, GPRS_PENALTY_TIME, 5),
4906 M_NEXT_EXIST (COMPACT_Cell_Sel_t, Exist_GPRS_RESELECT_OFFSET, 1),
4907 M_UINT (COMPACT_Cell_Sel_t, GPRS_RESELECT_OFFSET, 5),
4908 M_NEXT_EXIST (COMPACT_Cell_Sel_t, Exist_Hcs_Parm, 1),
4909 M_TYPE (COMPACT_Cell_Sel_t, HCS_Param, HCS_t),
4910 M_NEXT_EXIST (COMPACT_Cell_Sel_t, Exist_TIME_GROUP, 1),
4911 M_UINT (COMPACT_Cell_Sel_t, TIME_GROUP, 2),
4912 M_NEXT_EXIST (COMPACT_Cell_Sel_t, Exist_GUAR_CONSTANT_PWR_BLKS, 1),
4913 M_UINT (COMPACT_Cell_Sel_t, GUAR_CONSTANT_PWR_BLKS, 2),
4914CSN_DESCR_END (COMPACT_Cell_Sel_t)
4915
4916static const
4917CSN_DESCR_BEGIN(COMPACT_Neighbour_Cell_Param_Remaining_t)
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004918 M_VAR_BITMAP (COMPACT_Neighbour_Cell_Param_Remaining_t, FREQUENCY_DIFF, FREQ_DIFF_LENGTH, 0),
4919 M_TYPE (COMPACT_Neighbour_Cell_Param_Remaining_t, COMPACT_Cell_Sel_Remain_Cells, COMPACT_Cell_Sel_t),
4920CSN_DESCR_END (COMPACT_Neighbour_Cell_Param_Remaining_t)
4921
Pau Espin Pedrolf3ac06b2020-03-26 18:13:19 +01004922CSN_CallBackStatus_t callback_init_COMP_Ncell_Param_FREQUENCY_DIFF(struct bitvec *vector, unsigned *readIndex, void* param1, void* param2)
4923{
4924 guint i;
4925 guint8 freq_diff_len = *(guint8*)param1;
4926 COMPACT_Neighbour_Cell_Param_Remaining_t *pCom_NCell_Param_rem = (COMPACT_Neighbour_Cell_Param_Remaining_t*)param2;
4927
4928 for( i=0; i<16; i++, pCom_NCell_Param_rem++ )
4929 {
4930 pCom_NCell_Param_rem->FREQ_DIFF_LENGTH = freq_diff_len;
4931 }
4932
4933 return 0;
4934}
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004935
4936static const
4937CSN_DESCR_BEGIN(COMPACT_Neighbour_Cell_Param_t)
4938 M_UINT (COMPACT_Neighbour_Cell_Param_t, START_FREQUENCY, 10),
4939 M_TYPE (COMPACT_Neighbour_Cell_Param_t, COMPACT_Cell_Sel, COMPACT_Cell_Sel_t),
4940 M_UINT (COMPACT_Neighbour_Cell_Param_t, NR_OF_REMAINING_CELLS, 4),
4941 M_UINT_OFFSET(COMPACT_Neighbour_Cell_Param_t, FREQ_DIFF_LENGTH, 3, 1),
Pau Espin Pedrolf3ac06b2020-03-26 18:13:19 +01004942 M_CALLBACK (COMPACT_Neighbour_Cell_Param_t, callback_init_COMP_Ncell_Param_FREQUENCY_DIFF, FREQ_DIFF_LENGTH, COMPACT_Neighbour_Cell_Param_Remaining),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004943 M_VAR_TARRAY (COMPACT_Neighbour_Cell_Param_t, COMPACT_Neighbour_Cell_Param_Remaining, COMPACT_Neighbour_Cell_Param_Remaining_t, NR_OF_REMAINING_CELLS),
4944CSN_DESCR_END (COMPACT_Neighbour_Cell_Param_t)
4945
4946
4947static const
4948CSN_DESCR_BEGIN(COMPACT_Info_t)
4949 M_TYPE (COMPACT_Info_t, Cell_Identification, Cell_Identification_t),
4950 M_REC_TARRAY (COMPACT_Info_t, COMPACT_Neighbour_Cell_Param, COMPACT_Neighbour_Cell_Param_t, COMPACT_Neighbour_Cell_Param_Count),
4951CSN_DESCR_END (COMPACT_Info_t)
4952
4953
4954static const
4955CSN_DESCR_BEGIN(PSI3_AdditionR4_t)
4956 M_NEXT_EXIST (PSI3_AdditionR4_t, Exist_CCN_Support_Desc, 1),
4957 M_TYPE (PSI3_AdditionR4_t, CCN_Support_Desc, CCN_Support_Description_t),
4958CSN_DESCR_END (PSI3_AdditionR4_t)
4959
4960
4961static const
4962CSN_DESCR_BEGIN(PSI3_AdditionR99_t)
4963 M_FIXED (PSI3_AdditionR99_t, 2, 0x00),
4964 M_NEXT_EXIST (PSI3_AdditionR99_t, Exist_COMPACT_Info, 1),
4965 M_TYPE (PSI3_AdditionR99_t, COMPACT_Info, COMPACT_Info_t),
4966 M_FIXED (PSI3_AdditionR99_t, 1, 0x00),
4967 M_NEXT_EXIST (PSI3_AdditionR99_t, Exist_AdditionR4, 1),
4968 M_TYPE (PSI3_AdditionR99_t, AdditionR4, PSI3_AdditionR4_t),
4969CSN_DESCR_END (PSI3_AdditionR99_t)
4970
4971
4972static const
4973CSN_DESCR_BEGIN(PSI3_AdditionR98_t)
4974 M_TYPE (PSI3_AdditionR98_t, Scell_LSA_ID_Info, LSA_ID_Info_t),
4975
4976 M_NEXT_EXIST (PSI3_AdditionR98_t, Exist_LSA_Parameters, 1),
4977 M_TYPE (PSI3_AdditionR98_t, LSA_Parameters, LSA_Parameters_t),
4978
4979 M_NEXT_EXIST (PSI3_AdditionR98_t, Exist_AdditionR99, 1),
4980 M_TYPE (PSI3_AdditionR98_t, AdditionR99, PSI3_AdditionR99_t),
4981CSN_DESCR_END (PSI3_AdditionR98_t)
4982
4983
4984static const
4985CSN_DESCR_BEGIN(PSI3_t)
4986 M_UINT (PSI3_t, MESSAGE_TYPE, 6),
4987 M_UINT (PSI3_t, PAGE_MODE, 2),
4988 M_UINT (PSI3_t, CHANGE_MARK, 2),
4989 M_UINT (PSI3_t, BIS_COUNT, 4),
4990 M_TYPE (PSI3_t, Serving_Cell_params, Serving_Cell_params_t),
4991 M_TYPE (PSI3_t, General_Cell_Selection, Gen_Cell_Sel_t),
4992 M_TYPE (PSI3_t, NeighbourCellList, NeighbourCellList_t),
Pau Espin Pedrol034e32f2020-01-28 17:14:26 +01004993
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004994 M_NEXT_EXIST (PSI3_t, Exist_AdditionR98, 1),
4995 M_TYPE (PSI3_t, AdditionR98, PSI3_AdditionR98_t),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04004996
4997 M_PADDING_BITS(PSI3_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004998CSN_DESCR_END (PSI3_t)
4999/*< End Packet System Information Type 3 message content >*/
5000
5001
5002/*< Packet System Information Type 5 message content >*/
5003static const
5004CSN_DESCR_BEGIN(MeasurementParams_t)
5005 M_NEXT_EXIST (MeasurementParams_t, Exist_MULTI_BAND_REPORTING, 1),
5006 M_UINT (MeasurementParams_t, MULTI_BAND_REPORTING, 2),
5007
5008 M_NEXT_EXIST (MeasurementParams_t, Exist_SERVING_BAND_REPORTING, 1),
5009 M_UINT (MeasurementParams_t, SERVING_BAND_REPORTING, 2),
5010
5011 M_NEXT_EXIST (MeasurementParams_t, Exist_SCALE_ORD, 1),
5012 M_UINT (MeasurementParams_t, SCALE_ORD, 2),
5013
5014 M_NEXT_EXIST (MeasurementParams_t, Exist_OffsetThreshold900, 1),
5015 M_TYPE (MeasurementParams_t, OffsetThreshold900, OffsetThreshold_t),
5016
5017 M_NEXT_EXIST (MeasurementParams_t, Exist_OffsetThreshold1800, 1),
5018 M_TYPE (MeasurementParams_t, OffsetThreshold1800, OffsetThreshold_t),
5019
5020 M_NEXT_EXIST (MeasurementParams_t, Exist_OffsetThreshold400, 1),
5021 M_TYPE (MeasurementParams_t, OffsetThreshold400, OffsetThreshold_t),
5022
5023 M_NEXT_EXIST (MeasurementParams_t, Exist_OffsetThreshold1900, 1),
5024 M_TYPE (MeasurementParams_t, OffsetThreshold1900, OffsetThreshold_t),
5025
5026 M_NEXT_EXIST (MeasurementParams_t, Exist_OffsetThreshold850, 1),
5027 M_TYPE (MeasurementParams_t, OffsetThreshold850, OffsetThreshold_t),
5028CSN_DESCR_END (MeasurementParams_t)
5029
5030static const
5031CSN_DESCR_BEGIN(GPRSMeasurementParams3G_PSI5_t)
5032 M_NEXT_EXIST (GPRSMeasurementParams3G_PSI5_t, existRepParamsFDD, 2),
5033 M_UINT (GPRSMeasurementParams3G_PSI5_t, RepQuantFDD, 1),
5034 M_UINT (GPRSMeasurementParams3G_PSI5_t, MultiratReportingFDD, 2),
Pau Espin Pedrol034e32f2020-01-28 17:14:26 +01005035
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005036 M_NEXT_EXIST (GPRSMeasurementParams3G_PSI5_t, existReportingParamsFDD, 2),
5037 M_UINT (GPRSMeasurementParams3G_PSI5_t, ReportingOffsetFDD, 3),
5038 M_UINT (GPRSMeasurementParams3G_PSI5_t, ReportingThresholdFDD, 3),
Pau Espin Pedrol034e32f2020-01-28 17:14:26 +01005039
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005040 M_NEXT_EXIST (GPRSMeasurementParams3G_PSI5_t, existMultiratReportingTDD, 1),
5041 M_UINT (GPRSMeasurementParams3G_PSI5_t, MultiratReportingTDD, 2),
Pau Espin Pedrol034e32f2020-01-28 17:14:26 +01005042
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005043 M_NEXT_EXIST (GPRSMeasurementParams3G_PSI5_t, existOffsetThresholdTDD, 2),
5044 M_UINT (GPRSMeasurementParams3G_PSI5_t, ReportingOffsetTDD, 3),
5045 M_UINT (GPRSMeasurementParams3G_PSI5_t, ReportingThresholdTDD, 3),
5046CSN_DESCR_END (GPRSMeasurementParams3G_PSI5_t)
5047
5048static const
5049CSN_DESCR_BEGIN(ENH_Reporting_Parameters_t)
5050 M_UINT (ENH_Reporting_Parameters_t, REPORT_TYPE, 1),
5051 M_UINT (ENH_Reporting_Parameters_t, REPORTING_RATE, 1),
5052 M_UINT (ENH_Reporting_Parameters_t, INVALID_BSIC_REPORTING, 1),
5053
5054 M_NEXT_EXIST (ENH_Reporting_Parameters_t, Exist_NCC_PERMITTED, 1),
5055 M_UINT (ENH_Reporting_Parameters_t, NCC_PERMITTED, 8),
Pau Espin Pedrol034e32f2020-01-28 17:14:26 +01005056
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005057 M_NEXT_EXIST (ENH_Reporting_Parameters_t, Exist_GPRSMeasurementParams, 1),
5058 M_TYPE (ENH_Reporting_Parameters_t, GPRSMeasurementParams, MeasurementParams_t),
Pau Espin Pedrol034e32f2020-01-28 17:14:26 +01005059
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005060 M_NEXT_EXIST (ENH_Reporting_Parameters_t, Exist_GPRSMeasurementParams3G, 1),
5061 M_TYPE (ENH_Reporting_Parameters_t, GPRSMeasurementParams3G, GPRSMeasurementParams3G_PSI5_t),
5062CSN_DESCR_END (ENH_Reporting_Parameters_t)
5063
5064static const
5065CSN_DESCR_BEGIN(PSI5_AdditionsR7)
5066 M_NEXT_EXIST (PSI5_AdditionsR7, Exist_OffsetThreshold_700, 1),
5067 M_TYPE (PSI5_AdditionsR7, OffsetThreshold_700, OffsetThreshold_t),
5068
5069 M_NEXT_EXIST (PSI5_AdditionsR7, Exist_OffsetThreshold_810, 1),
5070 M_TYPE (PSI5_AdditionsR7, OffsetThreshold_810, OffsetThreshold_t),
5071CSN_DESCR_END (PSI5_AdditionsR7)
5072
5073static const
5074CSN_DESCR_BEGIN(PSI5_AdditionsR5)
5075 M_NEXT_EXIST (PSI5_AdditionsR5, Exist_GPRS_AdditionalMeasurementParams3G, 1),
5076 M_TYPE (PSI5_AdditionsR5, GPRS_AdditionalMeasurementParams3G, GPRS_AdditionalMeasurementParams3G_t),
Pau Espin Pedrol034e32f2020-01-28 17:14:26 +01005077
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005078 M_NEXT_EXIST (PSI5_AdditionsR5, Exist_AdditionsR7, 1),
5079 M_TYPE (PSI5_AdditionsR5, AdditionsR7, PSI5_AdditionsR7),
5080CSN_DESCR_END (PSI5_AdditionsR5)
5081
5082static const
5083CSN_DESCR_BEGIN(PSI5_AdditionsR99)
5084 M_NEXT_EXIST (PSI5_AdditionsR99, Exist_ENH_Reporting_Param, 1),
5085 M_TYPE (PSI5_AdditionsR99, ENH_Reporting_Param, ENH_Reporting_Parameters_t),
5086
5087 M_NEXT_EXIST (PSI5_AdditionsR99, Exist_AdditionsR5, 1),
5088 M_TYPE (PSI5_AdditionsR99, AdditionisR5, PSI5_AdditionsR5),
5089CSN_DESCR_END (PSI5_AdditionsR99)
5090
5091static const
5092CSN_DESCR_BEGIN(PSI5_t)
5093 M_UINT (PSI5_t, MESSAGE_TYPE, 6),
5094 M_UINT (PSI5_t, PAGE_MODE, 2),
5095 M_UINT (PSI5_t, CHANGE_MARK, 2),
5096 M_UINT (PSI5_t, INDEX, 3),
5097 M_UINT (PSI5_t, COUNT, 3),
5098
5099 M_NEXT_EXIST (PSI5_t, Eixst_NC_Meas_Param, 1),
5100 M_TYPE (PSI5_t, NC_Meas_Param, NC_Measurement_Parameters_t),
5101
5102 M_FIXED (PSI5_t, 1, 0x00),
5103
5104 M_NEXT_EXIST (PSI5_t, Exist_AdditionsR99, 1),
5105 M_TYPE (PSI5_t, AdditionsR99, PSI5_AdditionsR99),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04005106
5107 M_PADDING_BITS(PSI5_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005108CSN_DESCR_END (PSI5_t)
5109/*< End Packet System Information Type 5 message content >*/
5110
5111
5112/*< Packet System Information Type 13 message content >*/
5113static const
5114CSN_DESCR_BEGIN(PSI13_AdditionsR6)
5115 M_NEXT_EXIST (PSI13_AdditionsR6, Exist_LB_MS_TXPWR_MAX_CCH, 1),
5116 M_UINT (PSI13_AdditionsR6, LB_MS_TXPWR_MAX_CCH, 5),
5117 M_UINT (PSI13_AdditionsR6, SI2n_SUPPORT, 2),
5118CSN_DESCR_END (PSI13_AdditionsR6)
5119
5120static const
5121CSN_DESCR_BEGIN(PSI13_AdditionsR4)
5122 M_UINT (PSI13_AdditionsR4, SI_STATUS_IND, 1),
5123 M_NEXT_EXIST (PSI13_AdditionsR4, Exist_AdditionsR6, 1),
5124 M_TYPE (PSI13_AdditionsR4, AdditionsR6, PSI13_AdditionsR6),
5125CSN_DESCR_END (PSI13_AdditionsR4)
5126
5127static const
5128CSN_DESCR_BEGIN(PSI13_AdditionR99)
5129 M_UINT (PSI13_AdditionR99, SGSNR, 1),
5130 M_NEXT_EXIST (PSI13_AdditionR99, Exist_AdditionsR4, 1),
5131 M_TYPE (PSI13_AdditionR99, AdditionsR4, PSI13_AdditionsR4),
5132CSN_DESCR_END (PSI13_AdditionR99)
5133
5134static const
5135CSN_DESCR_BEGIN(PSI13_t)
5136 M_UINT (PSI13_t, MESSAGE_TYPE, 6),
5137 M_UINT (PSI13_t, PAGE_MODE, 2),
5138 M_UINT (PSI13_t, BCCH_CHANGE_MARK, 3),
5139 M_UINT (PSI13_t, SI_CHANGE_FIELD, 4),
Pau Espin Pedrol034e32f2020-01-28 17:14:26 +01005140
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005141 M_NEXT_EXIST (PSI13_t, Exist_MA, 2),
5142 M_UINT (PSI13_t, SI13_CHANGE_MARK, 2),
5143 M_TYPE (PSI13_t, GPRS_Mobile_Allocation, GPRS_Mobile_Allocation_t),
5144
5145 M_UNION (PSI13_t, 2),
5146 M_TYPE (PSI13_t, u.PBCCH_Not_present, PBCCH_Not_present_t),
5147 M_TYPE (PSI13_t, u.PBCCH_present, PBCCH_present_t),
5148
5149 M_NEXT_EXIST (PSI13_t, Exist_AdditionsR99, 1),
5150 M_TYPE (PSI13_t, AdditionsR99, PSI13_AdditionR99),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04005151
5152 M_PADDING_BITS(PSI13_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005153CSN_DESCR_END (PSI13_t)
5154/*< End Packet System Information Type 13 message content >*/
5155
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005156/* SI1_RestOctet_t */
5157
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01005158#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005159static const
5160CSN_DESCR_BEGIN (SI1_RestOctet_t)
5161 M_NEXT_EXIST_LH(SI1_RestOctet_t, Exist_NCH_Position, 1),
5162 M_UINT (SI1_RestOctet_t, NCH_Position, 5),
5163
5164 M_UINT_LH (SI1_RestOctet_t, BandIndicator, 1),
5165CSN_DESCR_END (SI1_RestOctet_t)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01005166#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005167
5168/* SI3_Rest_Octet_t */
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01005169#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005170static const
5171CSN_DESCR_BEGIN(Selection_Parameters_t)
5172 M_UINT (Selection_Parameters_t, CBQ, 1),
5173 M_UINT (Selection_Parameters_t, CELL_RESELECT_OFFSET, 6),
5174 M_UINT (Selection_Parameters_t, TEMPORARY_OFFSET, 3),
5175 M_UINT (Selection_Parameters_t, PENALTY_TIME, 5),
5176CSN_DESCR_END (Selection_Parameters_t)
5177
5178static const
5179CSN_DESCR_BEGIN (SI3_Rest_Octet_t)
5180 M_NEXT_EXIST_LH(SI3_Rest_Octet_t, Exist_Selection_Parameters, 1),
5181 M_TYPE (SI3_Rest_Octet_t, Selection_Parameters, Selection_Parameters_t),
5182
5183 M_NEXT_EXIST_LH(SI3_Rest_Octet_t, Exist_Power_Offset, 1),
5184 M_UINT (SI3_Rest_Octet_t, Power_Offset, 2),
5185
5186 M_UINT_LH (SI3_Rest_Octet_t, System_Information_2ter_Indicator, 1),
5187 M_UINT_LH (SI3_Rest_Octet_t, Early_Classmark_Sending_Control, 1),
5188
5189 M_NEXT_EXIST_LH(SI3_Rest_Octet_t, Exist_WHERE, 1),
5190 M_UINT (SI3_Rest_Octet_t, WHERE, 3),
5191
5192 M_NEXT_EXIST_LH(SI3_Rest_Octet_t, Exist_GPRS_Indicator, 2),
5193 M_UINT (SI3_Rest_Octet_t, RA_COLOUR, 3),
5194 M_UINT (SI3_Rest_Octet_t, SI13_POSITION, 1),
5195
5196 M_UINT_LH (SI3_Rest_Octet_t, ECS_Restriction3G, 1),
5197
5198 M_NEXT_EXIST_LH(SI3_Rest_Octet_t, ExistSI2quaterIndicator, 1),
5199 M_UINT (SI3_Rest_Octet_t, SI2quaterIndicator, 1),
5200CSN_DESCR_END (SI3_Rest_Octet_t)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01005201#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005202
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01005203#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005204static const
5205CSN_DESCR_BEGIN (SI4_Rest_Octet_t)
5206 M_NEXT_EXIST_LH(SI4_Rest_Octet_t, Exist_Selection_Parameters, 1),
5207 M_TYPE (SI4_Rest_Octet_t, Selection_Parameters, Selection_Parameters_t),
5208
5209 M_NEXT_EXIST_LH(SI4_Rest_Octet_t, Exist_Power_Offset, 1),
5210 M_UINT (SI4_Rest_Octet_t, Power_Offset, 2),
5211
5212 M_NEXT_EXIST_LH(SI4_Rest_Octet_t, Exist_GPRS_Indicator, 2),
5213 M_UINT (SI4_Rest_Octet_t, RA_COLOUR, 3),
5214 M_UINT (SI4_Rest_Octet_t, SI13_POSITION, 1),
5215CSN_DESCR_END (SI4_Rest_Octet_t)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01005216#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005217
5218/* SI6_RestOctet_t */
5219
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01005220#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005221static const
5222CSN_DESCR_BEGIN(PCH_and_NCH_Info_t)
5223 M_UINT (PCH_and_NCH_Info_t, PagingChannelRestructuring, 1),
5224 M_UINT (PCH_and_NCH_Info_t, NLN_SACCH, 2),
5225
5226 M_NEXT_EXIST (PCH_and_NCH_Info_t, Exist_CallPriority, 1),
5227 M_UINT (PCH_and_NCH_Info_t, CallPriority, 3),
5228
5229 M_UINT (PCH_and_NCH_Info_t, NLN_Status, 1),
5230CSN_DESCR_END (PCH_and_NCH_Info_t)
5231
5232static const
5233CSN_DESCR_BEGIN (SI6_RestOctet_t)
5234 M_NEXT_EXIST_LH(SI6_RestOctet_t, Exist_PCH_and_NCH_Info, 1),
5235 M_TYPE (SI6_RestOctet_t, PCH_and_NCH_Info, PCH_and_NCH_Info_t),
5236
5237 M_NEXT_EXIST_LH(SI6_RestOctet_t, Exist_VBS_VGCS_Options, 1),
5238 M_UINT (SI6_RestOctet_t, VBS_VGCS_Options, 2),
5239
5240 M_NEXT_EXIST_LH(SI6_RestOctet_t, Exist_DTM_Support, 2),
5241 M_UINT (SI6_RestOctet_t, RAC, 8),
5242 M_UINT (SI6_RestOctet_t, MAX_LAPDm, 3),
5243
5244 M_UINT_LH (SI6_RestOctet_t, BandIndicator, 1),
5245CSN_DESCR_END (SI6_RestOctet_t)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01005246#endif
Pau Espin Pedrol20848c32020-03-23 17:13:20 +01005247
Vadim Yanitskiya2d972a2020-04-04 03:44:35 +07005248/* EGPRS Packet Channel Request (see 3GPP TS 44.060, table 11.2.5a.2) */
5249static const
5250CSN_DESCR_BEGIN(PacketChannelRequest_MC5P2RB3_t)
5251 M_UINT (PacketChannelRequest_MC5P2RB3_t, MultislotClass, 5),
5252 M_UINT (PacketChannelRequest_MC5P2RB3_t, Priority, 2),
5253 M_UINT (PacketChannelRequest_MC5P2RB3_t, RandomBits, 3),
5254CSN_DESCR_END (PacketChannelRequest_MC5P2RB3_t)
5255
5256static const
5257CSN_DESCR_BEGIN(PacketChannelRequest_MCG3P2RB3_t)
5258 M_UINT (PacketChannelRequest_MCG3P2RB3_t, MultislotClassGroup, 3),
5259 M_UINT (PacketChannelRequest_MCG3P2RB3_t, Priority, 2),
5260 M_UINT (PacketChannelRequest_MCG3P2RB3_t, RandomBits, 3),
5261CSN_DESCR_END (PacketChannelRequest_MCG3P2RB3_t)
5262
5263static const
5264CSN_DESCR_BEGIN(PacketChannelRequest_NOB3P2RB3_t)
5265 M_UINT (PacketChannelRequest_NOB3P2RB3_t, NumberOfBlocks, 3),
5266 M_UINT (PacketChannelRequest_NOB3P2RB3_t, Priority, 2),
5267 M_UINT (PacketChannelRequest_NOB3P2RB3_t, RandomBits, 3),
5268CSN_DESCR_END (PacketChannelRequest_NOB3P2RB3_t)
5269
5270static const
5271CSN_DESCR_BEGIN(PacketChannelRequest_P2RB3_t)
5272 M_UINT (PacketChannelRequest_P2RB3_t, Priority, 2),
5273 M_UINT (PacketChannelRequest_P2RB3_t, RandomBits, 3),
5274CSN_DESCR_END (PacketChannelRequest_P2RB3_t)
5275
5276static const
5277CSN_DESCR_BEGIN(PacketChannelRequest_RB5_t)
5278 M_UINT (PacketChannelRequest_RB5_t, RandomBits, 5),
5279CSN_DESCR_END (PacketChannelRequest_RB5_t)
5280
5281static const
5282CSN_ChoiceElement_t EGPRS_PacketChannelRequest_Choice[] =
5283{
5284 {1, 0x00, 0, M_TYPE(EGPRS_PacketChannelRequest_t, Content, PacketChannelRequest_MC5P2RB3_t)},
5285 {3, 0x04, 0, M_TYPE(EGPRS_PacketChannelRequest_t, Content, PacketChannelRequest_NOB3P2RB3_t)},
5286 {3, 0x05, 0, M_TYPE(EGPRS_PacketChannelRequest_t, Content, PacketChannelRequest_MCG3P2RB3_t)},
5287 {6, 0x30, 0, M_TYPE(EGPRS_PacketChannelRequest_t, Content, PacketChannelRequest_P2RB3_t)},
5288 {6, 0x33, 0, M_TYPE(EGPRS_PacketChannelRequest_t, Content, PacketChannelRequest_RB5_t)},
5289 {6, 0x35, 0, M_TYPE(EGPRS_PacketChannelRequest_t, Content, PacketChannelRequest_RB5_t)},
5290 {6, 0x36, 0, M_TYPE(EGPRS_PacketChannelRequest_t, Content, PacketChannelRequest_RB5_t)},
5291 {6, 0x37, 0, M_TYPE(EGPRS_PacketChannelRequest_t, Content, PacketChannelRequest_RB5_t)},
5292 {6, 0x38, 0, M_TYPE(EGPRS_PacketChannelRequest_t, Content, PacketChannelRequest_P2RB3_t)},
5293 {6, 0x39, 0, M_TYPE(EGPRS_PacketChannelRequest_t, Content, PacketChannelRequest_RB5_t)},
5294};
5295
5296CSN_DESCR_BEGIN (EGPRS_PacketChannelRequest_t)
5297 M_CHOICE (EGPRS_PacketChannelRequest_t, Type,
5298 EGPRS_PacketChannelRequest_Choice, ElementsOf(EGPRS_PacketChannelRequest_Choice)),
5299CSN_DESCR_END (EGPRS_PacketChannelRequest_t)
5300
Pau Espin Pedrol20848c32020-03-23 17:13:20 +01005301// ----------------------------------------------------------------------------
5302// osmo-pcu RLCMAC APIs
5303// ----------------------------------------------------------------------------
5304static const struct value_string rlcmac_ul_msg_names[] = {
5305 { MT_PACKET_CELL_CHANGE_FAILURE, "Pkt Cell Change Failure" },
5306 { MT_PACKET_CONTROL_ACK, "Pkt Control Ack" },
5307 { MT_PACKET_DOWNLINK_ACK_NACK , "Pkt DL ACK/NACK" },
5308 { MT_PACKET_UPLINK_DUMMY_CONTROL_BLOCK, "Pkt UL Dummy Ctrl Block" },
5309 { MT_PACKET_MEASUREMENT_REPORT, "Pkt Meas Report" },
5310 { MT_PACKET_RESOURCE_REQUEST, "Pkt Resource Req" },
5311 { MT_PACKET_MOBILE_TBF_STATUS, "Pkt Mobile TBF Status" },
5312 { MT_PACKET_PSI_STATUS, "Pkt PSI Status" },
5313 { MT_EGPRS_PACKET_DOWNLINK_ACK_NACK, "EGPRS Pkt DL ACK/NACK" },
5314 { MT_PACKET_PAUSE, "Pkt Pause" },
5315 { MT_PACKET_ENHANCED_MEASUREMENT_REPORT,"Pkt Enchanced Meas Report" },
5316 { MT_ADDITIONAL_MS_RAC, "Additional MS RAC" },
Pau Espin Pedrol95e4a2b2020-12-11 19:51:38 +01005317 { MT_PACKET_CELL_CHANGE_NOTIFICATION, "Pkt Cell Change Notification" },
Pau Espin Pedrol20848c32020-03-23 17:13:20 +01005318 { MT_PACKET_SI_STATUS, "Pkt SI Status" },
5319 { MT_ENHANCED_MEASUREMENT_REPORT, "Enchanced Meas Report" },
5320 { 0, NULL }
5321};
5322
5323static const struct value_string rlcmac_dl_msg_names[] = {
5324 { MT_PACKET_CELL_CHANGE_ORDER, "Pkt Cell Change Order" },
5325 { MT_PACKET_DOWNLINK_ASSIGNMENT, "Pkt DL ASS" },
5326 { MT_PACKET_MEASUREMENT_ORDER, "Pkt Meas Order" },
5327 { MT_PACKET_POLLING_REQ, "Pkt Polling Req" },
5328 { MT_PACKET_POWER_CONTROL_TIMING_ADVANCE, "Pkt PWR CTRL TA" },
5329 { MT_PACKET_QUEUEING_NOTIFICATION, "Pkt Queueing Notification" },
5330 { MT_PACKET_TIMESLOT_RECONFIGURE, "Pkt TS Reconf" },
5331 { MT_PACKET_TBF_RELEASE, "Pkt TBF Release" },
5332 { MT_PACKET_UPLINK_ACK_NACK, "Pkt UL ACK/NACK" },
5333 { MT_PACKET_UPLINK_ASSIGNMENT, "Pkt UL ASS" },
5334 { MT_PACKET_CELL_CHANGE_CONTINUE, "Pkt Cell Change Continue" },
5335 { MT_PACKET_NEIGHBOUR_CELL_DATA, "Pkt Neightbour Cell Data" },
5336 { MT_PACKET_SERVING_CELL_DATA, "Pkt Serving Cell Data" },
5337 { MT_PACKET_HANDOVER_COMMAND, "Pkt Handover Cmd" },
5338 { MT_PACKET_PHYSICAL_INFORMATION, "Pkt Physical Info" },
5339 { MT_PACKET_ACCESS_REJECT, "Pkt Access Reject" },
5340 { MT_PACKET_PAGING_REQUEST, "Pkt Paging Request" },
5341 { MT_PACKET_PDCH_RELEASE, "Pkt PDCH Release" },
5342 { MT_PACKET_PRACH_PARAMETERS, "Pkt PRACH Params" },
5343 { MT_PACKET_DOWNLINK_DUMMY_CONTROL_BLOCK, "Pkt DL Dummy Ctrl Block" },
5344 { MT_PACKET_SYSTEM_INFO_6, "Pkt SI 6" },
5345 { MT_PACKET_SYSTEM_INFO_1, "Pkt SI 1" },
5346 { MT_PACKET_SYSTEM_INFO_2, "Pkt SI 2" },
5347 { MT_PACKET_SYSTEM_INFO_3, "Pkt SI 3" },
5348 { MT_PACKET_SYSTEM_INFO_3_BIS, "Pkt SI 3bis" },
5349 { MT_PACKET_SYSTEM_INFO_4, "Pkt SI 4" },
5350 { MT_PACKET_SYSTEM_INFO_5, "Pkt SI 5" },
5351 { MT_PACKET_SYSTEM_INFO_13, "Pkt SI 13" },
5352 { MT_PACKET_SYSTEM_INFO_7, "Pkt SI 7" },
5353 { MT_PACKET_SYSTEM_INFO_8, "Pkt SI 8" },
5354 { MT_PACKET_SYSTEM_INFO_14, "Pkt SI 14" },
5355 { MT_PACKET_SYSTEM_INFO_3_TER, "Pkt SI 3ter" },
5356 { MT_PACKET_SYSTEM_INFO_3_QUATER, "Pkt SI 3quater" },
5357 { MT_PACKET_SYSTEM_INFO_15, "Pkt SI 15" },
5358 { 0, NULL }
5359};
5360
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01005361/* Returns 0 on success, negative on error. */
Pau Espin Pedrol007056e2020-03-26 15:03:33 +01005362int decode_gsm_rlcmac_uplink(struct bitvec *vector, RlcMacUplink_t * data)
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005363{
5364 csnStream_t ar;
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01005365 int ret;
Ivan Kluchnikov9b06ff02012-06-15 10:13:30 +04005366 unsigned readIndex = 0;
Alexander Couzensccde5c92017-02-04 03:10:08 +01005367 guint8 payload_type = bitvec_read_field(vector, &readIndex, 2);
Pau Espin Pedrol20848c32020-03-23 17:13:20 +01005368 const char *msg_type_name;
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005369
5370 if (payload_type == PAYLOAD_TYPE_DATA)
5371 {
Pau Espin Pedrolea9de4a2020-02-03 18:57:21 +01005372 LOGP(DRLCMACDATA, LOGL_NOTICE, "Payload Type: DATA (0), not implemented\n");
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01005373 return CSN_ERROR_GENERAL;
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005374 }
5375 else if (payload_type == PAYLOAD_TYPE_RESERVED)
5376 {
Pau Espin Pedrolea9de4a2020-02-03 18:57:21 +01005377 LOGP(DRLCMACDATA, LOGL_NOTICE, "Payload Type: RESERVED (3)\n");
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01005378 return CSN_ERROR_GENERAL;
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005379 }
Pau Espin Pedrolac2b8662020-02-03 18:58:24 +01005380
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04005381 data->NrOfBits = 23 * 8;
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005382 csnStreamInit(&ar, 0, data->NrOfBits);
5383 readIndex += 6;
Alexander Couzensccde5c92017-02-04 03:10:08 +01005384 data->u.MESSAGE_TYPE = bitvec_read_field(vector, &readIndex, 6);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005385 readIndex = 0;
Pau Espin Pedrolac2b8662020-02-03 18:58:24 +01005386
5387 /* recursive csnStreamDecoder call uses LOGPC everywhere, so we need to start the log somewhere... */
Pau Espin Pedrol20848c32020-03-23 17:13:20 +01005388 msg_type_name = get_value_string(rlcmac_ul_msg_names, data->u.MESSAGE_TYPE);
5389 LOGP(DCSN1, LOGL_INFO, "csnStreamDecoder (type: %s (%d)): ",
5390 msg_type_name, data->u.MESSAGE_TYPE);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005391 switch (data->u.MESSAGE_TYPE)
5392 {
5393 case MT_PACKET_CELL_CHANGE_FAILURE:
5394 {
5395 /*
5396 * data is the pointer to the unpack struct that hold the unpack value
5397 * CSNDESCR is an array that holds the different element types
5398 * ar is the csn context holding the bitcount, offset and output
5399 */
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005400 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_Cell_Change_Failure_t), vector, &readIndex, &data->u.Packet_Cell_Change_Failure);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005401 break;
5402 }
5403 case MT_PACKET_CONTROL_ACK:
5404 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005405 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_Control_Acknowledgement_t), vector, &readIndex, &data->u.Packet_Control_Acknowledgement);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005406 break;
5407 }
5408 case MT_PACKET_DOWNLINK_ACK_NACK:
5409 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005410 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_Downlink_Ack_Nack_t), vector, &readIndex, &data->u.Packet_Downlink_Ack_Nack);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005411 break;
5412 }
5413 case MT_PACKET_UPLINK_DUMMY_CONTROL_BLOCK:
5414 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005415 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 +03005416 break;
5417 }
5418 case MT_PACKET_MEASUREMENT_REPORT:
5419 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005420 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_Measurement_Report_t), vector, &readIndex, &data->u.Packet_Measurement_Report);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005421 break;
5422 }
5423 case MT_PACKET_RESOURCE_REQUEST:
5424 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005425 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_Resource_Request_t), vector, &readIndex, &data->u.Packet_Resource_Request);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005426 break;
5427 }
5428
5429 case MT_PACKET_MOBILE_TBF_STATUS:
5430 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005431 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_Mobile_TBF_Status_t), vector, &readIndex, &data->u.Packet_Mobile_TBF_Status);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005432 break;
5433 }
5434 case MT_PACKET_PSI_STATUS:
5435 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005436 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_PSI_Status_t), vector, &readIndex, &data->u.Packet_PSI_Status);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005437 break;
5438 }
5439 case MT_EGPRS_PACKET_DOWNLINK_ACK_NACK:
5440 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005441 ret = csnStreamDecoder(&ar, CSNDESCR(EGPRS_PD_AckNack_t), vector, &readIndex, &data->u.Egprs_Packet_Downlink_Ack_Nack);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005442 break;
5443 }
5444 case MT_PACKET_PAUSE:
5445 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005446 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_Pause_t), vector, &readIndex, &data->u.Packet_Pause);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005447 break;
5448 }
5449 case MT_PACKET_ENHANCED_MEASUREMENT_REPORT:
5450 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005451 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_Enh_Measurement_Report_t), vector, &readIndex, &data->u.Packet_Enh_Measurement_Report);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005452 break;
5453 }
5454 case MT_ADDITIONAL_MS_RAC:
5455 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005456 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 +03005457 break;
5458 }
5459 case MT_PACKET_CELL_CHANGE_NOTIFICATION:
5460 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005461 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_Cell_Change_Notification_t), vector, &readIndex, &data->u.Packet_Cell_Change_Notification);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005462 break;
5463 }
5464 case MT_PACKET_SI_STATUS:
5465 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005466 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_SI_Status_t), vector, &readIndex, &data->u.Packet_SI_Status);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005467 break;
5468 }
5469 default:
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01005470 ret = -1;
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005471 break;
5472 }
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01005473
Pau Espin Pedrolac2b8662020-02-03 18:58:24 +01005474 /* recursive csnStreamDecoder call uses LOGPC everywhere without trailing
5475 newline, so as a caller we are responisble for submitting it */
5476 LOGPC(DCSN1, LOGL_INFO, "\n");
5477
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01005478 if (ret > 0) {
Pau Espin Pedrol20848c32020-03-23 17:13:20 +01005479 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 +01005480 ret = 0;
5481 }
5482
5483 return ret;
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005484}
5485
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01005486/* Returns 0 on success, negative on error. */
Pau Espin Pedrol007056e2020-03-26 15:03:33 +01005487int decode_gsm_rlcmac_downlink(struct bitvec *vector, RlcMacDownlink_t * data)
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005488{
5489 csnStream_t ar;
5490 /* See RLC/MAC downlink control block structure in TS 44.060 / 10.3.1 */
5491 gint bit_offset = 0;
5492 gint bit_length;
Ivan Kluchnikov9b06ff02012-06-15 10:13:30 +04005493 unsigned readIndex = 0;
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01005494 int ret;
Pau Espin Pedrol20848c32020-03-23 17:13:20 +01005495 const char *msg_type_name;
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01005496
Alexander Couzensccde5c92017-02-04 03:10:08 +01005497 data->PAYLOAD_TYPE = bitvec_read_field(vector, &readIndex, 2);
5498 data->RRBP = bitvec_read_field(vector, &readIndex, 2);
5499 data->SP = bitvec_read_field(vector, &readIndex, 1);
5500 data->USF = bitvec_read_field(vector, &readIndex, 3);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005501
5502 if (data->PAYLOAD_TYPE == PAYLOAD_TYPE_DATA)
5503 {
Pau Espin Pedrolea9de4a2020-02-03 18:57:21 +01005504 LOGP(DRLCMACDATA, LOGL_NOTICE, "Payload Type: DATA (0), not implemented\n");
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01005505 return CSN_ERROR_GENERAL;
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005506 }
5507 else if (data->PAYLOAD_TYPE == PAYLOAD_TYPE_RESERVED)
5508 {
Pau Espin Pedrolea9de4a2020-02-03 18:57:21 +01005509 LOGP(DRLCMACDATA, LOGL_NOTICE, "Payload Type: RESERVED (3)\n");
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01005510 return CSN_ERROR_GENERAL;
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005511 }
5512 /* We can decode the message */
5513 else
5514 {
5515 /* First print the message type and create a tree item */
5516 bit_offset = 8;
5517 if (data->PAYLOAD_TYPE == PAYLOAD_TYPE_CTRL_OPT_OCTET)
5518 {
Alexander Couzensccde5c92017-02-04 03:10:08 +01005519 data->RBSN = bitvec_read_field(vector, &readIndex, 1);
5520 data->RTI = bitvec_read_field(vector, &readIndex, 5);
5521 data->FS = bitvec_read_field(vector, &readIndex, 1);
5522 data->AC = bitvec_read_field(vector, &readIndex, 1);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005523 bit_offset += 8;
5524 if (data->AC == 1)
5525 {
Alexander Couzensccde5c92017-02-04 03:10:08 +01005526 data->PR = bitvec_read_field(vector, &readIndex, 2);
5527 data->TFI = bitvec_read_field(vector, &readIndex, 5);
5528 data->D = bitvec_read_field(vector, &readIndex, 1);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005529 bit_offset += 8;
5530 }
5531 if ((data->RBSN == 1) && (data->FS == 0))
5532 {
Alexander Couzensccde5c92017-02-04 03:10:08 +01005533 data->RBSNe = bitvec_read_field(vector, &readIndex, 3);
5534 data->FSe = bitvec_read_field(vector, &readIndex, 1);
5535 data->spare = bitvec_read_field(vector, &readIndex, 4);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005536 bit_offset += 8;
5537 }
5538 }
Alexander Couzensccde5c92017-02-04 03:10:08 +01005539 data->u.MESSAGE_TYPE = bitvec_read_field(vector, &readIndex, 6);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005540 }
5541
5542 /* Initialize the contexts */
5543 bit_length = 23*8 - bit_offset;
5544 data->NrOfBits = bit_length;
5545 readIndex = bit_offset;
5546
5547 csnStreamInit(&ar, bit_offset, bit_length);
5548
Pau Espin Pedrolac2b8662020-02-03 18:58:24 +01005549 /* recursive csnStreamDecoder call uses LOGPC everywhere, so we need to start the log somewhere... */
Pau Espin Pedrol20848c32020-03-23 17:13:20 +01005550 msg_type_name = get_value_string(rlcmac_dl_msg_names, data->u.MESSAGE_TYPE);
5551 LOGP(DCSN1, LOGL_INFO, "csnStreamDecoder (type: %s (%d): ",
5552 msg_type_name, data->u.MESSAGE_TYPE);
Pau Espin Pedrolac2b8662020-02-03 18:58:24 +01005553
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005554 switch (data->u.MESSAGE_TYPE)
5555 {
5556 case MT_PACKET_ACCESS_REJECT:
5557 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005558 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_Access_Reject_t), vector, &readIndex, &data->u.Packet_Access_Reject);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005559 break;
5560 }
5561 case MT_PACKET_CELL_CHANGE_ORDER:
5562 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005563 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_Cell_Change_Order_t), vector, &readIndex, &data->u.Packet_Cell_Change_Order);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005564 break;
5565 }
5566 case MT_PACKET_CELL_CHANGE_CONTINUE:
5567 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005568 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_Cell_Change_Continue_t), vector, &readIndex, &data->u.Packet_Cell_Change_Continue);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005569 break;
5570 }
5571 case MT_PACKET_DOWNLINK_ASSIGNMENT:
5572 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005573 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_Downlink_Assignment_t), vector, &readIndex, &data->u.Packet_Downlink_Assignment);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005574 break;
5575 }
5576 case MT_PACKET_MEASUREMENT_ORDER:
5577 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005578 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_Measurement_Order_t), vector, &readIndex, &data->u.Packet_Measurement_Order);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005579 break;
5580 }
5581 case MT_PACKET_NEIGHBOUR_CELL_DATA:
5582 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005583 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_Neighbour_Cell_Data_t), vector, &readIndex, &data->u.Packet_Neighbour_Cell_Data);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005584 break;
5585 }
5586 case MT_PACKET_SERVING_CELL_DATA:
5587 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005588 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_Serving_Cell_Data_t), vector, &readIndex, &data->u.Packet_Serving_Cell_Data);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005589 break;
5590 }
5591 case MT_PACKET_PAGING_REQUEST:
5592 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005593 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_Paging_Request_t), vector, &readIndex, &data->u.Packet_Paging_Request);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005594 break;
5595 }
5596 case MT_PACKET_PDCH_RELEASE:
5597 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005598 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_PDCH_Release_t), vector, &readIndex, &data->u.Packet_PDCH_Release);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005599 break;
5600 }
5601 case MT_PACKET_POLLING_REQ:
5602 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005603 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_Polling_Request_t), vector, &readIndex, &data->u.Packet_Polling_Request);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005604 break;
5605 }
5606 case MT_PACKET_POWER_CONTROL_TIMING_ADVANCE:
5607 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005608 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 +03005609 break;
5610 }
5611 case MT_PACKET_PRACH_PARAMETERS:
5612 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005613 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_PRACH_Parameters_t), vector, &readIndex, &data->u.Packet_PRACH_Parameters);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005614 break;
5615 }
5616 case MT_PACKET_QUEUEING_NOTIFICATION:
5617 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005618 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_Queueing_Notification_t), vector, &readIndex, &data->u.Packet_Queueing_Notification);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005619 break;
5620 }
5621 case MT_PACKET_TIMESLOT_RECONFIGURE:
5622 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005623 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_Timeslot_Reconfigure_t), vector, &readIndex, &data->u.Packet_Timeslot_Reconfigure);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005624 break;
5625 }
5626 case MT_PACKET_TBF_RELEASE:
5627 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005628 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_TBF_Release_t), vector, &readIndex, &data->u.Packet_TBF_Release);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005629 break;
5630 }
5631 case MT_PACKET_UPLINK_ACK_NACK:
5632 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005633 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_Uplink_Ack_Nack_t), vector, &readIndex, &data->u.Packet_Uplink_Ack_Nack);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005634 break;
5635 }
5636 case MT_PACKET_UPLINK_ASSIGNMENT:
5637 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005638 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_Uplink_Assignment_t), vector, &readIndex, &data->u.Packet_Uplink_Assignment);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005639 break;
5640 }
5641 case MT_PACKET_HANDOVER_COMMAND:
5642 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005643 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_Handover_Command_t), vector, &readIndex, &data->u.Packet_Handover_Command);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005644 break;
5645 }
5646 case MT_PACKET_PHYSICAL_INFORMATION:
5647 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005648 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_PhysicalInformation_t), vector, &readIndex, &data->u.Packet_Handover_Command);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005649 break;
5650 }
5651 case MT_PACKET_DOWNLINK_DUMMY_CONTROL_BLOCK:
5652 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005653 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 +03005654 break;
5655 }
5656 case MT_PACKET_SYSTEM_INFO_1:
5657 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005658 ret = csnStreamDecoder(&ar, CSNDESCR(PSI1_t), vector, &readIndex, &data->u.PSI1);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005659 break;
5660 }
5661 case MT_PACKET_SYSTEM_INFO_2:
5662 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005663 ret = csnStreamDecoder(&ar, CSNDESCR(PSI2_t), vector, &readIndex, &data->u.PSI2);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005664 break;
5665 }
5666 case MT_PACKET_SYSTEM_INFO_3:
5667 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005668 ret = csnStreamDecoder(&ar, CSNDESCR(PSI3_t), vector, &readIndex, &data->u.PSI3);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005669 break;
5670 }
5671 case MT_PACKET_SYSTEM_INFO_5:
5672 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005673 ret = csnStreamDecoder(&ar, CSNDESCR(PSI5_t), vector, &readIndex, &data->u.PSI5);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005674 break;
5675 }
5676 case MT_PACKET_SYSTEM_INFO_13:
5677 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005678 ret = csnStreamDecoder(&ar, CSNDESCR(PSI13_t), vector, &readIndex, &data->u.PSI13);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005679 break;
5680 }
5681 default:
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01005682 ret = CSN_ERROR_GENERAL;
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005683 break;
5684 }
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01005685
Pau Espin Pedrolac2b8662020-02-03 18:58:24 +01005686 /* recursive csnStreamDecoder call uses LOGPC everywhere without trailing
5687 newline, so as a caller we are responisble for submitting it */
5688 LOGPC(DCSN1, LOGL_INFO, "\n");
5689
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01005690 if (ret > 0) {
Pau Espin Pedrol20848c32020-03-23 17:13:20 +01005691 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 +01005692 ret = 0;
5693 }
5694
5695 return ret;
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005696}
5697
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01005698/* Returns 0 on success, negative on error. */
Pau Espin Pedrol007056e2020-03-26 15:03:33 +01005699int encode_gsm_rlcmac_uplink(struct bitvec *vector, RlcMacUplink_t * data)
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005700{
5701 csnStream_t ar;
Ivan Kluchnikov9b06ff02012-06-15 10:13:30 +04005702 unsigned writeIndex = 0;
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01005703 int ret;
Pau Espin Pedrol20848c32020-03-23 17:13:20 +01005704 const char *msg_type_name;
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01005705
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04005706 data->NrOfBits = 23 * 8;
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005707 csnStreamInit(&ar, 0, data->NrOfBits);
5708 writeIndex = 0;
Pau Espin Pedrolac2b8662020-02-03 18:58:24 +01005709
5710 /* recursive csnStreamEncoder call uses LOGPC everywhere, so we need to start the log somewhere... */
Pau Espin Pedrol20848c32020-03-23 17:13:20 +01005711 msg_type_name = get_value_string(rlcmac_ul_msg_names, data->u.MESSAGE_TYPE);
5712 LOGP(DCSN1, LOGL_INFO, "csnStreamEncoder (type: %s (%d)): ",
5713 msg_type_name, data->u.MESSAGE_TYPE);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005714 switch (data->u.MESSAGE_TYPE)
5715 {
5716 case MT_PACKET_CELL_CHANGE_FAILURE:
5717 {
5718 /*
5719 * data is the pointer to the unpack struct that hold the unpack value
5720 * CSNDESCR is an array that holds the different element types
5721 * ar is the csn context holding the bitcount, offset and output
5722 */
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005723 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_Cell_Change_Failure_t), vector, &writeIndex, &data->u.Packet_Cell_Change_Failure);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005724 break;
5725 }
5726 case MT_PACKET_CONTROL_ACK:
5727 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005728 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_Control_Acknowledgement_t), vector, &writeIndex, &data->u.Packet_Control_Acknowledgement);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005729 break;
5730 }
5731 case MT_PACKET_DOWNLINK_ACK_NACK:
5732 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005733 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_Downlink_Ack_Nack_t), vector, &writeIndex, &data->u.Packet_Downlink_Ack_Nack);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005734 break;
5735 }
5736 case MT_PACKET_UPLINK_DUMMY_CONTROL_BLOCK:
5737 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005738 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 +03005739 break;
5740 }
5741 case MT_PACKET_MEASUREMENT_REPORT:
5742 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005743 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_Measurement_Report_t), vector, &writeIndex, &data->u.Packet_Measurement_Report);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005744 break;
5745 }
5746 case MT_PACKET_RESOURCE_REQUEST:
5747 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005748 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_Resource_Request_t), vector, &writeIndex, &data->u.Packet_Resource_Request);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005749 break;
5750 }
5751
5752 case MT_PACKET_MOBILE_TBF_STATUS:
5753 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005754 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_Mobile_TBF_Status_t), vector, &writeIndex, &data->u.Packet_Mobile_TBF_Status);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005755 break;
5756 }
5757 case MT_PACKET_PSI_STATUS:
5758 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005759 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_PSI_Status_t), vector, &writeIndex, &data->u.Packet_PSI_Status);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005760 break;
5761 }
5762 case MT_EGPRS_PACKET_DOWNLINK_ACK_NACK:
5763 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005764 ret = csnStreamEncoder(&ar, CSNDESCR(EGPRS_PD_AckNack_t), vector, &writeIndex, &data->u.Egprs_Packet_Downlink_Ack_Nack);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005765 break;
5766 }
5767 case MT_PACKET_PAUSE:
5768 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005769 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_Pause_t), vector, &writeIndex, &data->u.Packet_Pause);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005770 break;
5771 }
5772 case MT_PACKET_ENHANCED_MEASUREMENT_REPORT:
5773 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005774 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_Enh_Measurement_Report_t), vector, &writeIndex, &data->u.Packet_Enh_Measurement_Report);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005775 break;
5776 }
5777 case MT_ADDITIONAL_MS_RAC:
5778 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005779 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 +03005780 break;
5781 }
5782 case MT_PACKET_CELL_CHANGE_NOTIFICATION:
5783 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005784 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_Cell_Change_Notification_t), vector, &writeIndex, &data->u.Packet_Cell_Change_Notification);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005785 break;
5786 }
5787 case MT_PACKET_SI_STATUS:
5788 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005789 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_SI_Status_t), vector, &writeIndex, &data->u.Packet_SI_Status);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005790 break;
5791 }
5792 default:
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01005793 ret = CSN_ERROR_GENERAL;
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005794 break;
5795 }
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01005796
Pau Espin Pedrolac2b8662020-02-03 18:58:24 +01005797 /* recursive csnStreamDecoder call uses LOGPC everywhere without trailing
5798 newline, so as a caller we are responisble for submitting it */
5799 LOGPC(DCSN1, LOGL_INFO, "\n");
5800
Vadim Yanitskiy773cb742020-03-06 08:26:16 +07005801 if (ret > 0 || ret == CSN_ERROR_NEED_MORE_BITS_TO_UNPACK) {
5802 LOGP(DRLCMACDATA, LOGL_ERROR, "Failed to encode an Uplink block: not enough bits "
5803 "in the output buffer (rc=%d)\n", ret);
5804 ret = CSN_ERROR_NEED_MORE_BITS_TO_UNPACK;
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01005805 }
5806
5807 return ret;
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005808}
5809
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01005810/* Returns 0 on success, negative on error. */
Pau Espin Pedrol007056e2020-03-26 15:03:33 +01005811int encode_gsm_rlcmac_downlink(struct bitvec *vector, RlcMacDownlink_t * data)
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005812{
5813 csnStream_t ar;
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01005814 int ret;
Pau Espin Pedrol20848c32020-03-23 17:13:20 +01005815 const char *msg_type_name;
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005816 /* See RLC/MAC downlink control block structure in TS 44.060 / 10.3.1 */
5817 gint bit_offset = 0;
5818 gint bit_length;
Ivan Kluchnikov9b06ff02012-06-15 10:13:30 +04005819 unsigned writeIndex = 0;
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005820
5821 if (data->PAYLOAD_TYPE == PAYLOAD_TYPE_DATA)
5822 {
Pau Espin Pedrolea9de4a2020-02-03 18:57:21 +01005823 LOGP(DRLCMACDATA, LOGL_NOTICE, "Payload Type: DATA (0), not implemented\n");
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01005824 return CSN_ERROR_GENERAL;
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005825 }
5826 else if (data->PAYLOAD_TYPE == PAYLOAD_TYPE_RESERVED)
5827 {
Pau Espin Pedrolea9de4a2020-02-03 18:57:21 +01005828 LOGP(DRLCMACDATA, LOGL_NOTICE, "Payload Type: RESERVED (3)\n");
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01005829 return CSN_ERROR_GENERAL;
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005830 }
Pau Espin Pedrolabba1022021-02-08 18:35:09 +01005831 /* We can encode the message */
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005832 else
5833 {
5834 /* First print the message type and create a tree item */
Alexander Couzensccde5c92017-02-04 03:10:08 +01005835 bitvec_write_field(vector, &writeIndex, data->PAYLOAD_TYPE, 2);
5836 bitvec_write_field(vector, &writeIndex, data->RRBP, 2);
5837 bitvec_write_field(vector, &writeIndex, data->SP, 1);
5838 bitvec_write_field(vector, &writeIndex, data->USF, 3);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005839 bit_offset = 8;
5840 if (data->PAYLOAD_TYPE == PAYLOAD_TYPE_CTRL_OPT_OCTET)
5841 {
Alexander Couzensccde5c92017-02-04 03:10:08 +01005842 bitvec_write_field(vector, &writeIndex, data->RBSN, 1);
5843 bitvec_write_field(vector, &writeIndex, data->RTI, 5);
5844 bitvec_write_field(vector, &writeIndex, data->FS, 1);
5845 bitvec_write_field(vector, &writeIndex, data->AC, 1);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005846 bit_offset += 8;
5847 if (data->AC == 1)
5848 {
Alexander Couzensccde5c92017-02-04 03:10:08 +01005849 bitvec_write_field(vector, &writeIndex, data->PR, 2);
5850 bitvec_write_field(vector, &writeIndex, data->TFI, 5);
5851 bitvec_write_field(vector, &writeIndex, data->D, 1);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005852 bit_offset += 8;
5853 }
5854 if ((data->RBSN == 1) && (data->FS == 0))
5855 {
Alexander Couzensccde5c92017-02-04 03:10:08 +01005856 bitvec_write_field(vector, &writeIndex, data->RBSNe, 3);
5857 bitvec_write_field(vector, &writeIndex, data->FSe, 1);
5858 bitvec_write_field(vector, &writeIndex, data->spare, 4);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005859 bit_offset += 8;
5860 }
5861 }
5862 }
5863
5864 /* Initialize the contexts */
5865 bit_length = 23*8 - bit_offset;
5866 data->NrOfBits = bit_length;
5867
5868 csnStreamInit(&ar, bit_offset, bit_length);
5869
Pau Espin Pedrolac2b8662020-02-03 18:58:24 +01005870
5871 /* recursive csnStreamEncoder call uses LOGPC everywhere, so we need to start the log somewhere... */
Pau Espin Pedrol20848c32020-03-23 17:13:20 +01005872 msg_type_name = get_value_string(rlcmac_dl_msg_names, data->u.MESSAGE_TYPE);
5873 LOGP(DCSN1, LOGL_INFO, "csnStreamEncoder (type: %s (%d)): ",
5874 msg_type_name, data->u.MESSAGE_TYPE);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005875 switch (data->u.MESSAGE_TYPE)
5876 {
5877 case MT_PACKET_ACCESS_REJECT:
5878 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005879 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_Access_Reject_t), vector, &writeIndex, &data->u.Packet_Access_Reject);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005880 break;
5881 }
5882 case MT_PACKET_CELL_CHANGE_ORDER:
5883 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005884 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_Cell_Change_Order_t), vector, &writeIndex, &data->u.Packet_Cell_Change_Order);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005885 break;
5886 }
5887 case MT_PACKET_CELL_CHANGE_CONTINUE:
5888 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005889 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_Cell_Change_Continue_t), vector, &writeIndex, &data->u.Packet_Cell_Change_Continue);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005890 break;
5891 }
5892 case MT_PACKET_DOWNLINK_ASSIGNMENT:
5893 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005894 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_Downlink_Assignment_t), vector, &writeIndex, &data->u.Packet_Downlink_Assignment);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005895 break;
5896 }
5897 case MT_PACKET_MEASUREMENT_ORDER:
5898 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005899 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_Measurement_Order_t), vector, &writeIndex, &data->u.Packet_Measurement_Order);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005900 break;
5901 }
5902 case MT_PACKET_NEIGHBOUR_CELL_DATA:
5903 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005904 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_Neighbour_Cell_Data_t), vector, &writeIndex, &data->u.Packet_Neighbour_Cell_Data);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005905 break;
5906 }
5907 case MT_PACKET_SERVING_CELL_DATA:
5908 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005909 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_Serving_Cell_Data_t), vector, &writeIndex, &data->u.Packet_Serving_Cell_Data);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005910 break;
5911 }
5912 case MT_PACKET_PAGING_REQUEST:
5913 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005914 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_Paging_Request_t), vector, &writeIndex, &data->u.Packet_Paging_Request);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005915 break;
5916 }
5917 case MT_PACKET_PDCH_RELEASE:
5918 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005919 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_PDCH_Release_t), vector, &writeIndex, &data->u.Packet_PDCH_Release);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005920 break;
5921 }
5922 case MT_PACKET_POLLING_REQ:
5923 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005924 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_Polling_Request_t), vector, &writeIndex, &data->u.Packet_Polling_Request);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005925 break;
5926 }
5927 case MT_PACKET_POWER_CONTROL_TIMING_ADVANCE:
5928 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005929 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 +03005930 break;
5931 }
5932 case MT_PACKET_PRACH_PARAMETERS:
5933 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005934 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_PRACH_Parameters_t), vector, &writeIndex, &data->u.Packet_PRACH_Parameters);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005935 break;
5936 }
5937 case MT_PACKET_QUEUEING_NOTIFICATION:
5938 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005939 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_Queueing_Notification_t), vector, &writeIndex, &data->u.Packet_Queueing_Notification);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005940 break;
5941 }
5942 case MT_PACKET_TIMESLOT_RECONFIGURE:
5943 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005944 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_Timeslot_Reconfigure_t), vector, &writeIndex, &data->u.Packet_Timeslot_Reconfigure);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005945 break;
5946 }
5947 case MT_PACKET_TBF_RELEASE:
5948 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005949 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_TBF_Release_t), vector, &writeIndex, &data->u.Packet_TBF_Release);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005950 break;
5951 }
5952 case MT_PACKET_UPLINK_ACK_NACK:
5953 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005954 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_Uplink_Ack_Nack_t), vector, &writeIndex, &data->u.Packet_Uplink_Ack_Nack);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005955 break;
5956 }
5957 case MT_PACKET_UPLINK_ASSIGNMENT:
5958 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005959 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_Uplink_Assignment_t), vector, &writeIndex, &data->u.Packet_Uplink_Assignment);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005960 break;
5961 }
5962 case MT_PACKET_HANDOVER_COMMAND:
5963 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005964 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_Handover_Command_t), vector, &writeIndex, &data->u.Packet_Handover_Command);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005965 break;
5966 }
5967 case MT_PACKET_PHYSICAL_INFORMATION:
5968 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005969 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_PhysicalInformation_t), vector, &writeIndex, &data->u.Packet_Handover_Command);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005970 break;
5971 }
5972 case MT_PACKET_DOWNLINK_DUMMY_CONTROL_BLOCK:
5973 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005974 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 +03005975 break;
5976 }
5977 case MT_PACKET_SYSTEM_INFO_1:
5978 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005979 ret = csnStreamEncoder(&ar, CSNDESCR(PSI1_t), vector, &writeIndex, &data->u.PSI1);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005980 break;
5981 }
5982 case MT_PACKET_SYSTEM_INFO_2:
5983 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005984 ret = csnStreamEncoder(&ar, CSNDESCR(PSI2_t), vector, &writeIndex, &data->u.PSI2);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005985 break;
5986 }
5987 case MT_PACKET_SYSTEM_INFO_3:
5988 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005989 ret = csnStreamEncoder(&ar, CSNDESCR(PSI3_t), vector, &writeIndex, &data->u.PSI3);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005990 break;
5991 }
5992 case MT_PACKET_SYSTEM_INFO_5:
5993 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005994 ret = csnStreamEncoder(&ar, CSNDESCR(PSI5_t), vector, &writeIndex, &data->u.PSI5);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005995 break;
5996 }
5997 case MT_PACKET_SYSTEM_INFO_13:
5998 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005999 ret = csnStreamEncoder(&ar, CSNDESCR(PSI13_t), vector, &writeIndex, &data->u.PSI13);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03006000 break;
6001 }
6002 default:
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01006003 ret = -1;
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03006004 break;
6005 }
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01006006
Pau Espin Pedrolac2b8662020-02-03 18:58:24 +01006007 /* recursive csnStreamDecoder call uses LOGPC everywhere without trailing
6008 newline, so as a caller we are responisble for submitting it */
6009 LOGPC(DCSN1, LOGL_INFO, "\n");
6010
Vadim Yanitskiy773cb742020-03-06 08:26:16 +07006011 if (ret > 0 || ret == CSN_ERROR_NEED_MORE_BITS_TO_UNPACK) {
6012 LOGP(DRLCMACDATA, LOGL_ERROR, "Failed to encode a Downlink block: not enough bits "
6013 "in the output buffer (rc=%d)\n", ret);
6014 ret = CSN_ERROR_NEED_MORE_BITS_TO_UNPACK;
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01006015 }
6016
6017 return ret;
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03006018}
Ivan Kluchnikovd5f01332012-02-05 01:41:25 +04006019
Pau Espin Pedrol007056e2020-03-26 15:03:33 +01006020void decode_gsm_rlcmac_uplink_data(struct bitvec *vector, RlcMacUplinkDataBlock_t * data)
Ivan Kluchnikovd5f01332012-02-05 01:41:25 +04006021{
Pau Espin Pedrol24fa2742020-03-26 15:11:59 +01006022 unsigned i;
Ivan Kluchnikov9b06ff02012-06-15 10:13:30 +04006023 unsigned readIndex = 0;
Ivan Kluchnikovd5f01332012-02-05 01:41:25 +04006024 //unsigned dataLen = 0;
Alexander Couzensccde5c92017-02-04 03:10:08 +01006025 guint8 payload_type = bitvec_read_field(vector, &readIndex, 2);
Ivan Kluchnikovd5f01332012-02-05 01:41:25 +04006026 if (payload_type == PAYLOAD_TYPE_DATA)
6027 {
6028 readIndex = 0;
6029 // MAC header
Alexander Couzensccde5c92017-02-04 03:10:08 +01006030 data->PAYLOAD_TYPE = bitvec_read_field(vector, &readIndex, 2);
6031 data->CV = bitvec_read_field(vector, &readIndex, 4);
6032 data->SI = bitvec_read_field(vector, &readIndex, 1);
6033 data->R = bitvec_read_field(vector, &readIndex, 1);
Ivan Kluchnikova9f1ff22012-05-24 22:25:06 +04006034 LOGPC(DRLCMACDATA, LOGL_NOTICE, "PAYLOAD_TYPE = %u ", (unsigned)(data->PAYLOAD_TYPE));
6035 LOGPC(DRLCMACDATA, LOGL_NOTICE, "CV = %u ", (unsigned)(data->CV));
6036 LOGPC(DRLCMACDATA, LOGL_NOTICE, "SI = %u ", (unsigned)(data->SI));
6037 LOGPC(DRLCMACDATA, LOGL_NOTICE, "R = %u ", (unsigned)(data->R));
Ivan Kluchnikovd5f01332012-02-05 01:41:25 +04006038 // Octet 1
Alexander Couzensccde5c92017-02-04 03:10:08 +01006039 data->spare = bitvec_read_field(vector, &readIndex, 1);
6040 data->PI = bitvec_read_field(vector, &readIndex, 1);
6041 data->TFI = bitvec_read_field(vector, &readIndex, 5);
6042 data->TI = bitvec_read_field(vector, &readIndex, 1);
Ivan Kluchnikova9f1ff22012-05-24 22:25:06 +04006043 LOGPC(DRLCMACDATA, LOGL_NOTICE, "spare = %u ", (unsigned)(data->spare));
6044 LOGPC(DRLCMACDATA, LOGL_NOTICE, "PI = %u ", (unsigned)(data->PI));
6045 LOGPC(DRLCMACDATA, LOGL_NOTICE, "TFI = %u ", (unsigned)(data->TFI));
6046 LOGPC(DRLCMACDATA, LOGL_NOTICE, "TI = %u ", (unsigned)(data->TI));
Ivan Kluchnikovd5f01332012-02-05 01:41:25 +04006047
6048 // Octet 2
Alexander Couzensccde5c92017-02-04 03:10:08 +01006049 data->BSN = bitvec_read_field(vector, &readIndex, 7);
6050 data->E_1 = bitvec_read_field(vector, &readIndex, 1);
Ivan Kluchnikova9f1ff22012-05-24 22:25:06 +04006051 LOGPC(DRLCMACDATA, LOGL_NOTICE, "BSN = %u ", (unsigned)(data->BSN));
6052 LOGPC(DRLCMACDATA, LOGL_NOTICE, "E_1 = %u ", (unsigned)(data->E_1));
6053
Ivan Kluchnikovd5f01332012-02-05 01:41:25 +04006054
Pau Espin Pedrol16705a42020-10-27 10:24:57 +01006055 if (data->E_1 == 0) // Extension octet follows immediately
Ivan Kluchnikovd5f01332012-02-05 01:41:25 +04006056 {
6057 // Octet 3 (optional)
Pau Espin Pedrol24fa2742020-03-26 15:11:59 +01006058 i = 0;
Ivan Kluchnikovd5f01332012-02-05 01:41:25 +04006059 do
6060 {
Alexander Couzensccde5c92017-02-04 03:10:08 +01006061 data->LENGTH_INDICATOR[i] = bitvec_read_field(vector, &readIndex, 6);
6062 data->M[i] = bitvec_read_field(vector, &readIndex, 1);
6063 data->E[i] = bitvec_read_field(vector, &readIndex, 1);
Ivan Kluchnikova9f1ff22012-05-24 22:25:06 +04006064 LOGPC(DRLCMACDATA, LOGL_NOTICE, "LENGTH_INDICATOR[%u] = %u ", i, (unsigned)(data->LENGTH_INDICATOR[i]));
6065 LOGPC(DRLCMACDATA, LOGL_NOTICE, "M[%u] = %u ", i, (unsigned)(data->M[i]));
6066 LOGPC(DRLCMACDATA, LOGL_NOTICE, "E[%u] = %u ", i, (unsigned)(data->E[i]));
Ivan Kluchnikovd5f01332012-02-05 01:41:25 +04006067 i++;
6068 } while((data->M[i-1] == 1)&&(data->E[i-1] == 0));
6069 }
Pau Espin Pedrol16705a42020-10-27 10:24:57 +01006070 if (data->TI == 1) // TLLI field is present
Ivan Kluchnikovd5f01332012-02-05 01:41:25 +04006071 {
Alexander Couzensccde5c92017-02-04 03:10:08 +01006072 data->TLLI = bitvec_read_field(vector, &readIndex, 32);
Ivan Kluchnikova9f1ff22012-05-24 22:25:06 +04006073 LOGPC(DRLCMACDATA, LOGL_NOTICE, "TLLI = %08x ", data->TLLI);
Ivan Kluchnikovd5f01332012-02-05 01:41:25 +04006074 if (data->PI == 1) // PFI is present if TI field indicates presence of TLLI
6075 {
Alexander Couzensccde5c92017-02-04 03:10:08 +01006076 data->PFI = bitvec_read_field(vector, &readIndex, 7);
6077 data->E_2 = bitvec_read_field(vector, &readIndex, 1);
Ivan Kluchnikova9f1ff22012-05-24 22:25:06 +04006078 LOGPC(DRLCMACDATA, LOGL_NOTICE, "PFI = %u ", (unsigned)(data->PFI));
6079 LOGPC(DRLCMACDATA, LOGL_NOTICE, "E_2 = %u ", (unsigned)(data->E_2));
Ivan Kluchnikovd5f01332012-02-05 01:41:25 +04006080 }
6081 }
6082 unsigned dataLen = 23 - readIndex/8;
Ivan Kluchnikova9f1ff22012-05-24 22:25:06 +04006083 LOGPC(DRLCMACDATA, LOGL_NOTICE, "DATA[%u] = ", dataLen);
Ivan Kluchnikov1b517342013-12-30 14:26:06 +04006084 assert(dataLen <= 20);
Pau Espin Pedrol24fa2742020-03-26 15:11:59 +01006085 for (i = 0; i < dataLen; i++)
Ivan Kluchnikovd5f01332012-02-05 01:41:25 +04006086 {
Alexander Couzensccde5c92017-02-04 03:10:08 +01006087 data->RLC_DATA[i] = bitvec_read_field(vector, &readIndex, 8);
Ivan Kluchnikova9f1ff22012-05-24 22:25:06 +04006088 LOGPC(DRLCMACDATA, LOGL_NOTICE, "%02x", (unsigned)(data->RLC_DATA[i]));
Ivan Kluchnikovd5f01332012-02-05 01:41:25 +04006089 }
Ivan Kluchnikova9f1ff22012-05-24 22:25:06 +04006090 LOGPC(DRLCMACDATA, LOGL_NOTICE, "\n");
Ivan Kluchnikovd5f01332012-02-05 01:41:25 +04006091 }
6092 else
6093 {
Pau Espin Pedrolea9de4a2020-02-03 18:57:21 +01006094 LOGP(DRLCMACDATA, LOGL_NOTICE, "Payload Type: RESERVED (3)\n");
Ivan Kluchnikovd5f01332012-02-05 01:41:25 +04006095 return;
6096 }
6097}
Ivan Kluchnikov92ac6372012-02-20 15:04:25 +04006098
Pau Espin Pedrol007056e2020-03-26 15:03:33 +01006099void encode_gsm_rlcmac_downlink_data(struct bitvec *vector, RlcMacDownlinkDataBlock_t * data)
Ivan Kluchnikov92ac6372012-02-20 15:04:25 +04006100{
Pau Espin Pedrol24fa2742020-03-26 15:11:59 +01006101 unsigned i;
Ivan Kluchnikov9b06ff02012-06-15 10:13:30 +04006102 unsigned writeIndex = 0;
Ivan Kluchnikov92ac6372012-02-20 15:04:25 +04006103
6104 if (data->PAYLOAD_TYPE == PAYLOAD_TYPE_DATA)
6105 {
6106 // MAC header
Alexander Couzensccde5c92017-02-04 03:10:08 +01006107 bitvec_write_field(vector, &writeIndex, data->PAYLOAD_TYPE, 2);
6108 bitvec_write_field(vector, &writeIndex, data->RRBP, 2);
6109 bitvec_write_field(vector, &writeIndex, data->SP, 1);
6110 bitvec_write_field(vector, &writeIndex, data->USF, 3);
Ivan Kluchnikova9f1ff22012-05-24 22:25:06 +04006111 LOGPC(DRLCMACDATA, LOGL_NOTICE, "PAYLOAD_TYPE = %u ", (unsigned)(data->PAYLOAD_TYPE));
6112 LOGPC(DRLCMACDATA, LOGL_NOTICE, "RRBP = %u ", (unsigned)(data->RRBP));
6113 LOGPC(DRLCMACDATA, LOGL_NOTICE, "SP = %u ", (unsigned)(data->SP));
6114 LOGPC(DRLCMACDATA, LOGL_NOTICE, "USF = %u ", (unsigned)(data->USF));
Pau Espin Pedrol034e32f2020-01-28 17:14:26 +01006115
Ivan Kluchnikov92ac6372012-02-20 15:04:25 +04006116 // Octet 1
Alexander Couzensccde5c92017-02-04 03:10:08 +01006117 bitvec_write_field(vector, &writeIndex, data->PR, 2);
6118 bitvec_write_field(vector, &writeIndex, data->TFI, 5);
6119 bitvec_write_field(vector, &writeIndex, data->FBI, 1);
Ivan Kluchnikova9f1ff22012-05-24 22:25:06 +04006120 LOGPC(DRLCMACDATA, LOGL_NOTICE, "PR = %u ", (unsigned)(data->PR));
6121 LOGPC(DRLCMACDATA, LOGL_NOTICE, "TFI = %u ", (unsigned)(data->TFI));
6122 LOGPC(DRLCMACDATA, LOGL_NOTICE, "FBI = %u ", (unsigned)(data->FBI));
6123
Ivan Kluchnikov92ac6372012-02-20 15:04:25 +04006124 // Octet 2
Alexander Couzensccde5c92017-02-04 03:10:08 +01006125 bitvec_write_field(vector, &writeIndex, data->BSN, 7);
6126 bitvec_write_field(vector, &writeIndex, data->E_1, 1);
Ivan Kluchnikova9f1ff22012-05-24 22:25:06 +04006127 LOGPC(DRLCMACDATA, LOGL_NOTICE, "BSN = %u ", (unsigned)(data->BSN));
6128 LOGPC(DRLCMACDATA, LOGL_NOTICE, "E_1 = %u ", (unsigned)(data->E_1));
6129
Ivan Kluchnikov92ac6372012-02-20 15:04:25 +04006130 // Octet 3 (optional)
Pau Espin Pedrol16705a42020-10-27 10:24:57 +01006131 if (data->E_1 == 0)
Ivan Kluchnikov92ac6372012-02-20 15:04:25 +04006132 {
Pau Espin Pedrol24fa2742020-03-26 15:11:59 +01006133 i = 0;
Ivan Kluchnikov92ac6372012-02-20 15:04:25 +04006134 do
6135 {
Alexander Couzensccde5c92017-02-04 03:10:08 +01006136 bitvec_write_field(vector, &writeIndex, data->LENGTH_INDICATOR[i], 6);
6137 bitvec_write_field(vector, &writeIndex, data->M[i], 1);
6138 bitvec_write_field(vector, &writeIndex, data->E[i], 1);
Ivan Kluchnikova9f1ff22012-05-24 22:25:06 +04006139 LOGPC(DRLCMACDATA, LOGL_NOTICE, "LENGTH_INDICATOR[%u] = %u ", i, (unsigned)(data->LENGTH_INDICATOR[i]));
6140 LOGPC(DRLCMACDATA, LOGL_NOTICE, "M[%u] = %u ", i, (unsigned)(data->M[i]));
6141 LOGPC(DRLCMACDATA, LOGL_NOTICE, "E[%u] = %u ", i, (unsigned)(data->E[i]));
Ivan Kluchnikov92ac6372012-02-20 15:04:25 +04006142 i++;
6143 }
6144 while ((data->M[i-1] == 1) && (data->E[i-1] == 0));
6145 }
6146 unsigned dataNumOctets = 23 - writeIndex/8;
Ivan Kluchnikova9f1ff22012-05-24 22:25:06 +04006147 LOGPC(DRLCMACDATA, LOGL_NOTICE, "DATA[%u] = ", dataNumOctets);
Ivan Kluchnikov1b517342013-12-30 14:26:06 +04006148 assert(dataNumOctets <= 20);
Pau Espin Pedrol24fa2742020-03-26 15:11:59 +01006149 for (i = 0; i < dataNumOctets; i++)
Ivan Kluchnikov92ac6372012-02-20 15:04:25 +04006150 {
Alexander Couzensccde5c92017-02-04 03:10:08 +01006151 bitvec_write_field(vector, &writeIndex, data->RLC_DATA[i], 8);
Ivan Kluchnikova9f1ff22012-05-24 22:25:06 +04006152 LOGPC(DRLCMACDATA, LOGL_NOTICE, "%02x", (unsigned)(data->RLC_DATA[i]));
Ivan Kluchnikov92ac6372012-02-20 15:04:25 +04006153 }
Ivan Kluchnikova9f1ff22012-05-24 22:25:06 +04006154 LOGPC(DRLCMACDATA, LOGL_NOTICE, "\n");
Ivan Kluchnikov92ac6372012-02-20 15:04:25 +04006155 }
6156}
Jacob Erlbeck0df80be2016-01-20 12:14:55 +01006157
Pau Espin Pedrol007056e2020-03-26 15:03:33 +01006158int decode_gsm_ra_cap(struct bitvec *vector, MS_Radio_Access_capability_t *data)
Jacob Erlbeck0df80be2016-01-20 12:14:55 +01006159{
6160 csnStream_t ar;
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01006161 int ret;
Jacob Erlbeck0df80be2016-01-20 12:14:55 +01006162 unsigned readIndex = 0;
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01006163
Jacob Erlbeck0df80be2016-01-20 12:14:55 +01006164 csnStreamInit(&ar, 0, 8 * vector->data_len);
Pau Espin Pedrolac2b8662020-02-03 18:58:24 +01006165
Pau Espin Pedrol9f43c652021-10-19 14:20:11 +02006166 /* recursive csnStreamDecoder call uses LOGPC everywhere, so we need to start the log somewhere... */
Vadim Yanitskiye60d9c72020-02-18 05:30:57 +07006167 LOGP(DCSN1, LOGL_INFO, "csnStreamDecoder (RAcap): ");
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07006168 ret = csnStreamDecoder(&ar, CSNDESCR(MS_Radio_Access_capability_t), vector, &readIndex, data);
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01006169
Pau Espin Pedrolac2b8662020-02-03 18:58:24 +01006170 /* recursive csnStreamDecoder call uses LOGPC everywhere without trailing
6171 newline, so as a caller we are responisble for submitting it */
6172 LOGPC(DCSN1, LOGL_INFO, "\n");
6173
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01006174 if (ret > 0) {
Pau Espin Pedrol20848c32020-03-23 17:13:20 +01006175 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 +01006176 ret = 0;
6177 }
6178 return ret;
Jacob Erlbeck0df80be2016-01-20 12:14:55 +01006179}
Vadim Yanitskiyb47e53b2020-02-20 04:33:50 +07006180
6181/* This function is not actually used by osmo-pcu itself, and only needed for
6182 * the RLCMAC unit test. Having it here is better than making the internal
6183 * CSN.1 definitions (in particular, MS_Radio_Access_capability_t) non-static. */
Pau Espin Pedrol007056e2020-03-26 15:03:33 +01006184int encode_gsm_ra_cap(struct bitvec *vector, MS_Radio_Access_capability_t *data)
Vadim Yanitskiyb47e53b2020-02-20 04:33:50 +07006185{
6186 unsigned writeIndex = 0;
6187 csnStream_t ar;
6188 int ret;
6189
6190 csnStreamInit(&ar, 0, vector->data_len * 8);
6191
6192 /* recursive csnStreamEncoder call uses LOGPC everywhere, so we need to start the log somewhere... */
6193 LOGP(DCSN1, LOGL_INFO, "csnStreamEncoder (RAcap): ");
6194 ret = csnStreamEncoder(&ar, CSNDESCR(MS_Radio_Access_capability_t), vector, &writeIndex, data);
6195 LOGPC(DCSN1, LOGL_INFO, "\n");
6196
Vadim Yanitskiy773cb742020-03-06 08:26:16 +07006197 if (ret > 0 || ret == CSN_ERROR_NEED_MORE_BITS_TO_UNPACK) {
6198 LOGP(DRLCMACDATA, LOGL_ERROR, "Failed to encode MS RA Capability IE: not enough bits "
6199 "in the output buffer (rc=%d)\n", ret);
6200 ret = CSN_ERROR_NEED_MORE_BITS_TO_UNPACK;
Vadim Yanitskiyb47e53b2020-02-20 04:33:50 +07006201 }
6202
6203 return ret;
6204}
Vadim Yanitskiya2d972a2020-04-04 03:44:35 +07006205
6206struct value_string egprs_pkt_ch_req_type_names[] = {
6207 { EGPRS_PKT_CHAN_REQ_ONE_PHASE, "One Phase Access" },
6208 { EGPRS_PKT_CHAN_REQ_SHORT, "Short Access" },
6209 { EGPRS_PKT_CHAN_REQ_ONE_PHASE_RED_LATENCY, "One Phase Access (Reduced Latency MS)" },
6210 { EGPRS_PKT_CHAN_REQ_TWO_PHASE, "Two Phase Access" },
6211 { EGPRS_PKT_CHAN_REQ_SIGNALLING, "Signalling" },
6212 { EGPRS_PKT_CHAN_REQ_ONE_PHASE_UNACK, "One Phase Access (RLC unack mode)" },
6213 { EGPRS_PKT_CHAN_REQ_DEDICATED_CHANNEL, "Dedicated Channel Request" },
6214 { EGPRS_PKT_CHAN_REQ_EMERGENCY_CALL, "Emergency call" },
6215 { EGPRS_PKT_CHAN_REQ_TWO_PHASE_IPA, "Two Phase Access (by IPA capable MS)" },
6216 { EGPRS_PKT_CHAN_REQ_SIGNALLING_IPA, "Signalling (by IPA capable MS)" },
6217 { 0, NULL }
6218};
6219
6220int decode_egprs_pkt_ch_req(guint16 ra, EGPRS_PacketChannelRequest_t *req)
6221{
6222 unsigned readIndex = 0;
6223 guint8 bv_data[2];
6224 csnStream_t ar;
6225 int ret;
6226
6227 /* Allocate a bitvector on stack */
6228 struct bitvec bv = {
6229 .cur_bit = 0,
6230 .data_len = 2,
6231 .data = bv_data,
6232 };
6233
6234 /* Unpack the bits: xxxxxxxx xxx..... */
6235 bv_data[0] = (guint8) (ra >> 3);
6236 bv_data[1] = (guint8) ((ra & 0x07) << 5);
6237
6238 csnStreamInit(&ar, 0, 11);
6239
6240 /* Recursive csnStreamDecoder call uses LOGPC everywhere, so we need to start the log somewhere... */
6241 LOGP(DCSN1, LOGL_DEBUG, "csnStreamDecoder (EGPRS Packet Channel Request): ");
6242 ret = csnStreamDecoder(&ar, CSNDESCR(EGPRS_PacketChannelRequest_t),
6243 &bv, &readIndex, (void *) req);
6244 LOGPC(DCSN1, LOGL_DEBUG, "\n");
6245
6246 return ret;
6247}