blob: a3342cb64ba351c6160bc9307c3c48000b7d8c6f [file] [log] [blame]
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001/* gsm_rlcmac.c
2 * Routines for GSM RLC MAC control plane message dissection in wireshark.
3 * TS 44.060 and 24.008
4 *
5 * Copyright (C) 2011 Ivan Klyuchnikov
6 *
7 * By Vincent Helfre, based on original code by Jari Sassi
8 * with the gracious authorization of STE
9 * Copyright (c) 2011 ST-Ericsson
10 *
11 * $Id: packet-gsm_rlcmac.c 39164 2011-09-27 12:05:32Z etxrab $
12 *
13 * Wireshark - Network traffic analyzer
14 * By Gerald Combs <gerald@wireshark.org>
15 * Copyright 1998 Gerald Combs
16 *
17 * This program is free software; you can redistribute it and/or
18 * modify it under the terms of the GNU General Public License
19 * as published by the Free Software Foundation; either version 2
20 * of the License, or (at your option) any later version.
21 *
22 * This program is distributed in the hope that it will be useful,
23 * but WITHOUT ANY WARRANTY; without even the implied warranty of
24 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
25 * GNU General Public License for more details.
26 *
27 * You should have received a copy of the GNU General Public License
28 * along with this program; if not, write to the Free Software
29 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
30 */
31
Pau Espin Pedrol20848c32020-03-23 17:13:20 +010032#include <osmocom/core/utils.h>
Pau Espin Pedrolb2653fe2020-03-26 15:14:01 +010033#include <osmocom/core/bitvec.h>
Pau Espin Pedrol20848c32020-03-23 17:13:20 +010034
Ivan Kluchnikov487a1412011-12-21 13:17:53 +030035#include "gsm_rlcmac.h"
Pau Espin Pedrolb2653fe2020-03-26 15:14:01 +010036#include "csn1.h"
Ivan Kluchnikov487a1412011-12-21 13:17:53 +030037/* Initialize the protocol and registered fields
38*/
Ivan Kluchnikov1b517342013-12-30 14:26:06 +040039#include <assert.h>
Pau Espin Pedrolf3ac06b2020-03-26 18:13:19 +010040#include <arpa/inet.h>
Ivan Kluchnikova9f1ff22012-05-24 22:25:06 +040041#include <gprs_debug.h>
Ivan Kluchnikov487a1412011-12-21 13:17:53 +030042
43/* Payload type as defined in TS 44.060 / 10.4.7 */
44#define PAYLOAD_TYPE_DATA 0
45#define PAYLOAD_TYPE_CTRL_NO_OPT_OCTET 1
46#define PAYLOAD_TYPE_CTRL_OPT_OCTET 2
47#define PAYLOAD_TYPE_RESERVED 3
48
49/* CSN1 structures */
50/*(not all parts of CSN_DESCR structure are always initialized.)*/
51static const
52CSN_DESCR_BEGIN(PLMN_t)
53 M_UINT (PLMN_t, MCC2, 4),
54 M_UINT (PLMN_t, MCC1, 4),
55 M_UINT (PLMN_t, MNC3, 4),
56 M_UINT (PLMN_t, MCC3, 4),
57 M_UINT (PLMN_t, MNC2, 4),
58 M_UINT (PLMN_t, MNC1, 4),
59CSN_DESCR_END (PLMN_t)
60
61static const
62CSN_DESCR_BEGIN(StartingTime_t)
63 M_UINT (StartingTime_t, N32, 5),
64 M_UINT (StartingTime_t, N51, 6),
65 M_UINT (StartingTime_t, N26, 5),
66CSN_DESCR_END (StartingTime_t)
67
68/*< Global TFI IE >*/
69static const
70CSN_DESCR_BEGIN(Global_TFI_t)
71 M_UNION (Global_TFI_t, 2),
72 M_UINT (Global_TFI_t, u.UPLINK_TFI, 5),
73 M_UINT (Global_TFI_t, u.DOWNLINK_TFI, 5),
74CSN_DESCR_END (Global_TFI_t)
75
76/*< Starting Frame Number Description IE >*/
77static const
78CSN_DESCR_BEGIN(Starting_Frame_Number_t)
79 M_UNION (Starting_Frame_Number_t, 2),
80 M_TYPE (Starting_Frame_Number_t, u.StartingTime, StartingTime_t),
81 M_UINT (Starting_Frame_Number_t, u.k, 13),
82CSN_DESCR_END(Starting_Frame_Number_t)
83
84/*< Ack/Nack Description IE >*/
85static const
86CSN_DESCR_BEGIN(Ack_Nack_Description_t)
87 M_UINT (Ack_Nack_Description_t, FINAL_ACK_INDICATION, 1),
88 M_UINT (Ack_Nack_Description_t, STARTING_SEQUENCE_NUMBER, 7),
89 M_BITMAP (Ack_Nack_Description_t, RECEIVED_BLOCK_BITMAP, 64),
90CSN_DESCR_END (Ack_Nack_Description_t)
91
92/*< Packet Timing Advance IE >*/
93static const
94CSN_DESCR_BEGIN(Packet_Timing_Advance_t)
95 M_NEXT_EXIST (Packet_Timing_Advance_t, Exist_TIMING_ADVANCE_VALUE, 1),
96 M_UINT (Packet_Timing_Advance_t, TIMING_ADVANCE_VALUE, 6),
97
98 M_NEXT_EXIST (Packet_Timing_Advance_t, Exist_IndexAndtimeSlot, 2),
99 M_UINT (Packet_Timing_Advance_t, TIMING_ADVANCE_INDEX, 4),
100 M_UINT (Packet_Timing_Advance_t, TIMING_ADVANCE_TIMESLOT_NUMBER, 3),
101CSN_DESCR_END (Packet_Timing_Advance_t)
102
103/*< Power Control Parameters IE >*/
104static const
105CSN_DESCR_BEGIN(GPRS_Power_Control_Parameters_t)
106 M_UINT (GPRS_Power_Control_Parameters_t, ALPHA, 4),
107 M_UINT (GPRS_Power_Control_Parameters_t, T_AVG_W, 5),
108 M_UINT (GPRS_Power_Control_Parameters_t, T_AVG_T, 5),
Anders Broman8ea3cbe2020-01-28 17:36:33 +0100109 M_UINT (GPRS_Power_Control_Parameters_t, PC_MEAS_CHAN, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300110 M_UINT (GPRS_Power_Control_Parameters_t, N_AVG_I, 4),
111CSN_DESCR_END (GPRS_Power_Control_Parameters_t)
112
113/*< Global Power Control Parameters IE >*/
114static const
115CSN_DESCR_BEGIN(Global_Power_Control_Parameters_t)
116 M_UINT (Global_Power_Control_Parameters_t, ALPHA, 4),
117 M_UINT (Global_Power_Control_Parameters_t, T_AVG_W, 5),
118 M_UINT (Global_Power_Control_Parameters_t, T_AVG_T, 5),
119 M_UINT (Global_Power_Control_Parameters_t, Pb, 4),
120 M_UINT (Global_Power_Control_Parameters_t, PC_MEAS_CHAN, 1),
121 M_UINT (Global_Power_Control_Parameters_t, INT_MEAS_CHANNEL_LIST_AVAIL, 1),
122 M_UINT (Global_Power_Control_Parameters_t, N_AVG_I, 4),
123CSN_DESCR_END (Global_Power_Control_Parameters_t)
124
125/*< Global Packet Timing Advance IE >*/
126static const
127CSN_DESCR_BEGIN(Global_Packet_Timing_Advance_t)
128 M_NEXT_EXIST (Global_Packet_Timing_Advance_t, Exist_TIMING_ADVANCE_VALUE, 1),
129 M_UINT (Global_Packet_Timing_Advance_t, TIMING_ADVANCE_VALUE, 6),
130
131 M_NEXT_EXIST (Global_Packet_Timing_Advance_t, Exist_UPLINK_TIMING_ADVANCE, 2),
132 M_UINT (Global_Packet_Timing_Advance_t, UPLINK_TIMING_ADVANCE_INDEX, 4),
133 M_UINT (Global_Packet_Timing_Advance_t, UPLINK_TIMING_ADVANCE_TIMESLOT_NUMBER, 3),
134
135 M_NEXT_EXIST (Global_Packet_Timing_Advance_t, Exist_DOWNLINK_TIMING_ADVANCE, 2),
136 M_UINT (Global_Packet_Timing_Advance_t, DOWNLINK_TIMING_ADVANCE_INDEX, 4),
137 M_UINT (Global_Packet_Timing_Advance_t, DOWNLINK_TIMING_ADVANCE_TIMESLOT_NUMBER, 3),
138CSN_DESCR_END (Global_Packet_Timing_Advance_t)
139
140/*< Channel Quality Report struct >*/
141static const
142CSN_DESCR_BEGIN(Channel_Quality_Report_t)
143 M_UINT (Channel_Quality_Report_t, C_VALUE, 6),
144 M_UINT (Channel_Quality_Report_t, RXQUAL, 3),
145 M_UINT (Channel_Quality_Report_t, SIGN_VAR, 6),
146
147 M_NEXT_EXIST (Channel_Quality_Report_t, Slot[0].Exist, 1),
148 M_UINT (Channel_Quality_Report_t, Slot[0].I_LEVEL_TN, 4),
149
150 M_NEXT_EXIST (Channel_Quality_Report_t, Slot[1].Exist, 1),
151 M_UINT (Channel_Quality_Report_t, Slot[1].I_LEVEL_TN, 4),
152
153 M_NEXT_EXIST (Channel_Quality_Report_t, Slot[2].Exist, 1),
154 M_UINT (Channel_Quality_Report_t, Slot[2].I_LEVEL_TN, 4),
155
156 M_NEXT_EXIST (Channel_Quality_Report_t, Slot[3].Exist, 1),
157 M_UINT (Channel_Quality_Report_t, Slot[3].I_LEVEL_TN, 4),
158
159 M_NEXT_EXIST (Channel_Quality_Report_t, Slot[4].Exist, 1),
160 M_UINT (Channel_Quality_Report_t, Slot[4].I_LEVEL_TN, 4),
161
162 M_NEXT_EXIST (Channel_Quality_Report_t, Slot[5].Exist, 1),
163 M_UINT (Channel_Quality_Report_t, Slot[5].I_LEVEL_TN, 4),
164
165 M_NEXT_EXIST (Channel_Quality_Report_t, Slot[6].Exist, 1),
166 M_UINT (Channel_Quality_Report_t, Slot[6].I_LEVEL_TN, 4),
167
168 M_NEXT_EXIST (Channel_Quality_Report_t, Slot[7].Exist, 1),
169 M_UINT (Channel_Quality_Report_t, Slot[7].I_LEVEL_TN, 4),
170CSN_DESCR_END (Channel_Quality_Report_t)
171
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400172/*< EGPRS Ack/Nack Description struct >*/
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300173static const
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400174CSN_DESCR_BEGIN (EGPRS_AckNack_Desc_t)
175 M_UINT (EGPRS_AckNack_Desc_t, FINAL_ACK_INDICATION, 1),
176 M_UINT (EGPRS_AckNack_Desc_t, BEGINNING_OF_WINDOW, 1),
177 M_UINT (EGPRS_AckNack_Desc_t, END_OF_WINDOW, 1),
178 M_UINT (EGPRS_AckNack_Desc_t, STARTING_SEQUENCE_NUMBER, 11),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300179
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400180 M_NEXT_EXIST (EGPRS_AckNack_Desc_t, Exist_CRBB, 3),
181 M_UINT (EGPRS_AckNack_Desc_t, CRBB_LENGTH, 7),
182 M_UINT (EGPRS_AckNack_Desc_t, CRBB_STARTING_COLOR_CODE, 1),
183 M_LEFT_VAR_BMP (EGPRS_AckNack_Desc_t, CRBB, CRBB_LENGTH, 0),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300184
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400185 M_LEFT_VAR_BMP_1(EGPRS_AckNack_Desc_t, URBB, URBB_LENGTH, 0),
186CSN_DESCR_END (EGPRS_AckNack_Desc_t)
187
188/*< EGPRS Ack/Nack Description IE >*/
Pau Espin Pedrol007056e2020-03-26 15:03:33 +0100189gint16 Egprs_Ack_Nack_Desc_w_len_Dissector(csnStream_t* ar, struct bitvec *vector, unsigned *readIndex, void* data)
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400190{
191 if (ar->direction == 0)
192 {
193 return csnStreamEncoder(ar, CSNDESCR(EGPRS_AckNack_Desc_t), vector, readIndex, data);
194 }
195 else
196 {
197 return csnStreamDecoder(ar, CSNDESCR(EGPRS_AckNack_Desc_t), vector, readIndex, data);
198 }
199}
200
201/* this intermediate structure is only required because M_SERIALIZE cannot be used as a member of M_UNION */
202static const
203CSN_DESCR_BEGIN(EGPRS_AckNack_w_len_t)
204 M_SERIALIZE (EGPRS_AckNack_w_len_t, Desc, 8, Egprs_Ack_Nack_Desc_w_len_Dissector),
205CSN_DESCR_END (EGPRS_AckNack_w_len_t)
206
207static const
208CSN_DESCR_BEGIN(EGPRS_AckNack_t)
209 M_UNION (EGPRS_AckNack_t, 2),
210 M_TYPE (EGPRS_AckNack_t, Desc, EGPRS_AckNack_Desc_t),
211 M_TYPE (EGPRS_AckNack_t, Desc, EGPRS_AckNack_w_len_t),
212CSN_DESCR_END (EGPRS_AckNack_t)
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300213
214/*<P1 Rest Octets>*/
215/*<P2 Rest Octets>*/
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100216#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300217static const
218CSN_DESCR_BEGIN(MobileAllocationIE_t)
219 M_UINT (MobileAllocationIE_t, Length, 8),
220 M_VAR_ARRAY (MobileAllocationIE_t, MA, Length, 0),
221CSN_DESCR_END (MobileAllocationIE_t)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100222#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300223
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100224#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300225static const
226CSN_DESCR_BEGIN(SingleRFChannel_t)
227 M_UINT (SingleRFChannel_t, spare, 2),
228 M_UINT (SingleRFChannel_t, ARFCN, 10),
229CSN_DESCR_END (SingleRFChannel_t)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100230#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300231
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100232#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300233static const
234CSN_DESCR_BEGIN(RFHoppingChannel_t)
235 M_UINT (RFHoppingChannel_t, MAIO, 6),
236 M_UINT (RFHoppingChannel_t, HSN, 6),
237CSN_DESCR_END (RFHoppingChannel_t)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100238#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300239
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100240#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300241static const
242CSN_DESCR_BEGIN(MobileAllocation_or_Frequency_Short_List_t)
243 M_UNION (MobileAllocation_or_Frequency_Short_List_t, 2),
244 M_BITMAP (MobileAllocation_or_Frequency_Short_List_t, u.Frequency_Short_List, 64),
245 M_TYPE (MobileAllocation_or_Frequency_Short_List_t, u.MA, MobileAllocationIE_t),
246CSN_DESCR_END (MobileAllocation_or_Frequency_Short_List_t)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100247#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300248
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100249#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300250static const
251CSN_DESCR_BEGIN(Channel_Description_t)
252 M_UINT (Channel_Description_t, Channel_type_and_TDMA_offset, 5),
253 M_UINT (Channel_Description_t, TN, 3),
254 M_UINT (Channel_Description_t, TSC, 3),
255
256 M_UNION (Channel_Description_t, 2),
257 M_TYPE (Channel_Description_t, u.SingleRFChannel, SingleRFChannel_t),
258 M_TYPE (Channel_Description_t, u.RFHoppingChannel, RFHoppingChannel_t),
259CSN_DESCR_END(Channel_Description_t)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100260#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300261
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100262#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300263static const
264CSN_DESCR_BEGIN(Group_Channel_Description_t)
265 M_TYPE (Group_Channel_Description_t, Channel_Description, Channel_Description_t),
266
267 M_NEXT_EXIST (Group_Channel_Description_t, Exist_Hopping, 1),
268 M_TYPE (Group_Channel_Description_t, MA_or_Frequency_Short_List, MobileAllocation_or_Frequency_Short_List_t),
269CSN_DESCR_END (Group_Channel_Description_t)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100270#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300271
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100272#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300273static const
274CSN_DESCR_BEGIN(Group_Call_Reference_t)
275 M_UINT (Group_Call_Reference_t, value, 27),
Anders Broman8ea3cbe2020-01-28 17:36:33 +0100276 M_UINT (Group_Call_Reference_t, SF, 1),
277 M_UINT (Group_Call_Reference_t, AF, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300278 M_UINT (Group_Call_Reference_t, call_priority, 3),
279 M_UINT (Group_Call_Reference_t, Ciphering_information, 4),
280CSN_DESCR_END (Group_Call_Reference_t)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100281#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300282
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100283#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300284static const
285CSN_DESCR_BEGIN(Group_Call_information_t)
286 M_TYPE (Group_Call_information_t, Group_Call_Reference, Group_Call_Reference_t),
287
288 M_NEXT_EXIST (Group_Call_information_t, Exist_Group_Channel_Description, 1),
289 M_TYPE (Group_Call_information_t, Group_Channel_Description, Group_Channel_Description_t),
290CSN_DESCR_END (Group_Call_information_t)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100291#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300292
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100293#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300294static const
295CSN_DESCR_BEGIN (P1_Rest_Octets_t)
296 M_NEXT_EXIST_LH(P1_Rest_Octets_t, Exist_NLN_PCH_and_NLN_status, 2),
297 M_UINT (P1_Rest_Octets_t, NLN_PCH, 2),
298 M_UINT (P1_Rest_Octets_t, NLN_status, 1),
299
300 M_NEXT_EXIST_LH(P1_Rest_Octets_t, Exist_Priority1, 1),
301 M_UINT (P1_Rest_Octets_t, Priority1, 3),
302
303 M_NEXT_EXIST_LH(P1_Rest_Octets_t, Exist_Priority2, 1),
304 M_UINT (P1_Rest_Octets_t, Priority2, 3),
305
306 M_NEXT_EXIST_LH(P1_Rest_Octets_t, Exist_Group_Call_information, 1),
307 M_TYPE (P1_Rest_Octets_t, Group_Call_information, Group_Call_information_t),
308
309 M_UINT_LH (P1_Rest_Octets_t, Packet_Page_Indication_1, 1),
310 M_UINT_LH (P1_Rest_Octets_t, Packet_Page_Indication_2, 1),
311CSN_DESCR_END (P1_Rest_Octets_t)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100312#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300313
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100314#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300315static const
316CSN_DESCR_BEGIN (P2_Rest_Octets_t)
317 M_NEXT_EXIST_LH(P2_Rest_Octets_t, Exist_CN3, 1),
318 M_UINT (P2_Rest_Octets_t, CN3, 2),
319
320 M_NEXT_EXIST_LH(P2_Rest_Octets_t, Exist_NLN_and_status, 2),
321 M_UINT (P2_Rest_Octets_t, NLN, 2),
322 M_UINT (P2_Rest_Octets_t, NLN_status, 1),
323
324 M_NEXT_EXIST_LH(P2_Rest_Octets_t, Exist_Priority1, 1),
325 M_UINT (P2_Rest_Octets_t, Priority1, 3),
326
327 M_NEXT_EXIST_LH(P2_Rest_Octets_t, Exist_Priority2, 1),
328 M_UINT (P2_Rest_Octets_t, Priority2, 3),
329
330 M_NEXT_EXIST_LH(P2_Rest_Octets_t, Exist_Priority3, 1),
331 M_UINT (P2_Rest_Octets_t, Priority3, 3),
332
333 M_UINT_LH (P2_Rest_Octets_t, Packet_Page_Indication_3, 1),
334CSN_DESCR_END (P2_Rest_Octets_t)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100335#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300336
337/* <IA Rest Octets>
338 * Note!!
339 * - first two bits skipped and frequencyparameters skipped
340 * - additions for R99 and EGPRS added
341 */
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100342#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300343static const
344CSN_DESCR_BEGIN(DynamicAllocation_t)
345 M_UINT (DynamicAllocation_t, USF, 3),
346 M_UINT (DynamicAllocation_t, USF_GRANULARITY, 1),
347
348 M_NEXT_EXIST (DynamicAllocation_t, Exist_P0_PR_MODE, 2),
349 M_UINT (DynamicAllocation_t, P0, 4),
350 M_UINT (DynamicAllocation_t, PR_MODE, 1),
351CSN_DESCR_END (DynamicAllocation_t)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100352#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300353
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100354#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300355static const
356CSN_DESCR_BEGIN(EGPRS_TwoPhaseAccess_t)
357 M_NEXT_EXIST (EGPRS_TwoPhaseAccess_t, Exist_ALPHA, 1),
358 M_UINT (EGPRS_TwoPhaseAccess_t, ALPHA, 4),
359
360 M_UINT (EGPRS_TwoPhaseAccess_t, GAMMA, 5),
361 M_TYPE (EGPRS_TwoPhaseAccess_t, TBF_STARTING_TIME, StartingTime_t),
362 M_UINT (EGPRS_TwoPhaseAccess_t, NR_OF_RADIO_BLOCKS_ALLOCATED, 2),
363
364 M_NEXT_EXIST (EGPRS_TwoPhaseAccess_t, Exist_P0_BTS_PWR_CTRL_PR_MODE, 3),
365 M_UINT (EGPRS_TwoPhaseAccess_t, P0, 4),
366 M_UINT (EGPRS_TwoPhaseAccess_t, BTS_PWR_CTRL_MODE, 1),
367 M_UINT (EGPRS_TwoPhaseAccess_t, PR_MODE, 1),
368CSN_DESCR_END (EGPRS_TwoPhaseAccess_t)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100369#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300370
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100371#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300372static const
373CSN_DESCR_BEGIN(EGPRS_OnePhaseAccess_t)
374 M_UINT (EGPRS_OnePhaseAccess_t, TFI_ASSIGNMENT, 5),
375 M_UINT (EGPRS_OnePhaseAccess_t, POLLING, 1),
376
377 M_UNION (EGPRS_OnePhaseAccess_t, 2),
378 M_TYPE (EGPRS_OnePhaseAccess_t, Allocation.DynamicAllocation, DynamicAllocation_t),
379 CSN_ERROR (EGPRS_OnePhaseAccess_t, "1 <Fixed Allocation>", CSN_ERROR_STREAM_NOT_SUPPORTED),
380
381 M_UINT (EGPRS_OnePhaseAccess_t, EGPRS_CHANNEL_CODING_COMMAND, 4),
382 M_UINT (EGPRS_OnePhaseAccess_t, TLLI_BLOCK_CHANNEL_CODING, 1),
383
384 M_NEXT_EXIST (EGPRS_OnePhaseAccess_t, Exist_BEP_PERIOD2, 1),
385 M_UINT (EGPRS_OnePhaseAccess_t, BEP_PERIOD2, 4),
386
387 M_UINT (EGPRS_OnePhaseAccess_t, RESEGMENT, 1),
388 M_UINT (EGPRS_OnePhaseAccess_t, EGPRS_WindowSize, 5),
389
390 M_NEXT_EXIST (EGPRS_OnePhaseAccess_t, Exist_ALPHA, 1),
391 M_UINT (EGPRS_OnePhaseAccess_t, ALPHA, 4),
392
393 M_UINT (EGPRS_OnePhaseAccess_t, GAMMA, 5),
394
395 M_NEXT_EXIST (EGPRS_OnePhaseAccess_t, Exist_TIMING_ADVANCE_INDEX, 1),
396 M_UINT (EGPRS_OnePhaseAccess_t, TIMING_ADVANCE_INDEX, 4),
397
398 M_NEXT_EXIST (EGPRS_OnePhaseAccess_t, Exist_TBF_STARTING_TIME, 1),
399 M_TYPE (EGPRS_OnePhaseAccess_t, TBF_STARTING_TIME, StartingTime_t),
400CSN_DESCR_END (EGPRS_OnePhaseAccess_t)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100401#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300402
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100403#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300404static const
405CSN_DESCR_BEGIN(IA_EGPRS_00_t)
406 M_UINT (IA_EGPRS_00_t, ExtendedRA, 5),
407
408 M_REC_ARRAY (IA_EGPRS_00_t, AccessTechnologyType, NrOfAccessTechnologies, 4),
409
410 M_UNION (IA_EGPRS_00_t, 2),
411 M_TYPE (IA_EGPRS_00_t, Access.TwoPhaseAccess, EGPRS_TwoPhaseAccess_t),
412 M_TYPE (IA_EGPRS_00_t, Access.OnePhaseAccess, EGPRS_OnePhaseAccess_t),
413CSN_DESCR_END (IA_EGPRS_00_t)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100414#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300415
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100416#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300417static const
418CSN_ChoiceElement_t IA_EGPRS_Choice[] =
419{
Pau Espin Pedrol7cce8252020-01-24 16:41:14 +0100420 {2, 0x00, 0, M_TYPE (IA_EGPRS_t, u.IA_EGPRS_PUA, IA_EGPRS_00_t)},
421 {2, 0x01, 0, CSN_ERROR(IA_EGPRS_t, "01 <IA_EGPRS>", CSN_ERROR_STREAM_NOT_SUPPORTED)},
422 {1, 0x01, 0, CSN_ERROR(IA_EGPRS_t, "1 <IA_EGPRS>", CSN_ERROR_STREAM_NOT_SUPPORTED)}
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300423};
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100424#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300425
426/* Please observe the double usage of UnionType element.
427 * First, it is used to store the second bit of LL/LH identification of EGPRS contents.
428 * Thereafter, UnionType will be used to store the index to detected choice.
429 */
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100430#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300431static const
432CSN_DESCR_BEGIN(IA_EGPRS_t)
433 M_UINT (IA_EGPRS_t, UnionType , 1 ),
434 M_CHOICE (IA_EGPRS_t, UnionType, IA_EGPRS_Choice, ElementsOf(IA_EGPRS_Choice)),
435CSN_DESCR_END (IA_EGPRS_t)
436
437static const
438CSN_DESCR_BEGIN(IA_FreqParamsBeforeTime_t)
439 M_UINT (IA_FreqParamsBeforeTime_t, Length, 6),
440 M_UINT (IA_FreqParamsBeforeTime_t, MAIO, 6),
441 M_VAR_ARRAY (IA_FreqParamsBeforeTime_t, MobileAllocation, Length, 8),
442CSN_DESCR_END (IA_FreqParamsBeforeTime_t)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100443#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300444
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100445#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300446static const
447CSN_DESCR_BEGIN (GPRS_SingleBlockAllocation_t)
448 M_NEXT_EXIST (GPRS_SingleBlockAllocation_t, Exist_ALPHA, 1),
449 M_UINT (GPRS_SingleBlockAllocation_t, ALPHA, 4),
450
451 M_UINT (GPRS_SingleBlockAllocation_t, GAMMA, 5),
452 M_FIXED (GPRS_SingleBlockAllocation_t, 2, 0x01),
453 M_TYPE (GPRS_SingleBlockAllocation_t, TBF_STARTING_TIME, StartingTime_t), /*bit(16)*/
454
455 M_NEXT_EXIST_LH(GPRS_SingleBlockAllocation_t, Exist_P0_BTS_PWR_CTRL_PR_MODE, 3),
456 M_UINT (GPRS_SingleBlockAllocation_t, P0, 4),
457 M_UINT (GPRS_SingleBlockAllocation_t, BTS_PWR_CTRL_MODE, 1),
458 M_UINT (GPRS_SingleBlockAllocation_t, PR_MODE, 1),
459CSN_DESCR_END (GPRS_SingleBlockAllocation_t)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100460#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300461
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100462#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300463static const
464CSN_DESCR_BEGIN (GPRS_DynamicOrFixedAllocation_t)
465 M_UINT (GPRS_DynamicOrFixedAllocation_t, TFI_ASSIGNMENT, 5),
466 M_UINT (GPRS_DynamicOrFixedAllocation_t, POLLING, 1),
467
468 M_UNION (GPRS_DynamicOrFixedAllocation_t, 2),
469 M_TYPE (GPRS_DynamicOrFixedAllocation_t, Allocation.DynamicAllocation, DynamicAllocation_t),
470 CSN_ERROR (GPRS_DynamicOrFixedAllocation_t, "1 <Fixed Allocation>", CSN_ERROR_STREAM_NOT_SUPPORTED),
471
472 M_UINT (GPRS_DynamicOrFixedAllocation_t, CHANNEL_CODING_COMMAND, 2),
473 M_UINT (GPRS_DynamicOrFixedAllocation_t, TLLI_BLOCK_CHANNEL_CODING, 1),
474
475 M_NEXT_EXIST (GPRS_DynamicOrFixedAllocation_t, Exist_ALPHA, 1),
476 M_UINT (GPRS_DynamicOrFixedAllocation_t, ALPHA, 4),
477
478 M_UINT (GPRS_DynamicOrFixedAllocation_t, GAMMA, 5),
479
480 M_NEXT_EXIST (GPRS_DynamicOrFixedAllocation_t, Exist_TIMING_ADVANCE_INDEX, 1),
481 M_UINT (GPRS_DynamicOrFixedAllocation_t, TIMING_ADVANCE_INDEX, 4),
482
483 M_NEXT_EXIST (GPRS_DynamicOrFixedAllocation_t, Exist_TBF_STARTING_TIME, 1),
484 M_TYPE (GPRS_DynamicOrFixedAllocation_t, TBF_STARTING_TIME, StartingTime_t),
485CSN_DESCR_END (GPRS_DynamicOrFixedAllocation_t)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100486#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300487
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100488#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300489static const
490CSN_DESCR_BEGIN(PU_IA_AdditionsR99_t)
491 M_NEXT_EXIST (PU_IA_AdditionsR99_t, Exist_ExtendedRA, 1),
492 M_UINT (PU_IA_AdditionsR99_t, ExtendedRA, 5),
493CSN_DESCR_END (PU_IA_AdditionsR99_t)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100494#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300495
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100496#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300497static const
498CSN_DESCR_BEGIN (Packet_Uplink_ImmAssignment_t)
499 M_UNION (Packet_Uplink_ImmAssignment_t, 2),
500 M_TYPE (Packet_Uplink_ImmAssignment_t, Access.SingleBlockAllocation, GPRS_SingleBlockAllocation_t),
501 M_TYPE (Packet_Uplink_ImmAssignment_t, Access.DynamicOrFixedAllocation, GPRS_DynamicOrFixedAllocation_t),
502
503 M_NEXT_EXIST_OR_NULL_LH(Packet_Uplink_ImmAssignment_t, Exist_AdditionsR99, 1),
504 M_TYPE (Packet_Uplink_ImmAssignment_t, AdditionsR99, PU_IA_AdditionsR99_t),
505CSN_DESCR_END (Packet_Uplink_ImmAssignment_t)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100506#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300507
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100508#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300509static const
510CSN_DESCR_BEGIN(PD_IA_AdditionsR99_t)
511 M_UINT (PD_IA_AdditionsR99_t, EGPRS_WindowSize, 5),
512 M_UINT (PD_IA_AdditionsR99_t, LINK_QUALITY_MEASUREMENT_MODE, 2),
513
514 M_NEXT_EXIST (PD_IA_AdditionsR99_t, Exist_BEP_PERIOD2, 1),
515 M_UINT (PD_IA_AdditionsR99_t, BEP_PERIOD2, 4),
516CSN_DESCR_END (PD_IA_AdditionsR99_t)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100517#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300518
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100519#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300520static const
521CSN_DESCR_BEGIN(Packet_Downlink_ImmAssignment_t)
522 M_UINT (Packet_Downlink_ImmAssignment_t, TLLI, 32),
523
524 M_NEXT_EXIST (Packet_Downlink_ImmAssignment_t, Exist_TFI_to_TA_VALID, 6 + 1),
525 M_UINT (Packet_Downlink_ImmAssignment_t, TFI_ASSIGNMENT, 5),
526 M_UINT (Packet_Downlink_ImmAssignment_t, RLC_MODE, 1),
527 M_NEXT_EXIST (Packet_Downlink_ImmAssignment_t, Exist_ALPHA, 1),
528 M_UINT (Packet_Downlink_ImmAssignment_t, ALPHA, 4),
529 M_UINT (Packet_Downlink_ImmAssignment_t, GAMMA, 5),
530 M_UINT (Packet_Downlink_ImmAssignment_t, POLLING, 1),
531 M_UINT (Packet_Downlink_ImmAssignment_t, TA_VALID, 1),
532
533 M_NEXT_EXIST (Packet_Downlink_ImmAssignment_t, Exist_TIMING_ADVANCE_INDEX, 1),
534 M_UINT (Packet_Downlink_ImmAssignment_t, TIMING_ADVANCE_INDEX, 4),
535
536 M_NEXT_EXIST (Packet_Downlink_ImmAssignment_t, Exist_TBF_STARTING_TIME, 1),
537 M_TYPE (Packet_Downlink_ImmAssignment_t, TBF_STARTING_TIME, StartingTime_t),
538
539 M_NEXT_EXIST (Packet_Downlink_ImmAssignment_t, Exist_P0_PR_MODE, 3),
540 M_UINT (Packet_Downlink_ImmAssignment_t, P0, 4),
541 M_UINT (Packet_Downlink_ImmAssignment_t, BTS_PWR_CTRL_MODE, 1),
542 M_UINT (Packet_Downlink_ImmAssignment_t, PR_MODE, 1),
543
544 M_NEXT_EXIST_OR_NULL_LH(Packet_Downlink_ImmAssignment_t, Exist_AdditionsR99, 1),
545 M_TYPE (Packet_Downlink_ImmAssignment_t, AdditionsR99, PD_IA_AdditionsR99_t),
546CSN_DESCR_END (Packet_Downlink_ImmAssignment_t)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100547#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300548
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100549#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300550static const
551CSN_DESCR_BEGIN (Second_Part_Packet_Assignment_t)
552 M_NEXT_EXIST_OR_NULL_LH(Second_Part_Packet_Assignment_t, Exist_SecondPart, 2),
553 M_NEXT_EXIST (Second_Part_Packet_Assignment_t, Exist_ExtendedRA, 1),
554 M_UINT (Second_Part_Packet_Assignment_t, ExtendedRA, 5),
555CSN_DESCR_END (Second_Part_Packet_Assignment_t)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100556#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300557
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100558#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300559static const
560CSN_DESCR_BEGIN(IA_PacketAssignment_UL_DL_t)
561 M_UNION (IA_PacketAssignment_UL_DL_t, 2),
562 M_TYPE (IA_PacketAssignment_UL_DL_t, ul_dl.Packet_Uplink_ImmAssignment, Packet_Uplink_ImmAssignment_t),
563 M_TYPE (IA_PacketAssignment_UL_DL_t, ul_dl.Packet_Downlink_ImmAssignment, Packet_Downlink_ImmAssignment_t),
564CSN_DESCR_END (IA_PacketAssignment_UL_DL_t)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100565#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300566
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100567#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300568static const
569CSN_DESCR_BEGIN(IA_PacketAssignment_t)
570 M_UNION (IA_PacketAssignment_t, 2),
571 M_TYPE (IA_PacketAssignment_t, u.UplinkDownlinkAssignment, IA_PacketAssignment_UL_DL_t),
572 M_TYPE (IA_PacketAssignment_t, u.UplinkDownlinkAssignment, Second_Part_Packet_Assignment_t),
573CSN_DESCR_END (IA_PacketAssignment_t)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100574#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300575
576/* <Packet Polling Request> */
577static const
578CSN_ChoiceElement_t PacketPollingID[] =
579{
Pau Espin Pedrol7cce8252020-01-24 16:41:14 +0100580 {1, 0, 0, M_TYPE(PacketPollingID_t, u.Global_TFI, Global_TFI_t)},
581 {2, 0x02, 0, M_UINT(PacketPollingID_t, u.TLLI, 32)},
582 {3, 0x06, 0, M_UINT(PacketPollingID_t, u.TQI, 16)},
583/*{3, 0x07 , 0, M_TYPE(PacketUplinkID_t, u.Packet_Request_Reference, Packet_Request_Reference_t)},*/
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300584};
585
586static const
587CSN_DESCR_BEGIN(PacketPollingID_t)
588 M_CHOICE (PacketPollingID_t, UnionType, PacketPollingID, ElementsOf(PacketPollingID)),
589CSN_DESCR_END (PacketPollingID_t)
590
591static const
592CSN_DESCR_BEGIN(Packet_Polling_Request_t)
593 M_UINT (Packet_Polling_Request_t, MESSAGE_TYPE, 6),
594 M_UINT (Packet_Polling_Request_t, PAGE_MODE, 2),
595 M_TYPE (Packet_Polling_Request_t, ID, PacketPollingID_t),
Anders Broman8ea3cbe2020-01-28 17:36:33 +0100596 M_UINT (Packet_Polling_Request_t, TYPE_OF_ACK, 1),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400597 M_PADDING_BITS(Packet_Polling_Request_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300598CSN_DESCR_END (Packet_Polling_Request_t)
599
600static const
601CSN_DESCR_BEGIN(MobileAllocation_t)
602 M_UINT_OFFSET(MobileAllocation_t, MA_BitLength, 6, 1),
603 M_VAR_BITMAP (MobileAllocation_t, MA_BITMAP, MA_BitLength, 0),
604CSN_DESCR_END (MobileAllocation_t)
605
606static const
607CSN_DESCR_BEGIN(ARFCN_index_list_t)
608 M_REC_ARRAY (ARFCN_index_list_t, ARFCN_INDEX, ElementsOf_ARFCN_INDEX, 6),
609CSN_DESCR_END (ARFCN_index_list_t)
610
611static const
612CSN_DESCR_BEGIN(GPRS_Mobile_Allocation_t)
613 M_UINT (GPRS_Mobile_Allocation_t, HSN, 6),
614 M_REC_ARRAY (GPRS_Mobile_Allocation_t, RFL_NUMBER, ElementsOf_RFL_NUMBER, 4),
615 M_UNION (GPRS_Mobile_Allocation_t, 2),
616 M_TYPE (GPRS_Mobile_Allocation_t, u.MA, MobileAllocation_t),
617 M_TYPE (GPRS_Mobile_Allocation_t, u.ARFCN_index_list, ARFCN_index_list_t),
618CSN_DESCR_END (GPRS_Mobile_Allocation_t)
619
620/*< SI 13 Rest Octets >*/
621static const
622CSN_DESCR_BEGIN (Extension_Bits_t)
623 M_UINT_OFFSET (Extension_Bits_t, extension_length, 6, 1),
624 M_LEFT_VAR_BMP(Extension_Bits_t, Extension_Info, extension_length, 0),
625CSN_DESCR_END (Extension_Bits_t)
626
627static const
628CSN_DESCR_BEGIN(GPRS_Cell_Options_t)
629 M_UINT (GPRS_Cell_Options_t, NMO, 2),
Pascal Quantin29248d62020-01-28 17:13:17 +0100630 M_UINT (GPRS_Cell_Options_t, T3168, 3),
631 M_UINT (GPRS_Cell_Options_t, T3192, 3),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300632 M_UINT (GPRS_Cell_Options_t, DRX_TIMER_MAX, 3),
Anders Broman8ea3cbe2020-01-28 17:36:33 +0100633 M_UINT (GPRS_Cell_Options_t, ACCESS_BURST_TYPE, 1),
634 M_UINT (GPRS_Cell_Options_t, CONTROL_ACK_TYPE, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300635 M_UINT (GPRS_Cell_Options_t, BS_CV_MAX, 4),
636
637 M_NEXT_EXIST (GPRS_Cell_Options_t, Exist_PAN, 3),
638 M_UINT (GPRS_Cell_Options_t, PAN_DEC, 3),
639 M_UINT (GPRS_Cell_Options_t, PAN_INC, 3),
640 M_UINT (GPRS_Cell_Options_t, PAN_MAX, 3),
641
642 M_NEXT_EXIST (GPRS_Cell_Options_t, Exist_Extension_Bits, 1),
643 M_TYPE (GPRS_Cell_Options_t, Extension_Bits, Extension_Bits_t),
644CSN_DESCR_END (GPRS_Cell_Options_t)
645
646static const
647CSN_DESCR_BEGIN(PBCCH_Not_present_t)
648 M_UINT (PBCCH_Not_present_t, RAC, 8),
Anders Broman8ea3cbe2020-01-28 17:36:33 +0100649 M_UINT (PBCCH_Not_present_t, SPGC_CCCH_SUP, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300650 M_UINT (PBCCH_Not_present_t, PRIORITY_ACCESS_THR, 3),
651 M_UINT (PBCCH_Not_present_t, NETWORK_CONTROL_ORDER, 2),
652 M_TYPE (PBCCH_Not_present_t, GPRS_Cell_Options, GPRS_Cell_Options_t),
653 M_TYPE (PBCCH_Not_present_t, GPRS_Power_Control_Parameters, GPRS_Power_Control_Parameters_t),
654CSN_DESCR_END (PBCCH_Not_present_t)
655
656static const
657CSN_ChoiceElement_t SI13_PBCCH_Description_Channel[] =
658{/* this one is used in SI13*/
Pau Espin Pedrol7cce8252020-01-24 16:41:14 +0100659 {2, 0x00, 0, M_NULL(PBCCH_Description_t, u.dummy, 0)},/*Default to BCCH carrier*/
660 {2, 0x01, 0, M_UINT(PBCCH_Description_t, u.ARFCN, 10)},
661 {1, 0x01, 0, M_UINT(PBCCH_Description_t, u.MAIO, 6)},
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300662};
663
664static const
665CSN_DESCR_BEGIN(PBCCH_Description_t)/*SI13*/
666 M_UINT (PBCCH_Description_t, Pb, 4),
667 M_UINT (PBCCH_Description_t, TSC, 3),
668 M_UINT (PBCCH_Description_t, TN, 3),
669
670 M_CHOICE (PBCCH_Description_t, UnionType, SI13_PBCCH_Description_Channel, ElementsOf(SI13_PBCCH_Description_Channel)),
671CSN_DESCR_END (PBCCH_Description_t)
672
673static const
674CSN_DESCR_BEGIN(PBCCH_present_t)
675 M_UINT (PBCCH_present_t, PSI1_REPEAT_PERIOD, 4),
676 M_TYPE (PBCCH_present_t, PBCCH_Description, PBCCH_Description_t),
677CSN_DESCR_END (PBCCH_present_t)
678
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100679#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300680static const
681CSN_DESCR_BEGIN(SI13_AdditionsR6)
682 M_NEXT_EXIST (SI13_AdditionsR6, Exist_LB_MS_TXPWR_MAX_CCH, 1),
683 M_UINT (SI13_AdditionsR6, LB_MS_TXPWR_MAX_CCH, 5),
684 M_UINT (SI13_AdditionsR6, SI2n_SUPPORT, 2),
685CSN_DESCR_END (SI13_AdditionsR6)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100686#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300687
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100688#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300689static const
690CSN_DESCR_BEGIN(SI13_AdditionsR4)
691 M_UINT (SI13_AdditionsR4, SI_STATUS_IND, 1),
692 M_NEXT_EXIST_OR_NULL_LH (SI13_AdditionsR4, Exist_AdditionsR6, 1),
693 M_TYPE (SI13_AdditionsR4, AdditionsR6, SI13_AdditionsR6),
694CSN_DESCR_END (SI13_AdditionsR4)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100695#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300696
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100697#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300698static const
699CSN_DESCR_BEGIN(SI13_AdditionR99)
700 M_UINT (SI13_AdditionR99, SGSNR, 1),
701 M_NEXT_EXIST_OR_NULL_LH (SI13_AdditionR99, Exist_AdditionsR4, 1),
702 M_TYPE (SI13_AdditionR99, AdditionsR4, SI13_AdditionsR4),
703CSN_DESCR_END (SI13_AdditionR99)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100704#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300705
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100706#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300707static const
708CSN_DESCR_BEGIN (SI_13_t)
709 M_THIS_EXIST_LH (SI_13_t),
710
711 M_UINT (SI_13_t, BCCH_CHANGE_MARK, 3),
712 M_UINT (SI_13_t, SI_CHANGE_FIELD, 4),
713
714 M_NEXT_EXIST (SI_13_t, Exist_MA, 2),
715 M_UINT (SI_13_t, SI13_CHANGE_MARK, 2),
716 M_TYPE (SI_13_t, GPRS_Mobile_Allocation, GPRS_Mobile_Allocation_t),
717
718 M_UNION (SI_13_t, 2),
719 M_TYPE (SI_13_t, u.PBCCH_Not_present, PBCCH_Not_present_t),
720 M_TYPE (SI_13_t, u.PBCCH_present, PBCCH_present_t),
721
722 M_NEXT_EXIST_OR_NULL_LH(SI_13_t, Exist_AdditionsR99, 1),
723 M_TYPE (SI_13_t, AdditionsR99, SI13_AdditionR99),
724CSN_DESCR_END (SI_13_t)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100725#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300726/************************************************************/
727/* TS 44.060 messages */
728/************************************************************/
729
730/*< Packet TBF Release message content >*/
731static const
732CSN_DESCR_BEGIN(Packet_TBF_Release_t)
733 M_UINT (Packet_TBF_Release_t, MESSAGE_TYPE, 6),
734 M_UINT (Packet_TBF_Release_t, PAGE_MODE, 2),
735 M_FIXED (Packet_TBF_Release_t, 1, 0x00),
736 M_TYPE (Packet_TBF_Release_t, Global_TFI, Global_TFI_t),
Anders Broman8ea3cbe2020-01-28 17:36:33 +0100737 M_UINT (Packet_TBF_Release_t, UPLINK_RELEASE, 1),
738 M_UINT (Packet_TBF_Release_t, DOWNLINK_RELEASE, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300739 M_UINT (Packet_TBF_Release_t, TBF_RELEASE_CAUSE, 4),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400740 M_PADDING_BITS(Packet_TBF_Release_t ),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300741CSN_DESCR_END (Packet_TBF_Release_t)
742
743/*< Packet Control Acknowledgement message content >*/
744
745static const
746CSN_DESCR_BEGIN (Packet_Control_Acknowledgement_AdditionsR6_t)
747 M_NEXT_EXIST (Packet_Control_Acknowledgement_AdditionsR6_t, Exist_CTRL_ACK_Extension, 1),
748 M_UINT (Packet_Control_Acknowledgement_AdditionsR6_t, CTRL_ACK_Extension, 9),
749CSN_DESCR_END (Packet_Control_Acknowledgement_AdditionsR6_t)
750
751static const
752CSN_DESCR_BEGIN (Packet_Control_Acknowledgement_AdditionsR5_t)
753 M_NEXT_EXIST (Packet_Control_Acknowledgement_AdditionsR5_t, Exist_TN_RRBP, 1),
754 M_UINT (Packet_Control_Acknowledgement_AdditionsR5_t, TN_RRBP, 3),
755 M_NEXT_EXIST (Packet_Control_Acknowledgement_AdditionsR5_t, Exist_G_RNTI_Extension, 1),
756 M_UINT (Packet_Control_Acknowledgement_AdditionsR5_t, G_RNTI_Extension, 4),
757
758 M_NEXT_EXIST_OR_NULL (Packet_Control_Acknowledgement_AdditionsR5_t, Exist_AdditionsR6, 1),
759 M_TYPE (Packet_Control_Acknowledgement_AdditionsR5_t, AdditionsR6, Packet_Control_Acknowledgement_AdditionsR6_t),
760CSN_DESCR_END (Packet_Control_Acknowledgement_AdditionsR5_t)
761
762static const
763CSN_DESCR_BEGIN (Packet_Control_Acknowledgement_t)
764 M_UINT (Packet_Control_Acknowledgement_t, PayloadType, 2),
765 M_UINT (Packet_Control_Acknowledgement_t, spare, 5),
766 M_BIT (Packet_Control_Acknowledgement_t, R),
767
768 M_UINT (Packet_Control_Acknowledgement_t, MESSAGE_TYPE, 6),
769 M_UINT (Packet_Control_Acknowledgement_t, TLLI, 32),
770 M_UINT (Packet_Control_Acknowledgement_t, CTRL_ACK, 2),
771 M_NEXT_EXIST_OR_NULL (Packet_Control_Acknowledgement_t, Exist_AdditionsR5, 1),
772 M_TYPE (Packet_Control_Acknowledgement_t, AdditionsR5, Packet_Control_Acknowledgement_AdditionsR5_t),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400773 M_PADDING_BITS (Packet_Control_Acknowledgement_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300774CSN_DESCR_END (Packet_Control_Acknowledgement_t)
775
776/*< Packet Downlink Dummy Control Block message content >*/
777static const
778CSN_DESCR_BEGIN(Packet_Downlink_Dummy_Control_Block_t)
779 M_UINT (Packet_Downlink_Dummy_Control_Block_t, MESSAGE_TYPE, 6),
780 M_UINT (Packet_Downlink_Dummy_Control_Block_t, PAGE_MODE, 2),
781
782 M_NEXT_EXIST (Packet_Downlink_Dummy_Control_Block_t, Exist_PERSISTENCE_LEVEL, 1),
783 M_UINT_ARRAY (Packet_Downlink_Dummy_Control_Block_t, PERSISTENCE_LEVEL, 4, 4),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400784 M_PADDING_BITS(Packet_Downlink_Dummy_Control_Block_t ),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300785CSN_DESCR_END (Packet_Downlink_Dummy_Control_Block_t)
786
787/*< Packet Uplink Dummy Control Block message content >*/
788static const
789CSN_DESCR_BEGIN(Packet_Uplink_Dummy_Control_Block_t)
790 M_UINT (Packet_Uplink_Dummy_Control_Block_t, PayloadType, 2),
791 M_UINT (Packet_Uplink_Dummy_Control_Block_t, spare, 5),
792 M_BIT (Packet_Uplink_Dummy_Control_Block_t, R),
793
794 M_UINT (Packet_Uplink_Dummy_Control_Block_t, MESSAGE_TYPE, 6),
795 M_UINT (Packet_Uplink_Dummy_Control_Block_t, TLLI, 32),
796/*M_FIXED (Packet_Uplink_Dummy_Control_Block_t, 1, 0),*/
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400797 M_PADDING_BITS(Packet_Uplink_Dummy_Control_Block_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300798CSN_DESCR_END (Packet_Uplink_Dummy_Control_Block_t)
799
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100800#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300801static const
802CSN_DESCR_BEGIN(Receive_N_PDU_Number_t)
803 M_UINT (Receive_N_PDU_Number_t, nsapi, 4),
804 M_UINT (Receive_N_PDU_Number_t, value, 8),
805CSN_DESCR_END (Receive_N_PDU_Number_t)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100806#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300807
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100808#if 0
Pau Espin Pedrol007056e2020-03-26 15:03:33 +0100809gint16 Receive_N_PDU_Number_list_Dissector(csnStream_t* ar, struct bitvec *vector, unsigned *readIndex, void* data)
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300810{
811 if (ar->direction == 0)
812 {
813 return csnStreamEncoder(ar, CSNDESCR(Receive_N_PDU_Number_t), vector, readIndex, data);
814 }
815 else
816 {
817 return csnStreamDecoder(ar, CSNDESCR(Receive_N_PDU_Number_t), vector, readIndex, data);
818 }
819}
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100820#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300821
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100822#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300823static const
824CSN_DESCR_BEGIN(Receive_N_PDU_Number_list_t)
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400825 M_SERIALIZE (Receive_N_PDU_Number_list_t, IEI, 7, Receive_N_PDU_Number_list_Dissector),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300826 M_VAR_TARRAY (Receive_N_PDU_Number_list_t, Receive_N_PDU_Number, Receive_N_PDU_Number_t, Count_Receive_N_PDU_Number),
827CSN_DESCR_END (Receive_N_PDU_Number_list_t)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +0100828#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300829
830/*< MS Radio Access capability IE >*/
831static const
832CSN_DESCR_BEGIN (DTM_EGPRS_t)
833 M_NEXT_EXIST (DTM_EGPRS_t, Exist_DTM_EGPRS_multislot_class, 1),
834 M_UINT (DTM_EGPRS_t, DTM_EGPRS_multislot_class, 2),
835CSN_DESCR_END (DTM_EGPRS_t)
836
837static const
838CSN_DESCR_BEGIN (DTM_EGPRS_HighMultislotClass_t)
839 M_NEXT_EXIST (DTM_EGPRS_HighMultislotClass_t, Exist_DTM_EGPRS_HighMultislotClass, 1),
840 M_UINT (DTM_EGPRS_HighMultislotClass_t, DTM_EGPRS_HighMultislotClass, 3),
841CSN_DESCR_END (DTM_EGPRS_HighMultislotClass_t)
842
843static const
Vincent Helfre1145fd22020-01-28 18:27:49 +0100844CSN_DESCR_BEGIN (DownlinkDualCarrierCapability_r7_t)
845 M_NEXT_EXIST (DownlinkDualCarrierCapability_r7_t, MultislotCapabilityReductionForDL_DualCarrier, 1),
846 M_UINT (DownlinkDualCarrierCapability_r7_t, DL_DualCarrierForDTM, 3),
847CSN_DESCR_END (DownlinkDualCarrierCapability_r7_t)
848
849static const
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300850CSN_DESCR_BEGIN (Multislot_capability_t)
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400851 M_NEXT_EXIST_OR_NULL(Multislot_capability_t, Exist_HSCSD_multislot_class, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300852 M_UINT (Multislot_capability_t, HSCSD_multislot_class, 5),
853
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400854 M_NEXT_EXIST_OR_NULL(Multislot_capability_t, Exist_GPRS_multislot_class, 2),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300855 M_UINT (Multislot_capability_t, GPRS_multislot_class, 5),
856 M_UINT (Multislot_capability_t, GPRS_Extended_Dynamic_Allocation_Capability, 1),
857
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400858 M_NEXT_EXIST_OR_NULL(Multislot_capability_t, Exist_SM, 2),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300859 M_UINT (Multislot_capability_t, SMS_VALUE, 4),
860 M_UINT (Multislot_capability_t, SM_VALUE, 4),
861
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400862 M_NEXT_EXIST_OR_NULL(Multislot_capability_t, Exist_ECSD_multislot_class, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300863 M_UINT (Multislot_capability_t, ECSD_multislot_class, 5),
864
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400865 M_NEXT_EXIST_OR_NULL(Multislot_capability_t, Exist_EGPRS_multislot_class, 2),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300866 M_UINT (Multislot_capability_t, EGPRS_multislot_class, 5),
867 M_UINT (Multislot_capability_t, EGPRS_Extended_Dynamic_Allocation_Capability, 1),
868
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400869 M_NEXT_EXIST_OR_NULL(Multislot_capability_t, Exist_DTM_GPRS_multislot_class, 3),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300870 M_UINT (Multislot_capability_t, DTM_GPRS_multislot_class, 2),
871 M_UINT (Multislot_capability_t, Single_Slot_DTM, 1),
872 M_TYPE (Multislot_capability_t, DTM_EGPRS_Params, DTM_EGPRS_t),
873CSN_DESCR_END (Multislot_capability_t)
874
875static const
876CSN_DESCR_BEGIN (Content_t)
877 M_UINT (Content_t, RF_Power_Capability, 3),
878
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400879 M_NEXT_EXIST_OR_NULL(Content_t, Exist_A5_bits, 1),
880 M_UINT_OR_NULL (Content_t, A5_bits, 7),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300881
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400882 M_UINT_OR_NULL (Content_t, ES_IND, 1),
883 M_UINT_OR_NULL (Content_t, PS, 1),
884 M_UINT_OR_NULL (Content_t, VGCS, 1),
885 M_UINT_OR_NULL (Content_t, VBS, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300886
887 M_NEXT_EXIST_OR_NULL(Content_t, Exist_Multislot_capability, 1),
888 M_TYPE (Content_t, Multislot_capability, Multislot_capability_t),
889
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400890 M_NEXT_EXIST_OR_NULL(Content_t, Exist_Eight_PSK_Power_Capability, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300891 M_UINT (Content_t, Eight_PSK_Power_Capability, 2),
892
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400893 M_UINT_OR_NULL (Content_t, COMPACT_Interference_Measurement_Capability, 1),
894 M_UINT_OR_NULL (Content_t, Revision_Level_Indicator, 1),
895 M_UINT_OR_NULL (Content_t, UMTS_FDD_Radio_Access_Technology_Capability, 1),
896 M_UINT_OR_NULL (Content_t, UMTS_384_TDD_Radio_Access_Technology_Capability, 1),
897 M_UINT_OR_NULL (Content_t, CDMA2000_Radio_Access_Technology_Capability, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300898
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400899 M_UINT_OR_NULL (Content_t, UMTS_128_TDD_Radio_Access_Technology_Capability, 1),
900 M_UINT_OR_NULL (Content_t, GERAN_Feature_Package_1, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300901
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400902 M_NEXT_EXIST_OR_NULL(Content_t, Exist_Extended_DTM_multislot_class, 2),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300903 M_UINT (Content_t, Extended_DTM_GPRS_multislot_class, 2),
904 M_UINT (Content_t, Extended_DTM_EGPRS_multislot_class, 2),
905
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400906 M_UINT_OR_NULL (Content_t, Modulation_based_multislot_class_support, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300907
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400908 M_NEXT_EXIST_OR_NULL(Content_t, Exist_HighMultislotCapability, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300909 M_UINT (Content_t, HighMultislotCapability, 2),
910
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400911 M_NEXT_EXIST_OR_NULL(Content_t, Exist_GERAN_lu_ModeCapability, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300912 M_UINT (Content_t, GERAN_lu_ModeCapability, 4),
913
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400914 M_UINT_OR_NULL (Content_t, GMSK_MultislotPowerProfile, 2),
915 M_UINT_OR_NULL (Content_t, EightPSK_MultislotProfile, 2),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300916
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400917 M_UINT_OR_NULL (Content_t, MultipleTBF_Capability, 1),
918 M_UINT_OR_NULL (Content_t, DownlinkAdvancedReceiverPerformance, 2),
919 M_UINT_OR_NULL (Content_t, ExtendedRLC_MAC_ControlMessageSegmentionsCapability, 1),
920 M_UINT_OR_NULL (Content_t, DTM_EnhancementsCapability, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300921
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400922 M_NEXT_EXIST_OR_NULL(Content_t, Exist_DTM_GPRS_HighMultislotClass, 2),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300923 M_UINT (Content_t, DTM_GPRS_HighMultislotClass, 3),
924 M_TYPE (Content_t, DTM_EGPRS_HighMultislotClass, DTM_EGPRS_HighMultislotClass_t),
925
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +0400926 M_UINT_OR_NULL (Content_t, PS_HandoverCapability, 1),
Vincent Helfre1145fd22020-01-28 18:27:49 +0100927
928 /* additions in release 7 */
929 M_UINT_OR_NULL (Content_t, DTM_Handover_Capability, 1),
930 M_NEXT_EXIST_OR_NULL(Content_t, Exist_DownlinkDualCarrierCapability_r7, 1),
931 M_TYPE (Content_t, DownlinkDualCarrierCapability_r7, DownlinkDualCarrierCapability_r7_t),
932
933 M_UINT_OR_NULL (Content_t, FlexibleTimeslotAssignment, 1),
934 M_UINT_OR_NULL (Content_t, GAN_PS_HandoverCapability, 1),
935 M_UINT_OR_NULL (Content_t, RLC_Non_persistentMode, 1),
936 M_UINT_OR_NULL (Content_t, ReducedLatencyCapability, 1),
937 M_UINT_OR_NULL (Content_t, UplinkEGPRS2, 2),
938 M_UINT_OR_NULL (Content_t, DownlinkEGPRS2, 2),
939
940 /* additions in release 8 */
941 M_UINT_OR_NULL (Content_t, EUTRA_FDD_Support, 1),
942 M_UINT_OR_NULL (Content_t, EUTRA_TDD_Support, 1),
943 M_UINT_OR_NULL (Content_t, GERAN_To_EUTRAN_supportInGERAN_PTM, 2),
944 M_UINT_OR_NULL (Content_t, PriorityBasedReselectionSupport, 1),
945
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300946CSN_DESCR_END (Content_t)
947
Pau Espin Pedrol007056e2020-03-26 15:03:33 +0100948gint16 Content_Dissector(csnStream_t* ar, struct bitvec *vector, unsigned *readIndex, void* data)
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300949{
950 if (ar->direction == 0)
951 {
952 return csnStreamEncoder(ar, CSNDESCR(Content_t), vector, readIndex, data);
953 }
954 else
955 {
956 return csnStreamDecoder(ar, CSNDESCR(Content_t), vector, readIndex, data);
957 }
958}
959
960static const
961CSN_DESCR_BEGIN (Additional_access_technologies_struct_t)
962 M_UINT (Additional_access_technologies_struct_t, Access_Technology_Type, 4),
963 M_UINT (Additional_access_technologies_struct_t, GMSK_Power_class, 3),
964 M_UINT (Additional_access_technologies_struct_t, Eight_PSK_Power_class, 2),
965CSN_DESCR_END (Additional_access_technologies_struct_t)
966
967static const
968CSN_DESCR_BEGIN (Additional_access_technologies_t)
Pau Espin Pedrol81b40cb2020-03-23 15:23:51 +0100969 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 +0300970CSN_DESCR_END (Additional_access_technologies_t)
971
Pau Espin Pedrol007056e2020-03-26 15:03:33 +0100972static gint16 Additional_access_technologies_Dissector(csnStream_t* ar, struct bitvec *vector, unsigned *readIndex, void* data)
Ivan Kluchnikov487a1412011-12-21 13:17:53 +0300973{
974 if (ar->direction == 0)
975 {
976 return csnStreamEncoder(ar, CSNDESCR(Additional_access_technologies_t), vector, readIndex, data);
977 }
978 else
979 {
980 return csnStreamDecoder(ar, CSNDESCR(Additional_access_technologies_t), vector, readIndex, data);
981 }
982}
983
984static const
985CSN_ChoiceElement_t MS_RA_capability_value_Choice[] =
986{
Pau Espin Pedrol7cce8252020-01-24 16:41:14 +0100987 {4, AccTech_GSMP, 0, M_SERIALIZE (MS_RA_capability_value_t, u.Content, 7, Content_Dissector)}, /* Long Form */
988 {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 +0100989 {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 +0100990 {4, AccTech_GSM1800, 0, M_SERIALIZE (MS_RA_capability_value_t, u.Content, 7, Content_Dissector)}, /* Long Form */
991 {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 +0100992 {4, AccTech_GSM450, 0, M_SERIALIZE (MS_RA_capability_value_t, u.Content, 7, Content_Dissector)}, /* Long Form */
993 {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 +0100994 {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 +0100995 {4, AccTech_GSM750, 0, M_SERIALIZE (MS_RA_capability_value_t, u.Content, 7, Content_Dissector)}, /* Long Form */
996 {4, AccTech_GSMT830, 0, M_SERIALIZE (MS_RA_capability_value_t, u.Content, 7, Content_Dissector)}, /* Long Form */
997 {4, AccTech_GSMT410, 0, M_SERIALIZE (MS_RA_capability_value_t, u.Content, 7, Content_Dissector)}, /* Long Form */
998 {4, AccTech_GSMT900, 0, M_SERIALIZE (MS_RA_capability_value_t, u.Content, 7, Content_Dissector)}, /* Long Form */
999 {4, AccTech_GSM710, 0, M_SERIALIZE (MS_RA_capability_value_t, u.Content, 7, Content_Dissector)}, /* Long Form */
1000 {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 +01001001 {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 +03001002};
1003
1004static const
1005CSN_DESCR_BEGIN(MS_RA_capability_value_t)
1006 M_CHOICE (MS_RA_capability_value_t, IndexOfAccTech, MS_RA_capability_value_Choice, ElementsOf(MS_RA_capability_value_Choice)),
1007CSN_DESCR_END (MS_RA_capability_value_t)
1008
1009static const
1010CSN_DESCR_BEGIN (MS_Radio_Access_capability_t)
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04001011 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 +01001012 M_PADDING_BITS(MS_Radio_Access_capability_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001013CSN_DESCR_END (MS_Radio_Access_capability_t)
1014
Pau Espin Pedrole50ce6e2020-03-23 18:49:16 +01001015/* TS44.060 section 12.30 "MS Radio Access Capability 2". Same as above but without spare bits */
1016static const
1017CSN_DESCR_BEGIN (MS_Radio_Access_capability2_t)
1018 M_REC_TARRAY_1(MS_Radio_Access_capability_t, MS_RA_capability_value, MS_RA_capability_value_t, Count_MS_RA_capability_value),
1019CSN_DESCR_END (MS_Radio_Access_capability2_t)
1020
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001021/*< MS Classmark 3 IE >*/
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01001022#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001023static const
1024CSN_DESCR_BEGIN(ARC_t)
1025 M_UINT (ARC_t, A5_Bits, 4),
1026 M_UINT (ARC_t, Arc2_Spare, 4),
1027 M_UINT (ARC_t, Arc1, 4),
1028CSN_DESCR_END (ARC_t)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01001029#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001030
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01001031#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001032static const
1033CSN_ChoiceElement_t MultibandChoice[] =
1034{
Pau Espin Pedrol7cce8252020-01-24 16:41:14 +01001035 {3, 0x00, 0, M_UINT(Multiband_t, u.A5_Bits, 4)},
1036 {3, 0x05, 0, M_TYPE(Multiband_t, u.ARC, ARC_t)},
1037 {3, 0x06, 0, M_TYPE(Multiband_t, u.ARC, ARC_t)},
1038 {3, 0x01, 0, M_TYPE(Multiband_t, u.ARC, ARC_t)},
1039 {3, 0x02, 0, M_TYPE(Multiband_t, u.ARC, ARC_t)},
1040 {3, 0x04, 0, M_TYPE(Multiband_t, u.ARC, ARC_t)},
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001041};
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01001042#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001043
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01001044#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001045static const
1046CSN_DESCR_BEGIN(Multiband_t)
1047 M_CHOICE (Multiband_t, Multiband, MultibandChoice, ElementsOf(MultibandChoice)),
1048CSN_DESCR_END (Multiband_t)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01001049#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001050
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01001051#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001052static const
1053CSN_DESCR_BEGIN(EDGE_RF_Pwr_t)
1054 M_NEXT_EXIST (EDGE_RF_Pwr_t, ExistEDGE_RF_PwrCap1, 1),
1055 M_UINT (EDGE_RF_Pwr_t, EDGE_RF_PwrCap1, 2),
1056
1057 M_NEXT_EXIST (EDGE_RF_Pwr_t, ExistEDGE_RF_PwrCap2, 1),
1058 M_UINT (EDGE_RF_Pwr_t, EDGE_RF_PwrCap2, 2),
1059CSN_DESCR_END (EDGE_RF_Pwr_t)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01001060#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001061
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01001062#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001063static const
1064CSN_DESCR_BEGIN(MS_Class3_Unpacked_t)
1065 M_UINT (MS_Class3_Unpacked_t, Spare1, 1),
1066 M_TYPE (MS_Class3_Unpacked_t, Multiband, Multiband_t),
1067
1068 M_NEXT_EXIST (MS_Class3_Unpacked_t, Exist_R_Support, 1),
1069 M_UINT (MS_Class3_Unpacked_t, R_GSM_Arc, 3),
1070
1071 M_NEXT_EXIST (MS_Class3_Unpacked_t, Exist_MultiSlotCapability, 1),
1072 M_UINT (MS_Class3_Unpacked_t, MultiSlotClass, 5),
1073
1074 M_UINT (MS_Class3_Unpacked_t, UCS2, 1),
1075 M_UINT (MS_Class3_Unpacked_t, ExtendedMeasurementCapability, 1),
1076
1077 M_NEXT_EXIST (MS_Class3_Unpacked_t, Exist_MS_MeasurementCapability, 2),
1078 M_UINT (MS_Class3_Unpacked_t, SMS_VALUE, 4),
1079 M_UINT (MS_Class3_Unpacked_t, SM_VALUE, 4),
1080
1081 M_NEXT_EXIST (MS_Class3_Unpacked_t, Exist_MS_PositioningMethodCapability, 1),
1082 M_UINT (MS_Class3_Unpacked_t, MS_PositioningMethod, 5),
1083
1084 M_NEXT_EXIST (MS_Class3_Unpacked_t, Exist_EDGE_MultiSlotCapability, 1),
1085 M_UINT (MS_Class3_Unpacked_t, EDGE_MultiSlotClass, 5),
1086
1087 M_NEXT_EXIST (MS_Class3_Unpacked_t, Exist_EDGE_Struct, 2),
1088 M_UINT (MS_Class3_Unpacked_t, ModulationCapability, 1),
1089 M_TYPE (MS_Class3_Unpacked_t, EDGE_RF_PwrCaps, EDGE_RF_Pwr_t),
1090
1091 M_NEXT_EXIST (MS_Class3_Unpacked_t, Exist_GSM400_Info, 2),
1092 M_UINT (MS_Class3_Unpacked_t, GSM400_Bands, 2),
1093 M_UINT (MS_Class3_Unpacked_t, GSM400_Arc, 4),
1094
1095 M_NEXT_EXIST (MS_Class3_Unpacked_t, Exist_GSM850_Arc, 1),
1096 M_UINT (MS_Class3_Unpacked_t, GSM850_Arc, 4),
1097
1098 M_NEXT_EXIST (MS_Class3_Unpacked_t, Exist_PCS1900_Arc, 1),
1099 M_UINT (MS_Class3_Unpacked_t, PCS1900_Arc, 4),
1100
1101 M_UINT (MS_Class3_Unpacked_t, UMTS_FDD_Radio_Access_Technology_Capability, 1),
1102 M_UINT (MS_Class3_Unpacked_t, UMTS_384_TDD_Radio_Access_Technology_Capability, 1),
1103 M_UINT (MS_Class3_Unpacked_t, CDMA2000_Radio_Access_Technology_Capability, 1),
1104
1105 M_NEXT_EXIST (MS_Class3_Unpacked_t, Exist_DTM_GPRS_multislot_class, 3),
1106 M_UINT (MS_Class3_Unpacked_t, DTM_GPRS_multislot_class, 2),
1107 M_UINT (MS_Class3_Unpacked_t, Single_Slot_DTM, 1),
1108 M_TYPE (MS_Class3_Unpacked_t, DTM_EGPRS_Params, DTM_EGPRS_t),
1109
1110 M_NEXT_EXIST (MS_Class3_Unpacked_t, Exist_SingleBandSupport, 1),
1111 M_UINT (MS_Class3_Unpacked_t, GSM_Band, 4),
1112
1113 M_NEXT_EXIST (MS_Class3_Unpacked_t, Exist_GSM_700_Associated_Radio_Capability, 1),
1114 M_UINT (MS_Class3_Unpacked_t, GSM_700_Associated_Radio_Capability, 4),
1115
1116 M_UINT (MS_Class3_Unpacked_t, UMTS_128_TDD_Radio_Access_Technology_Capability, 1),
1117 M_UINT (MS_Class3_Unpacked_t, GERAN_Feature_Package_1, 1),
1118
1119 M_NEXT_EXIST (MS_Class3_Unpacked_t, Exist_Extended_DTM_multislot_class, 2),
1120 M_UINT (MS_Class3_Unpacked_t, Extended_DTM_GPRS_multislot_class, 2),
1121 M_UINT (MS_Class3_Unpacked_t, Extended_DTM_EGPRS_multislot_class, 2),
1122
1123 M_NEXT_EXIST (MS_Class3_Unpacked_t, Exist_HighMultislotCapability, 1),
1124 M_UINT (MS_Class3_Unpacked_t, HighMultislotCapability, 2),
1125
1126 M_NEXT_EXIST (MS_Class3_Unpacked_t, Exist_GERAN_lu_ModeCapability, 1),
1127 M_UINT (MS_Class3_Unpacked_t, GERAN_lu_ModeCapability, 4),
1128
1129 M_UINT (MS_Class3_Unpacked_t, GERAN_FeaturePackage_2, 1),
1130
1131 M_UINT (MS_Class3_Unpacked_t, GMSK_MultislotPowerProfile, 2),
1132 M_UINT (MS_Class3_Unpacked_t, EightPSK_MultislotProfile, 2),
1133
1134 M_NEXT_EXIST (MS_Class3_Unpacked_t, Exist_TGSM_400_Bands, 2),
1135 M_UINT (MS_Class3_Unpacked_t, TGSM_400_BandsSupported, 2),
1136 M_UINT (MS_Class3_Unpacked_t, TGSM_400_AssociatedRadioCapability, 4),
1137
1138 M_NEXT_EXIST (MS_Class3_Unpacked_t, Exist_TGSM_900_AssociatedRadioCapability, 1),
1139 M_UINT (MS_Class3_Unpacked_t, TGSM_900_AssociatedRadioCapability, 4),
1140
1141 M_UINT (MS_Class3_Unpacked_t, DownlinkAdvancedReceiverPerformance, 2),
1142 M_UINT (MS_Class3_Unpacked_t, DTM_EnhancementsCapability, 1),
1143
1144 M_NEXT_EXIST (MS_Class3_Unpacked_t, Exist_DTM_GPRS_HighMultislotClass, 3),
1145 M_UINT (MS_Class3_Unpacked_t, DTM_GPRS_HighMultislotClass, 3),
1146 M_UINT (MS_Class3_Unpacked_t, OffsetRequired, 1),
1147 M_TYPE (MS_Class3_Unpacked_t, DTM_EGPRS_HighMultislotClass, DTM_EGPRS_HighMultislotClass_t),
1148
1149 M_UINT (MS_Class3_Unpacked_t, RepeatedSACCH_Capability, 1),
1150 M_UINT (MS_Class3_Unpacked_t, Spare2, 1),
1151CSN_DESCR_END (MS_Class3_Unpacked_t)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01001152#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001153
1154static const
1155CSN_DESCR_BEGIN(Channel_Request_Description_t)
1156 M_UINT (Channel_Request_Description_t, PEAK_THROUGHPUT_CLASS, 4),
1157 M_UINT (Channel_Request_Description_t, RADIO_PRIORITY, 2),
Anders Broman8ea3cbe2020-01-28 17:36:33 +01001158 M_UINT (Channel_Request_Description_t, RLC_MODE, 1),
1159 M_UINT (Channel_Request_Description_t, LLC_PDU_TYPE, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001160 M_UINT (Channel_Request_Description_t, RLC_OCTET_COUNT, 16),
1161CSN_DESCR_END (Channel_Request_Description_t)
1162
1163/* < Packet Resource Request message content > */
1164static const
1165CSN_ChoiceElement_t PacketResourceRequestID[] =
1166{
Pau Espin Pedrol7cce8252020-01-24 16:41:14 +01001167 {1, 0, 0, M_TYPE(PacketResourceRequestID_t, u.Global_TFI, Global_TFI_t)},
1168 {1, 0x01, 0, M_UINT(PacketResourceRequestID_t, u.TLLI, 32)},
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001169};
1170
1171static const
1172CSN_DESCR_BEGIN(PacketResourceRequestID_t)
1173 M_CHOICE (PacketResourceRequestID_t, UnionType, PacketResourceRequestID, ElementsOf(PacketResourceRequestID)),
1174CSN_DESCR_END (PacketResourceRequestID_t)
1175
1176static const
1177CSN_DESCR_BEGIN(BEP_MeasurementReport_t)
1178 M_NEXT_EXIST (BEP_MeasurementReport_t, Exist, 3),
1179 M_UNION (BEP_MeasurementReport_t, 2),
1180 M_UINT (BEP_MeasurementReport_t, u.MEAN_BEP_GMSK, 4),
1181 M_UINT (BEP_MeasurementReport_t, u.MEAN_BEP_8PSK, 4),
1182CSN_DESCR_END (BEP_MeasurementReport_t)
1183
1184static const
1185CSN_DESCR_BEGIN(InterferenceMeasurementReport_t)
1186 M_NEXT_EXIST (InterferenceMeasurementReport_t, Exist, 1),
1187 M_UINT (InterferenceMeasurementReport_t, I_LEVEL, 4),
1188CSN_DESCR_END (InterferenceMeasurementReport_t)
1189
1190static const
1191CSN_DESCR_BEGIN(EGPRS_TimeslotLinkQualityMeasurements_t)
1192 M_NEXT_EXIST (EGPRS_TimeslotLinkQualityMeasurements_t, Exist_BEP_MEASUREMENTS, 1),
1193 M_TYPE_ARRAY (EGPRS_TimeslotLinkQualityMeasurements_t, BEP_MEASUREMENTS, BEP_MeasurementReport_t, 8),
1194
1195 M_NEXT_EXIST (EGPRS_TimeslotLinkQualityMeasurements_t, Exist_INTERFERENCE_MEASUREMENTS, 1),
1196 M_TYPE_ARRAY (EGPRS_TimeslotLinkQualityMeasurements_t, INTERFERENCE_MEASUREMENTS, InterferenceMeasurementReport_t, 8),
1197CSN_DESCR_END (EGPRS_TimeslotLinkQualityMeasurements_t)
1198
1199static const
1200CSN_DESCR_BEGIN(EGPRS_BEP_LinkQualityMeasurements_t)
1201 M_NEXT_EXIST (EGPRS_BEP_LinkQualityMeasurements_t, Exist_MEAN_CV_BEP_GMSK, 2),
1202 M_UINT (EGPRS_BEP_LinkQualityMeasurements_t, MEAN_BEP_GMSK, 5),
1203 M_UINT (EGPRS_BEP_LinkQualityMeasurements_t, CV_BEP_GMSK, 3),
1204
1205 M_NEXT_EXIST (EGPRS_BEP_LinkQualityMeasurements_t, Exist_MEAN_CV_BEP_8PSK, 2),
1206 M_UINT (EGPRS_BEP_LinkQualityMeasurements_t, MEAN_BEP_8PSK, 5),
1207 M_UINT (EGPRS_BEP_LinkQualityMeasurements_t, CV_BEP_8PSK, 3),
1208CSN_DESCR_END (EGPRS_BEP_LinkQualityMeasurements_t)
1209
1210static const
AndersBroman2d075be2020-01-28 19:01:50 +01001211CSN_DESCR_BEGIN(IU_Mode_Channel_Request_Desk_t)
1212
1213 M_UINT (IU_Mode_Channel_Request_Desk_t, RB_ID, 5),
1214 M_UINT (IU_Mode_Channel_Request_Desk_t, RADIO_PRIORITY, 2),
1215
1216 M_NEXT_EXIST (IU_Mode_Channel_Request_Desk_t, Exist_RLC_BLOCK_COUNT, 1),
1217 M_UINT (IU_Mode_Channel_Request_Desk_t, RLC_BLOCK_COUNT, 8),
1218
Pascal Quantinfa5f91c2020-01-28 19:11:37 +01001219 /* Don't use M_REC_TARRAY as we don't support multiple TBFs
1220 M_NEXT_EXIST (IU_Mode_Channel_Request_Desk_t, Exist_Iu_Mode_ChRequestDesk, 1),
1221 M_TYPE (IU_Mode_Channel_Request_Desk1, IU_Mode_Channel_Request_Desk_t),*/
1222 M_UINT (IU_Mode_Channel_Request_Desk_t, Exist_Iu_Mode_ChRequestDesk, 1),
AndersBroman2d075be2020-01-28 19:01:50 +01001223
1224CSN_DESCR_END (IU_Mode_Channel_Request_Desk_t)
1225
1226static const
1227CSN_DESCR_BEGIN(IU_Mode_Channel_Request_Desk_RNTI_t)
1228
1229 M_NEXT_EXIST (IU_Mode_Channel_Request_Desk_RNTI_t, Exist_G_RNTI_Extension, 1),
1230 M_UINT (IU_Mode_Channel_Request_Desk_RNTI_t, G_RNTI_Extension, 4),
1231
1232 M_TYPE (IU_Mode_Channel_Request_Desk_RNTI_t, IU_Mode_Channel_Request_Desk, IU_Mode_Channel_Request_Desk_t),
1233
1234CSN_DESCR_END (IU_Mode_Channel_Request_Desk_RNTI_t)
1235
1236
1237static const
1238CSN_DESCR_BEGIN(Ext_Channel_Request_desc_t)
1239
1240 M_UINT (Ext_Channel_Request_desc_t, PFI, 7),
1241 M_UINT (Ext_Channel_Request_desc_t, RADIO_PRIORITY, 2),
1242 M_UINT (Ext_Channel_Request_desc_t, RLC_Mode, 1),
1243
1244 M_NEXT_EXIST (Ext_Channel_Request_desc_t, Exist_LCC_PDU, 1),
1245 M_UINT (Ext_Channel_Request_desc_t, LCC_PDU, 1),
1246
Pascal Quantinfb656822020-01-28 19:13:20 +01001247 /* Don't use M_REC_TARRAY as we don't support multiple TBFs
1248 M_NEXT_EXIST (Ext_Channel_Request_desc_t, Exist_Ext_Channel_Request_desc, 1),
1249 M_TYPE (Ext_Channel_Request_desc_t, Ext_Channel_Request_desc, Ext_Channel_Request_desc_t),*/
1250 M_UINT (Ext_Channel_Request_desc_t, Exist_Ext_Channel_Request_desc, 1),
AndersBroman2d075be2020-01-28 19:01:50 +01001251
1252CSN_DESCR_END (Ext_Channel_Request_desc_t)
1253
1254static const
1255CSN_DESCR_BEGIN(EGPRS_BEP_LinkQualityMeasurements_type2_t)
1256
1257 M_NEXT_EXIST (EGPRS_BEP_LinkQualityMeasurements_type2_t, Exist_GMSK_MEAN_BEP, 1),
1258 M_UINT (EGPRS_BEP_LinkQualityMeasurements_type2_t, GMSK_MEAN_BEP, 5),
1259 M_UINT (EGPRS_BEP_LinkQualityMeasurements_type2_t, GMSK_CV_BEP, 3),
1260
1261 M_NEXT_EXIST (EGPRS_BEP_LinkQualityMeasurements_type2_t, Exist_8PSK_MEAN_BEP, 1),
1262 M_UINT (EGPRS_BEP_LinkQualityMeasurements_type2_t, p8PSK_MEAN_BEP, 5),
1263 M_UINT (EGPRS_BEP_LinkQualityMeasurements_type2_t, p8PSK_CV_BEP, 3),
1264
1265 M_NEXT_EXIST (EGPRS_BEP_LinkQualityMeasurements_type2_t, Exist_QPSK_MEAN_BEP, 1),
1266 M_UINT (EGPRS_BEP_LinkQualityMeasurements_type2_t, QPSK_MEAN_BEP, 5),
1267 M_UINT (EGPRS_BEP_LinkQualityMeasurements_type2_t, QPSK_CV_BEP, 3),
1268
1269 M_NEXT_EXIST (EGPRS_BEP_LinkQualityMeasurements_type2_t, Exist_16QAM_NSR_MEAN_BEP, 1),
1270 M_UINT (EGPRS_BEP_LinkQualityMeasurements_type2_t, p16QAM_NSR_MEAN_BEP, 5),
1271 M_UINT (EGPRS_BEP_LinkQualityMeasurements_type2_t, p16QAM_NSR_CV_BEP, 3),
1272
1273 M_NEXT_EXIST (EGPRS_BEP_LinkQualityMeasurements_type2_t, Exist_32QAM_NSR_MEAN_BEP, 1),
1274 M_UINT (EGPRS_BEP_LinkQualityMeasurements_type2_t, p32QAM_NSR_MEAN_BEP, 5),
1275 M_UINT (EGPRS_BEP_LinkQualityMeasurements_type2_t, p32QAM_NSR_CV_BEP, 3),
1276
1277 M_NEXT_EXIST (EGPRS_BEP_LinkQualityMeasurements_type2_t, Exist_16QAM_HSR_MEAN_BEP, 1),
1278 M_UINT (EGPRS_BEP_LinkQualityMeasurements_type2_t, p16QAM_HSR_MEAN_BEP, 5),
1279 M_UINT (EGPRS_BEP_LinkQualityMeasurements_type2_t, p16QAM_HSR_CV_BEP, 3),
1280
1281 M_NEXT_EXIST (EGPRS_BEP_LinkQualityMeasurements_type2_t, Exist_32QAM_HSR_MEAN_BEP, 1),
1282 M_UINT (EGPRS_BEP_LinkQualityMeasurements_type2_t, p32QAM_HSR_MEAN_BEP, 5),
1283 M_UINT (EGPRS_BEP_LinkQualityMeasurements_type2_t, p32QAM_HSR_CV_BEP, 3),
1284
1285CSN_DESCR_END (EGPRS_BEP_LinkQualityMeasurements_type2_t)
1286
1287static const
1288CSN_DESCR_BEGIN(BEP_MeasurementReport_type2_t)
1289 M_NEXT_EXIST (BEP_MeasurementReport_type2_t, Exist, 1),
1290 M_UINT (BEP_MeasurementReport_type2_t, REPORTED_MODULATION, 2),
1291 M_UINT (BEP_MeasurementReport_type2_t, MEAN_BEP_TN, 4),
1292CSN_DESCR_END (BEP_MeasurementReport_type2_t)
1293
1294static const
1295CSN_DESCR_BEGIN(InterferenceMeasurementReport_type2_t)
1296 M_NEXT_EXIST (InterferenceMeasurementReport_type2_t, Exist, 1),
1297 M_UINT (InterferenceMeasurementReport_type2_t, I_LEVEL, 4),
1298CSN_DESCR_END (InterferenceMeasurementReport_type2_t)
1299static const
1300CSN_DESCR_BEGIN(EGPRS_TimeslotLinkQualityMeasurements_type2_t)
1301 M_NEXT_EXIST (EGPRS_TimeslotLinkQualityMeasurements_type2_t, Exist_BEP_MEASUREMENTS, 1),
1302 M_TYPE_ARRAY (EGPRS_TimeslotLinkQualityMeasurements_type2_t, BEP_MEASUREMENTS, BEP_MeasurementReport_type2_t, 8),
1303
1304 M_NEXT_EXIST (EGPRS_TimeslotLinkQualityMeasurements_type2_t, Exist_INTERFERENCE_MEASUREMENTS, 1),
1305 M_TYPE_ARRAY (EGPRS_TimeslotLinkQualityMeasurements_type2_t, INTERFERENCE_MEASUREMENTS, InterferenceMeasurementReport_type2_t, 8),
1306CSN_DESCR_END (EGPRS_TimeslotLinkQualityMeasurements_type2_t)
1307
1308static const
1309CSN_DESCR_BEGIN(PRR_AdditionsR12_t)
1310
1311 M_NEXT_EXIST (PRR_AdditionsR12_t, Exist_Downlink_eTFI, 1),
1312 M_UINT (PRR_AdditionsR12_t, DOWNLINK_ETFI, 3),
1313
1314CSN_DESCR_END (PRR_AdditionsR12_t)
1315
1316static const
1317CSN_DESCR_BEGIN(PRR_AdditionsR10_t)
1318 M_UINT (PRR_AdditionsR10_t, LOW_ACCESS_PRIORITY_SIGNALLING, 1),
1319
1320 M_NEXT_EXIST_OR_NULL(PRR_AdditionsR10_t, Exist_AdditionsR12, 1),
1321 M_TYPE (PRR_AdditionsR10_t, AdditionsR12, PRR_AdditionsR12_t),
1322
1323CSN_DESCR_END (PRR_AdditionsR10_t)
1324
1325static const
1326CSN_DESCR_BEGIN(PRR_AdditionsR7_t)
1327 M_UINT (PRR_AdditionsR7_t, EARLY_TBF_ESTABLISHMENT, 1),
1328
1329 M_NEXT_EXIST (PRR_AdditionsR7_t, Exist_EGPRS_BEP_LinkQualityMeasurements_type2, 1),
1330 M_TYPE (PRR_AdditionsR7_t, EGPRS_BEP_LinkQualityMeasurements_type2, EGPRS_BEP_LinkQualityMeasurements_type2_t),
1331
1332 M_NEXT_EXIST (PRR_AdditionsR7_t, Exist_EGPRS_TimeslotLinkQualityMeasurements_type2, 1),
1333 M_TYPE (PRR_AdditionsR7_t, EGPRS_TimeslotLinkQualityMeasurements_type2, EGPRS_TimeslotLinkQualityMeasurements_type2_t),
1334
1335 M_NEXT_EXIST_OR_NULL(PRR_AdditionsR7_t, Exist_AdditionsR10, 1),
1336 M_TYPE (PRR_AdditionsR7_t, AdditionsR10, PRR_AdditionsR10_t),
1337
1338CSN_DESCR_END (PRR_AdditionsR7_t)
1339
1340static const
1341CSN_DESCR_BEGIN(PRR_AdditionsR6_t)
1342 M_NEXT_EXIST (PRR_AdditionsR6_t, Exist_Ext_Channel_Request_desc, 1),
1343 M_TYPE (PRR_AdditionsR6_t, Ext_Channel_Request_desc, Ext_Channel_Request_desc_t),
1344
1345 M_NEXT_EXIST_OR_NULL(PRR_AdditionsR6_t, Exist_AdditionsR7, 1),
1346 M_TYPE (PRR_AdditionsR6_t, AdditionsR7, PRR_AdditionsR7_t),
1347
1348CSN_DESCR_END (PRR_AdditionsR6_t)
1349
1350static const
1351CSN_DESCR_BEGIN(PRR_AdditionsR5_t)
1352 M_NEXT_EXIST (PRR_AdditionsR5_t, Exist_Iu_Mode_ChRequestDesk, 1),
1353 M_TYPE (PRR_AdditionsR5_t, IU_Mode_Channel_Request_Desk_RNTI, IU_Mode_Channel_Request_Desk_RNTI_t),
1354
1355 M_NEXT_EXIST (PRR_AdditionsR5_t, Exist_HFN_LSB, 1),
1356 M_UINT (PRR_AdditionsR5_t, HFN_LSb, 7),
1357
1358 M_NEXT_EXIST_OR_NULL(PRR_AdditionsR5_t, Exist_AdditionsR6, 1),
1359 M_TYPE (PRR_AdditionsR5_t, AdditionsR6, PRR_AdditionsR6_t),
1360CSN_DESCR_END (PRR_AdditionsR5_t)
1361
1362static const
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001363CSN_DESCR_BEGIN(PRR_AdditionsR99_t)
1364 M_NEXT_EXIST (PRR_AdditionsR99_t, Exist_EGPRS_BEP_LinkQualityMeasurements, 1),
1365 M_TYPE (PRR_AdditionsR99_t, EGPRS_BEP_LinkQualityMeasurements, EGPRS_BEP_LinkQualityMeasurements_t),
1366
1367 M_NEXT_EXIST (PRR_AdditionsR99_t, Exist_EGPRS_TimeslotLinkQualityMeasurements, 1),
1368 M_TYPE (PRR_AdditionsR99_t, EGPRS_TimeslotLinkQualityMeasurements, EGPRS_TimeslotLinkQualityMeasurements_t),
1369
1370 M_NEXT_EXIST (PRR_AdditionsR99_t, Exist_PFI, 1),
1371 M_UINT (PRR_AdditionsR99_t, PFI, 7),
1372
1373 M_UINT (PRR_AdditionsR99_t, MS_RAC_AdditionalInformationAvailable, 1),
1374 M_UINT (PRR_AdditionsR99_t, RetransmissionOfPRR, 1),
AndersBroman2d075be2020-01-28 19:01:50 +01001375
1376 M_NEXT_EXIST_OR_NULL(PRR_AdditionsR99_t, Exist_AdditionsR5, 1),
1377 M_TYPE (PRR_AdditionsR99_t, AdditionsR5, PRR_AdditionsR5_t),
1378
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001379CSN_DESCR_END (PRR_AdditionsR99_t)
1380
1381static const
1382CSN_DESCR_BEGIN (Packet_Resource_Request_t)
1383 /* Mac header */
1384 M_UINT (Packet_Resource_Request_t, PayloadType, 2),
1385 M_UINT (Packet_Resource_Request_t, spare, 5),
1386 M_UINT (Packet_Resource_Request_t, R, 1),
1387 M_UINT (Packet_Resource_Request_t, MESSAGE_TYPE, 6),
1388 /* Mac header */
1389
1390 M_NEXT_EXIST (Packet_Resource_Request_t, Exist_ACCESS_TYPE, 1),
1391 M_UINT (Packet_Resource_Request_t, ACCESS_TYPE, 2),
1392
1393 M_TYPE (Packet_Resource_Request_t, ID, PacketResourceRequestID_t),
1394
Pau Espin Pedrole50ce6e2020-03-23 18:49:16 +01001395 M_NEXT_EXIST (Packet_Resource_Request_t, Exist_MS_Radio_Access_capability2, 1),
1396 M_TYPE (Packet_Resource_Request_t, MS_Radio_Access_capability2, MS_Radio_Access_capability2_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001397
1398 M_TYPE (Packet_Resource_Request_t, Channel_Request_Description, Channel_Request_Description_t),
1399
1400 M_NEXT_EXIST (Packet_Resource_Request_t, Exist_CHANGE_MARK, 1),
1401 M_UINT (Packet_Resource_Request_t, CHANGE_MARK, 2),
1402
1403 M_UINT (Packet_Resource_Request_t, C_VALUE, 6),
1404
1405 M_NEXT_EXIST (Packet_Resource_Request_t, Exist_SIGN_VAR, 1),
1406 M_UINT (Packet_Resource_Request_t, SIGN_VAR, 6),
1407
Pau Espin Pedrol0daf9132020-02-23 16:11:28 +07001408 M_TYPE_ARRAY (Packet_Resource_Request_t, I_LEVEL_TN, InterferenceMeasurementReport_t, 8),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001409
1410 M_NEXT_EXIST_OR_NULL(Packet_Resource_Request_t, Exist_AdditionsR99, 1),
1411 M_TYPE (Packet_Resource_Request_t, AdditionsR99, PRR_AdditionsR99_t),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04001412 M_PADDING_BITS (Packet_Resource_Request_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001413CSN_DESCR_END (Packet_Resource_Request_t)
1414
1415/*< Packet Mobile TBF Status message content > */
1416static const
1417CSN_DESCR_BEGIN(Packet_Mobile_TBF_Status_t)
1418 /* Mac header */
1419 M_UINT (Packet_Mobile_TBF_Status_t, PayloadType, 2),
1420 M_UINT (Packet_Mobile_TBF_Status_t, spare, 5),
1421 M_UINT (Packet_Mobile_TBF_Status_t, R, 1),
1422 M_UINT (Packet_Mobile_TBF_Status_t, MESSAGE_TYPE, 6),
1423 /* Mac header */
1424
1425 M_TYPE (Packet_Mobile_TBF_Status_t, Global_TFI, Global_TFI_t),
1426 M_UINT (Packet_Mobile_TBF_Status_t, TBF_CAUSE, 3),
1427
1428 M_NEXT_EXIST (Packet_Mobile_TBF_Status_t, Exist_STATUS_MESSAGE_TYPE, 1),
1429 M_UINT (Packet_Mobile_TBF_Status_t, STATUS_MESSAGE_TYPE, 6),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04001430 M_PADDING_BITS(Packet_Mobile_TBF_Status_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001431CSN_DESCR_END (Packet_Mobile_TBF_Status_t)
1432
1433/*< Packet PSI Status message content > */
1434static const
1435CSN_DESCR_BEGIN(PSI_Message_t)
1436 M_UINT (PSI_Message_t, PSI_MESSAGE_TYPE, 6),
1437 M_UINT (PSI_Message_t, PSIX_CHANGE_MARK, 2),
1438 M_NEXT_EXIST (PSI_Message_t, Exist_PSIX_COUNT_and_Instance_Bitmap, 2),
1439 M_FIXED (PSI_Message_t, 4, 0), /* Placeholder for PSIX_COUNT (4 bits) */
1440 M_FIXED (PSI_Message_t, 1, 0), /* Placeholder for Instance bitmap (1 bit) */
1441CSN_DESCR_END (PSI_Message_t)
1442
1443static const
1444CSN_DESCR_BEGIN(PSI_Message_List_t)
Pau Espin Pedrol81b40cb2020-03-23 15:23:51 +01001445 M_REC_TARRAY (PSI_Message_List_t, PSI_Message, PSI_Message_t, Count_PSI_Message),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001446 M_FIXED (PSI_Message_List_t, 1, 0x00),
1447 M_UINT (PSI_Message_List_t, ADDITIONAL_MSG_TYPE, 1),
1448CSN_DESCR_END (PSI_Message_List_t)
1449
1450static const
1451CSN_DESCR_BEGIN(Unknown_PSI_Message_List_t)
1452 M_FIXED (Unknown_PSI_Message_List_t, 1, 0x00),
1453 M_UINT (Unknown_PSI_Message_List_t, ADDITIONAL_MSG_TYPE, 1),
1454CSN_DESCR_END (Unknown_PSI_Message_List_t)
1455
1456static const
1457CSN_DESCR_BEGIN(Packet_PSI_Status_t)
1458 /* Mac header */
1459 M_UINT (Packet_PSI_Status_t, PayloadType, 2),
1460 M_UINT (Packet_PSI_Status_t, spare, 5),
1461 M_UINT (Packet_PSI_Status_t, R, 1),
1462 M_UINT (Packet_PSI_Status_t, MESSAGE_TYPE, 6),
1463 /* Mac header */
1464
1465 M_TYPE (Packet_PSI_Status_t, Global_TFI, Global_TFI_t),
1466 M_UINT (Packet_PSI_Status_t, PBCCH_CHANGE_MARK, 3),
1467 M_TYPE (Packet_PSI_Status_t, PSI_Message_List, PSI_Message_List_t),
1468 M_TYPE (Packet_PSI_Status_t, Unknown_PSI_Message_List, Unknown_PSI_Message_List_t),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04001469 M_PADDING_BITS(Packet_PSI_Status_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001470CSN_DESCR_END (Packet_PSI_Status_t)
1471
1472/* < Packet SI Status message content > */
1473
1474static const
1475CSN_DESCR_BEGIN(SI_Message_t)
1476 M_UINT (SI_Message_t, SI_MESSAGE_TYPE, 8),
1477 M_UINT (SI_Message_t, MESS_REC, 2),
1478CSN_DESCR_END (SI_Message_t)
1479
1480static const
1481CSN_DESCR_BEGIN(SI_Message_List_t)
Pau Espin Pedrol81b40cb2020-03-23 15:23:51 +01001482 M_REC_TARRAY (SI_Message_List_t, SI_Message, SI_Message_t, Count_SI_Message),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001483 M_FIXED (SI_Message_List_t, 1, 0x00),
1484 M_UINT (SI_Message_List_t, ADDITIONAL_MSG_TYPE, 1),
1485CSN_DESCR_END (SI_Message_List_t)
1486
1487static const
1488CSN_DESCR_BEGIN(Unknown_SI_Message_List_t)
1489 M_FIXED (Unknown_SI_Message_List_t, 1, 0x00),
1490 M_UINT (Unknown_SI_Message_List_t, ADDITIONAL_MSG_TYPE, 1),
1491CSN_DESCR_END (Unknown_SI_Message_List_t)
1492
1493static const
1494CSN_DESCR_BEGIN(Packet_SI_Status_t)
1495 /* Mac header */
1496 M_UINT (Packet_SI_Status_t, PayloadType, 2),
1497 M_UINT (Packet_SI_Status_t, spare, 5),
1498 M_UINT (Packet_SI_Status_t, R, 1),
1499 M_UINT (Packet_SI_Status_t, MESSAGE_TYPE, 6),
1500 /* Mac header */
1501
1502 M_TYPE (Packet_SI_Status_t, Global_TFI, Global_TFI_t),
1503 M_UINT (Packet_SI_Status_t, BCCH_CHANGE_MARK, 3),
1504 M_TYPE (Packet_SI_Status_t, SI_Message_List, SI_Message_List_t),
1505 M_TYPE (Packet_SI_Status_t, Unknown_SI_Message_List, Unknown_SI_Message_List_t),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04001506 M_PADDING_BITS(Packet_SI_Status_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001507CSN_DESCR_END (Packet_SI_Status_t)
1508
1509/* < Packet Downlink Ack/Nack message content > */
1510static const
1511CSN_DESCR_BEGIN(PD_AckNack_AdditionsR99_t)
1512 M_NEXT_EXIST (PD_AckNack_AdditionsR99_t, Exist_PFI, 1),
1513 M_UINT (PD_AckNack_AdditionsR99_t, PFI, 7),
1514CSN_DESCR_END (PD_AckNack_AdditionsR99_t)
1515
1516static const
1517CSN_DESCR_BEGIN (Packet_Downlink_Ack_Nack_t)
1518 M_UINT (Packet_Downlink_Ack_Nack_t, PayloadType, 2),
1519 M_UINT (Packet_Downlink_Ack_Nack_t, spare, 5),
1520 M_BIT (Packet_Downlink_Ack_Nack_t, R),
1521 M_UINT (Packet_Downlink_Ack_Nack_t, MESSAGE_TYPE, 6),
1522 M_UINT (Packet_Downlink_Ack_Nack_t, DOWNLINK_TFI, 5),
1523 M_TYPE (Packet_Downlink_Ack_Nack_t, Ack_Nack_Description, Ack_Nack_Description_t),
1524
1525 M_NEXT_EXIST (Packet_Downlink_Ack_Nack_t, Exist_Channel_Request_Description, 1),
1526 M_TYPE (Packet_Downlink_Ack_Nack_t, Channel_Request_Description, Channel_Request_Description_t),
1527
1528 M_TYPE (Packet_Downlink_Ack_Nack_t, Channel_Quality_Report, Channel_Quality_Report_t),
1529
1530 M_NEXT_EXIST_OR_NULL(Packet_Downlink_Ack_Nack_t, Exist_AdditionsR99, 1),
1531 M_TYPE (Packet_Downlink_Ack_Nack_t, AdditionsR99, PD_AckNack_AdditionsR99_t),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04001532 M_PADDING_BITS (Packet_Downlink_Ack_Nack_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001533CSN_DESCR_END (Packet_Downlink_Ack_Nack_t)
1534
1535
1536/*< EGPRS Packet Downlink Ack/Nack message content > */
1537static const
1538CSN_DESCR_BEGIN(EGPRS_ChannelQualityReport_t)
1539 M_TYPE (EGPRS_ChannelQualityReport_t, EGPRS_BEP_LinkQualityMeasurements, EGPRS_BEP_LinkQualityMeasurements_t),
1540 M_UINT (EGPRS_ChannelQualityReport_t, C_VALUE, 6),
1541 M_TYPE (EGPRS_ChannelQualityReport_t, EGPRS_TimeslotLinkQualityMeasurements, EGPRS_TimeslotLinkQualityMeasurements_t),
1542CSN_DESCR_END (EGPRS_ChannelQualityReport_t)
1543
1544static const
1545CSN_DESCR_BEGIN(EGPRS_PD_AckNack_t)
1546/* M_CALLBACK (EGPRS_PD_AckNack_t, (void*)21, IsSupported, IsSupported), */
1547 M_UINT (EGPRS_PD_AckNack_t, PayloadType, 2),
1548 M_UINT (EGPRS_PD_AckNack_t, spare, 5),
1549 M_BIT (EGPRS_PD_AckNack_t, R),
1550
1551 M_UINT (EGPRS_PD_AckNack_t, MESSAGE_TYPE, 6),
1552 M_UINT (EGPRS_PD_AckNack_t, DOWNLINK_TFI, 5),
1553 M_UINT (EGPRS_PD_AckNack_t, MS_OUT_OF_MEMORY, 1),
1554
1555 M_NEXT_EXIST (EGPRS_PD_AckNack_t, Exist_EGPRS_ChannelQualityReport, 1),
1556 M_TYPE (EGPRS_PD_AckNack_t, EGPRS_ChannelQualityReport, EGPRS_ChannelQualityReport_t),
1557
1558 M_NEXT_EXIST (EGPRS_PD_AckNack_t, Exist_ChannelRequestDescription, 1),
1559 M_TYPE (EGPRS_PD_AckNack_t, ChannelRequestDescription, Channel_Request_Description_t),
1560
1561 M_NEXT_EXIST (EGPRS_PD_AckNack_t, Exist_PFI, 1),
1562 M_UINT (EGPRS_PD_AckNack_t, PFI, 7),
1563
1564 M_NEXT_EXIST (EGPRS_PD_AckNack_t, Exist_ExtensionBits, 1),
1565 M_TYPE (EGPRS_PD_AckNack_t, ExtensionBits, Extension_Bits_t),
1566
1567 M_TYPE (EGPRS_PD_AckNack_t, EGPRS_AckNack, EGPRS_AckNack_t),
1568/* M_CALLBACK (EGPRS_PD_AckNack_t, (void*)24, EGPRS_AckNack, EGPRS_AckNack), */
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04001569 M_PADDING_BITS(EGPRS_PD_AckNack_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001570
1571CSN_DESCR_END (EGPRS_PD_AckNack_t)
1572
1573static const
1574CSN_DESCR_BEGIN(FDD_Target_Cell_t)
1575 M_UINT (FDD_Target_Cell_t, FDD_ARFCN, 14),
1576 M_UINT (FDD_Target_Cell_t, DIVERSITY, 1),
1577 M_NEXT_EXIST (FDD_Target_Cell_t, Exist_Bandwith_FDD, 1),
1578 M_UINT (FDD_Target_Cell_t, BANDWITH_FDD, 3),
1579 M_UINT (FDD_Target_Cell_t, SCRAMBLING_CODE, 9),
1580CSN_DESCR_END (FDD_Target_Cell_t)
1581
1582static const
1583CSN_DESCR_BEGIN(TDD_Target_Cell_t)
1584 M_UINT (TDD_Target_Cell_t, TDD_ARFCN, 14),
1585 M_UINT (TDD_Target_Cell_t, DIVERSITY_TDD, 1),
1586 M_NEXT_EXIST (TDD_Target_Cell_t, Exist_Bandwith_TDD, 1),
1587 M_UINT (TDD_Target_Cell_t, BANDWITH_TDD, 3),
1588 M_UINT (TDD_Target_Cell_t, CELL_PARAMETER, 7),
1589 M_UINT (TDD_Target_Cell_t, Sync_Case_TSTD, 1),
1590CSN_DESCR_END (TDD_Target_Cell_t)
1591
1592static const
1593CSN_DESCR_BEGIN(EUTRAN_Target_Cell_t)
1594 M_UINT (EUTRAN_Target_Cell_t, EARFCN, 16),
1595 M_NEXT_EXIST (EUTRAN_Target_Cell_t, Exist_Measurement_Bandwidth, 1),
1596 M_UINT (EUTRAN_Target_Cell_t, Measurement_Bandwidth, 3),
1597 M_UINT (EUTRAN_Target_Cell_t, Physical_Layer_Cell_Identity, 9),
1598CSN_DESCR_END (EUTRAN_Target_Cell_t)
1599
1600static const
1601CSN_DESCR_BEGIN(UTRAN_CSG_Target_Cell_t)
1602 M_UINT (UTRAN_CSG_Target_Cell_t, UTRAN_CI, 28),
1603 M_NEXT_EXIST (UTRAN_CSG_Target_Cell_t, Exist_PLMN_ID, 1),
1604 M_TYPE (UTRAN_CSG_Target_Cell_t, PLMN_ID, PLMN_t),
1605CSN_DESCR_END (UTRAN_CSG_Target_Cell_t)
1606
1607static const
1608CSN_DESCR_BEGIN(EUTRAN_CSG_Target_Cell_t)
1609 M_UINT (EUTRAN_CSG_Target_Cell_t, EUTRAN_CI, 28),
1610 M_UINT (EUTRAN_CSG_Target_Cell_t, Tracking_Area_Code, 16),
1611 M_NEXT_EXIST (EUTRAN_CSG_Target_Cell_t, Exist_PLMN_ID, 1),
1612 M_TYPE (EUTRAN_CSG_Target_Cell_t, PLMN_ID, PLMN_t),
1613CSN_DESCR_END (EUTRAN_CSG_Target_Cell_t)
1614
1615static const
1616CSN_DESCR_BEGIN(PCCF_AdditionsR9_t)
1617 M_NEXT_EXIST (PCCF_AdditionsR9_t, Exist_UTRAN_CSG_Target_Cell, 1),
1618 M_TYPE (PCCF_AdditionsR9_t, UTRAN_CSG_Target_Cell, UTRAN_CSG_Target_Cell_t),
1619 M_NEXT_EXIST (PCCF_AdditionsR9_t, Exist_EUTRAN_CSG_Target_Cell, 1),
1620 M_TYPE (PCCF_AdditionsR9_t, EUTRAN_CSG_Target_Cell, EUTRAN_CSG_Target_Cell_t),
1621CSN_DESCR_END (PCCF_AdditionsR9_t)
1622
1623static const
1624CSN_DESCR_BEGIN(PCCF_AdditionsR8_t)
1625 M_NEXT_EXIST (PCCF_AdditionsR8_t, Exist_EUTRAN_Target_Cell, 1),
1626 M_TYPE (PCCF_AdditionsR8_t, EUTRAN_Target_Cell, EUTRAN_Target_Cell_t),
1627 M_NEXT_EXIST_OR_NULL(PCCF_AdditionsR8_t, Exist_AdditionsR9, 1),
1628 M_TYPE (PCCF_AdditionsR8_t, AdditionsR9, PCCF_AdditionsR9_t),
1629CSN_DESCR_END (PCCF_AdditionsR8_t)
1630
1631static const
1632CSN_DESCR_BEGIN(PCCF_AdditionsR5_t)
Thorsten Alteholz8bb79042018-10-06 10:42:58 +02001633 M_NEXT_EXIST (PCCF_AdditionsR5_t, Exist_G_RNTI_extension, 1),
1634 M_UINT (PCCF_AdditionsR5_t, G_RNTI_extension, 4),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001635 M_NEXT_EXIST_OR_NULL(PCCF_AdditionsR5_t, Exist_AdditionsR8, 1),
1636 M_TYPE (PCCF_AdditionsR5_t, AdditionsR8, PCCF_AdditionsR8_t),
1637CSN_DESCR_END (PCCF_AdditionsR5_t)
1638
1639static const
1640CSN_DESCR_BEGIN(PCCF_AdditionsR99_t)
1641 M_NEXT_EXIST (PCCF_AdditionsR99_t, Exist_FDD_Description, 1),
1642 M_TYPE (PCCF_AdditionsR99_t, FDD_Target_Cell, FDD_Target_Cell_t),
1643 M_NEXT_EXIST (PCCF_AdditionsR99_t, Exist_TDD_Description, 1),
1644 M_TYPE (PCCF_AdditionsR99_t, TDD_Target_Cell, TDD_Target_Cell_t),
1645 M_NEXT_EXIST_OR_NULL(PCCF_AdditionsR99_t, Exist_AdditionsR5, 1),
1646 M_TYPE (PCCF_AdditionsR99_t, AdditionsR5, PCCF_AdditionsR5_t),
1647CSN_DESCR_END (PCCF_AdditionsR99_t)
1648
1649/*< Packet Cell Change Failure message content > */
1650static const
1651CSN_DESCR_BEGIN(Packet_Cell_Change_Failure_t)
1652 /* Mac header */
1653 M_UINT (Packet_Cell_Change_Failure_t, PayloadType, 2),
1654 M_UINT (Packet_Cell_Change_Failure_t, spare, 5),
1655 M_UINT (Packet_Cell_Change_Failure_t, R, 1),
1656 M_UINT (Packet_Cell_Change_Failure_t, MESSAGE_TYPE, 6),
1657 /* Mac header */
1658
1659 M_UINT (Packet_Cell_Change_Failure_t, TLLI, 32),
1660 M_UINT (Packet_Cell_Change_Failure_t, ARFCN, 10),
1661 M_UINT (Packet_Cell_Change_Failure_t, BSIC, 6),
1662 M_UINT (Packet_Cell_Change_Failure_t, CAUSE, 4),
1663
1664 M_NEXT_EXIST_OR_NULL (Packet_Cell_Change_Failure_t, Exist_AdditionsR99, 1),
1665 M_TYPE (Packet_Cell_Change_Failure_t, AdditionsR99, PCCF_AdditionsR99_t),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04001666
1667 M_PADDING_BITS (Packet_Cell_Change_Failure_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001668CSN_DESCR_END (Packet_Cell_Change_Failure_t)
1669
1670/*< Packet Uplink Ack/Nack message content > */
1671static const
1672CSN_DESCR_BEGIN(Power_Control_Parameters_t)
1673 M_UINT (Power_Control_Parameters_t, ALPHA, 4),
1674
1675 M_NEXT_EXIST (Power_Control_Parameters_t, Slot[0].Exist, 1),
1676 M_UINT (Power_Control_Parameters_t, Slot[0].GAMMA_TN, 5),
1677
1678 M_NEXT_EXIST (Power_Control_Parameters_t, Slot[1].Exist, 1),
1679 M_UINT (Power_Control_Parameters_t, Slot[1].GAMMA_TN, 5),
1680
1681 M_NEXT_EXIST (Power_Control_Parameters_t, Slot[2].Exist, 1),
1682 M_UINT (Power_Control_Parameters_t, Slot[2].GAMMA_TN, 5),
1683
1684 M_NEXT_EXIST (Power_Control_Parameters_t, Slot[3].Exist, 1),
1685 M_UINT (Power_Control_Parameters_t, Slot[3].GAMMA_TN, 5),
1686
1687 M_NEXT_EXIST (Power_Control_Parameters_t, Slot[4].Exist, 1),
1688 M_UINT (Power_Control_Parameters_t, Slot[4].GAMMA_TN, 5),
1689
1690 M_NEXT_EXIST (Power_Control_Parameters_t, Slot[5].Exist, 1),
1691 M_UINT (Power_Control_Parameters_t, Slot[5].GAMMA_TN, 5),
1692
1693 M_NEXT_EXIST (Power_Control_Parameters_t, Slot[6].Exist, 1),
1694 M_UINT (Power_Control_Parameters_t, Slot[6].GAMMA_TN, 5),
1695
1696 M_NEXT_EXIST (Power_Control_Parameters_t, Slot[7].Exist, 1),
1697 M_UINT (Power_Control_Parameters_t, Slot[7].GAMMA_TN, 5),
1698CSN_DESCR_END (Power_Control_Parameters_t)
1699
1700static const
1701CSN_DESCR_BEGIN(PU_AckNack_GPRS_AdditionsR99_t)
Vadim Yanitskiy48587d52020-08-22 02:08:25 +07001702 M_NEXT_EXIST (PU_AckNack_GPRS_AdditionsR99_t, Exist_Packet_Extended_Timing_Advance, 1),
1703 M_UINT (PU_AckNack_GPRS_AdditionsR99_t, Packet_Extended_Timing_Advance, 2),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001704
1705 M_UINT (PU_AckNack_GPRS_AdditionsR99_t, TBF_EST, 1),
1706CSN_DESCR_END (PU_AckNack_GPRS_AdditionsR99_t)
1707
1708static const
1709CSN_DESCR_BEGIN (PU_AckNack_GPRS_t)
1710 M_UINT (PU_AckNack_GPRS_t, CHANNEL_CODING_COMMAND, 2),
1711 M_TYPE (PU_AckNack_GPRS_t, Ack_Nack_Description, Ack_Nack_Description_t),
1712
1713 M_NEXT_EXIST (PU_AckNack_GPRS_t, Common_Uplink_Ack_Nack_Data.Exist_CONTENTION_RESOLUTION_TLLI, 1),
1714 M_UINT (PU_AckNack_GPRS_t, Common_Uplink_Ack_Nack_Data.CONTENTION_RESOLUTION_TLLI, 32),
1715
1716 M_NEXT_EXIST (PU_AckNack_GPRS_t, Common_Uplink_Ack_Nack_Data.Exist_Packet_Timing_Advance, 1),
1717 M_TYPE (PU_AckNack_GPRS_t, Common_Uplink_Ack_Nack_Data.Packet_Timing_Advance, Packet_Timing_Advance_t),
1718
1719 M_NEXT_EXIST (PU_AckNack_GPRS_t, Common_Uplink_Ack_Nack_Data.Exist_Power_Control_Parameters, 1),
1720 M_TYPE (PU_AckNack_GPRS_t, Common_Uplink_Ack_Nack_Data.Power_Control_Parameters, Power_Control_Parameters_t),
1721
1722 M_NEXT_EXIST (PU_AckNack_GPRS_t, Common_Uplink_Ack_Nack_Data.Exist_Extension_Bits, 1),
1723 M_TYPE (PU_AckNack_GPRS_t, Common_Uplink_Ack_Nack_Data.Extension_Bits, Extension_Bits_t),
1724
1725 M_UNION (PU_AckNack_GPRS_t, 2), /* Fixed Allocation was removed */
1726 M_UINT (PU_AckNack_GPRS_t, u.FixedAllocationDummy, 1),
1727 CSN_ERROR (PU_AckNack_GPRS_t, "01 <Fixed Allocation>", CSN_ERROR_STREAM_NOT_SUPPORTED),
1728
1729 M_NEXT_EXIST_OR_NULL(PU_AckNack_GPRS_t, Exist_AdditionsR99, 1),
1730 M_TYPE (PU_AckNack_GPRS_t, AdditionsR99, PU_AckNack_GPRS_AdditionsR99_t),
1731CSN_DESCR_END (PU_AckNack_GPRS_t)
1732
1733static const
1734CSN_DESCR_BEGIN(PU_AckNack_EGPRS_00_t)
1735 M_UINT (PU_AckNack_EGPRS_00_t, EGPRS_ChannelCodingCommand, 4),
1736 M_UINT (PU_AckNack_EGPRS_00_t, RESEGMENT, 1),
1737 M_UINT (PU_AckNack_EGPRS_00_t, PRE_EMPTIVE_TRANSMISSION, 1),
1738 M_UINT (PU_AckNack_EGPRS_00_t, PRR_RETRANSMISSION_REQUEST, 1),
1739 M_UINT (PU_AckNack_EGPRS_00_t, ARAC_RETRANSMISSION_REQUEST, 1),
1740
1741 M_NEXT_EXIST (PU_AckNack_EGPRS_00_t, Common_Uplink_Ack_Nack_Data.Exist_CONTENTION_RESOLUTION_TLLI, 1),
1742 M_UINT (PU_AckNack_EGPRS_00_t, Common_Uplink_Ack_Nack_Data.CONTENTION_RESOLUTION_TLLI, 32),
1743
1744 M_UINT (PU_AckNack_EGPRS_00_t, TBF_EST, 1),
1745
1746 M_NEXT_EXIST (PU_AckNack_EGPRS_00_t, Common_Uplink_Ack_Nack_Data.Exist_Packet_Timing_Advance, 1),
1747 M_TYPE (PU_AckNack_EGPRS_00_t, Common_Uplink_Ack_Nack_Data.Packet_Timing_Advance, Packet_Timing_Advance_t),
1748
1749 M_NEXT_EXIST (PU_AckNack_EGPRS_00_t, Exist_Packet_Extended_Timing_Advance, 1),
1750 M_UINT (PU_AckNack_EGPRS_00_t, Packet_Extended_Timing_Advance, 2),
1751
1752 M_NEXT_EXIST (PU_AckNack_EGPRS_00_t, Common_Uplink_Ack_Nack_Data.Exist_Power_Control_Parameters, 1),
1753 M_TYPE (PU_AckNack_EGPRS_00_t, Common_Uplink_Ack_Nack_Data.Power_Control_Parameters, Power_Control_Parameters_t),
1754
1755 M_NEXT_EXIST (PU_AckNack_EGPRS_00_t, Common_Uplink_Ack_Nack_Data.Exist_Extension_Bits, 1),
1756 M_TYPE (PU_AckNack_EGPRS_00_t, Common_Uplink_Ack_Nack_Data.Extension_Bits, Extension_Bits_t),
1757
1758 M_TYPE (PU_AckNack_EGPRS_00_t, EGPRS_AckNack, EGPRS_AckNack_t),
1759/* M_CALLBACK (PU_AckNack_EGPRS_00_t, (void*)24, EGPRS_AckNack, EGPRS_AckNack), */
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001760CSN_DESCR_END (PU_AckNack_EGPRS_00_t)
1761
1762static const
1763CSN_DESCR_BEGIN(PU_AckNack_EGPRS_t)
1764/* M_CALLBACK (PU_AckNack_EGPRS_t, (void*)21, IsSupported, IsSupported), */
1765 M_UNION (PU_AckNack_EGPRS_t, 4),
1766 M_TYPE (PU_AckNack_EGPRS_t, u.PU_AckNack_EGPRS_00, PU_AckNack_EGPRS_00_t),
1767 CSN_ERROR (PU_AckNack_EGPRS_t, "01 <PU_AckNack_EGPRS>", CSN_ERROR_STREAM_NOT_SUPPORTED),
1768 CSN_ERROR (PU_AckNack_EGPRS_t, "10 <PU_AckNack_EGPRS>", CSN_ERROR_STREAM_NOT_SUPPORTED),
1769 CSN_ERROR (PU_AckNack_EGPRS_t, "11 <PU_AckNack_EGPRS>", CSN_ERROR_STREAM_NOT_SUPPORTED),
1770CSN_DESCR_END (PU_AckNack_EGPRS_t)
1771
1772static const
1773CSN_DESCR_BEGIN(Packet_Uplink_Ack_Nack_t)
1774 M_UINT (Packet_Uplink_Ack_Nack_t, MESSAGE_TYPE, 6),
1775 M_UINT (Packet_Uplink_Ack_Nack_t, PAGE_MODE, 2),
1776 M_FIXED (Packet_Uplink_Ack_Nack_t, 2, 0x00),
1777 M_UINT (Packet_Uplink_Ack_Nack_t, UPLINK_TFI, 5),
1778
1779 M_UNION (Packet_Uplink_Ack_Nack_t, 2),
1780 M_TYPE (Packet_Uplink_Ack_Nack_t, u.PU_AckNack_GPRS_Struct, PU_AckNack_GPRS_t),
1781 M_TYPE (Packet_Uplink_Ack_Nack_t, u.PU_AckNack_EGPRS_Struct, PU_AckNack_EGPRS_t),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04001782 M_PADDING_BITS(Packet_Uplink_Ack_Nack_t ),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001783CSN_DESCR_END (Packet_Uplink_Ack_Nack_t)
1784
1785/*< Packet Uplink Assignment message content > */
1786static const
1787CSN_DESCR_BEGIN(CHANGE_MARK_t)
1788 M_UINT (CHANGE_MARK_t, CHANGE_MARK_1, 2),
1789
1790 M_NEXT_EXIST (CHANGE_MARK_t, Exist_CHANGE_MARK_2, 1),
1791 M_UINT (CHANGE_MARK_t, CHANGE_MARK_2, 2),
1792CSN_DESCR_END (CHANGE_MARK_t)
1793
1794static const
1795CSN_DESCR_BEGIN(Indirect_encoding_t)
1796 M_UINT (Indirect_encoding_t, MAIO, 6),
1797 M_UINT (Indirect_encoding_t, MA_NUMBER, 4),
1798
1799 M_NEXT_EXIST (Indirect_encoding_t, Exist_CHANGE_MARK, 1),
1800 M_TYPE (Indirect_encoding_t, CHANGE_MARK, CHANGE_MARK_t),
1801CSN_DESCR_END (Indirect_encoding_t)
1802
1803static const
1804CSN_DESCR_BEGIN(Direct_encoding_1_t)
1805 M_UINT (Direct_encoding_1_t, MAIO, 6),
1806 M_TYPE (Direct_encoding_1_t, GPRS_Mobile_Allocation, GPRS_Mobile_Allocation_t),
1807CSN_DESCR_END (Direct_encoding_1_t)
1808
1809static const
1810CSN_DESCR_BEGIN(Direct_encoding_2_t)
1811 M_UINT (Direct_encoding_2_t, MAIO, 6),
1812 M_UINT (Direct_encoding_2_t, HSN, 6),
1813 M_UINT_OFFSET(Direct_encoding_2_t, Length_of_MA_Frequency_List, 4, 3),
1814 M_VAR_ARRAY (Direct_encoding_2_t, MA_Frequency_List, Length_of_MA_Frequency_List, 0),
1815CSN_DESCR_END (Direct_encoding_2_t)
1816
1817static const
1818CSN_DESCR_BEGIN(Frequency_Parameters_t)
1819 M_UINT (Frequency_Parameters_t, TSC, 3),
1820
1821 M_UNION (Frequency_Parameters_t, 4),
1822 M_UINT (Frequency_Parameters_t, u.ARFCN, 10),
1823 M_TYPE (Frequency_Parameters_t, u.Indirect_encoding, Indirect_encoding_t),
1824 M_TYPE (Frequency_Parameters_t, u.Direct_encoding_1, Direct_encoding_1_t),
1825 M_TYPE (Frequency_Parameters_t, u.Direct_encoding_2, Direct_encoding_2_t),
1826CSN_DESCR_END (Frequency_Parameters_t)
1827
1828static const
1829CSN_DESCR_BEGIN(Packet_Request_Reference_t)
1830 M_UINT (Packet_Request_Reference_t, RANDOM_ACCESS_INFORMATION, 11),
1831 M_UINT_ARRAY (Packet_Request_Reference_t, FRAME_NUMBER, 8, 2),
1832CSN_DESCR_END (Packet_Request_Reference_t)
1833
1834static const
1835CSN_DESCR_BEGIN(Timeslot_Allocation_t)
1836 M_NEXT_EXIST (Timeslot_Allocation_t, Exist, 1),
1837 M_UINT (Timeslot_Allocation_t, USF_TN, 3),
1838CSN_DESCR_END (Timeslot_Allocation_t)
1839
1840static const
1841CSN_DESCR_BEGIN(Timeslot_Allocation_Power_Ctrl_Param_t)
1842 M_UINT (Timeslot_Allocation_Power_Ctrl_Param_t, ALPHA, 4),
1843
1844 M_NEXT_EXIST (Timeslot_Allocation_Power_Ctrl_Param_t, Slot[0].Exist, 2),
1845 M_UINT (Timeslot_Allocation_Power_Ctrl_Param_t, Slot[0].USF_TN, 3),
1846 M_UINT (Timeslot_Allocation_Power_Ctrl_Param_t, Slot[0].GAMMA_TN, 5),
1847
1848 M_NEXT_EXIST (Timeslot_Allocation_Power_Ctrl_Param_t, Slot[1].Exist, 2),
1849 M_UINT (Timeslot_Allocation_Power_Ctrl_Param_t, Slot[1].USF_TN, 3),
1850 M_UINT (Timeslot_Allocation_Power_Ctrl_Param_t, Slot[1].GAMMA_TN, 5),
1851
1852 M_NEXT_EXIST (Timeslot_Allocation_Power_Ctrl_Param_t, Slot[2].Exist, 2),
1853 M_UINT (Timeslot_Allocation_Power_Ctrl_Param_t, Slot[2].USF_TN, 3),
1854 M_UINT (Timeslot_Allocation_Power_Ctrl_Param_t, Slot[2].GAMMA_TN, 5),
1855
1856 M_NEXT_EXIST (Timeslot_Allocation_Power_Ctrl_Param_t, Slot[3].Exist, 2),
1857 M_UINT (Timeslot_Allocation_Power_Ctrl_Param_t, Slot[3].USF_TN, 3),
1858 M_UINT (Timeslot_Allocation_Power_Ctrl_Param_t, Slot[3].GAMMA_TN, 5),
1859
1860 M_NEXT_EXIST (Timeslot_Allocation_Power_Ctrl_Param_t, Slot[4].Exist, 2),
1861 M_UINT (Timeslot_Allocation_Power_Ctrl_Param_t, Slot[4].USF_TN, 3),
1862 M_UINT (Timeslot_Allocation_Power_Ctrl_Param_t, Slot[4].GAMMA_TN, 5),
1863
1864 M_NEXT_EXIST (Timeslot_Allocation_Power_Ctrl_Param_t, Slot[5].Exist, 2),
1865 M_UINT (Timeslot_Allocation_Power_Ctrl_Param_t, Slot[5].USF_TN, 3),
1866 M_UINT (Timeslot_Allocation_Power_Ctrl_Param_t, Slot[5].GAMMA_TN, 5),
1867
1868 M_NEXT_EXIST (Timeslot_Allocation_Power_Ctrl_Param_t, Slot[6].Exist, 2),
1869 M_UINT (Timeslot_Allocation_Power_Ctrl_Param_t, Slot[6].USF_TN, 3),
1870 M_UINT (Timeslot_Allocation_Power_Ctrl_Param_t, Slot[6].GAMMA_TN, 5),
1871
1872 M_NEXT_EXIST (Timeslot_Allocation_Power_Ctrl_Param_t, Slot[7].Exist, 2),
1873 M_UINT (Timeslot_Allocation_Power_Ctrl_Param_t, Slot[7].USF_TN, 3),
1874 M_UINT (Timeslot_Allocation_Power_Ctrl_Param_t, Slot[7].GAMMA_TN, 5),
1875CSN_DESCR_END (Timeslot_Allocation_Power_Ctrl_Param_t)
1876
1877/* USED in <Packet Uplink Assignment message content> */
1878static const
1879CSN_DESCR_BEGIN(Dynamic_Allocation_t)
1880 M_UINT (Dynamic_Allocation_t, Extended_Dynamic_Allocation, 1),
1881
1882 M_NEXT_EXIST (Dynamic_Allocation_t, Exist_P0, 2),
1883 M_UINT (Dynamic_Allocation_t, P0, 4),
1884 M_UINT (Dynamic_Allocation_t, PR_MODE, 1),
1885
1886 M_UINT (Dynamic_Allocation_t, USF_GRANULARITY, 1),
1887
1888 M_NEXT_EXIST (Dynamic_Allocation_t, Exist_UPLINK_TFI_ASSIGNMENT, 1),
1889 M_UINT (Dynamic_Allocation_t, UPLINK_TFI_ASSIGNMENT, 5),
1890
1891 M_NEXT_EXIST (Dynamic_Allocation_t, Exist_RLC_DATA_BLOCKS_GRANTED, 1),
1892 M_UINT (Dynamic_Allocation_t, RLC_DATA_BLOCKS_GRANTED, 8),
1893
1894 M_NEXT_EXIST (Dynamic_Allocation_t, Exist_TBF_Starting_Time, 1),
1895 M_TYPE (Dynamic_Allocation_t, TBF_Starting_Time, Starting_Frame_Number_t),
1896
1897 M_UNION (Dynamic_Allocation_t, 2),
1898 M_TYPE_ARRAY (Dynamic_Allocation_t, u.Timeslot_Allocation, Timeslot_Allocation_t, 8),
1899 M_TYPE (Dynamic_Allocation_t, u.Timeslot_Allocation_Power_Ctrl_Param, Timeslot_Allocation_Power_Ctrl_Param_t),
1900CSN_DESCR_END (Dynamic_Allocation_t)
1901
1902static const
1903CSN_DESCR_BEGIN(Single_Block_Allocation_t)
1904 M_UINT (Single_Block_Allocation_t, TIMESLOT_NUMBER, 3),
1905
1906 M_NEXT_EXIST (Single_Block_Allocation_t, Exist_ALPHA_and_GAMMA_TN, 2),
1907 M_UINT (Single_Block_Allocation_t, ALPHA, 4),
1908 M_UINT (Single_Block_Allocation_t, GAMMA_TN, 5),
1909
1910 M_NEXT_EXIST (Single_Block_Allocation_t, Exist_P0, 3),
1911 M_UINT (Single_Block_Allocation_t, P0, 4),
1912 M_UINT (Single_Block_Allocation_t, BTS_PWR_CTRL_MODE, 1),
1913 M_UINT (Single_Block_Allocation_t, PR_MODE, 1),
1914
1915 M_TYPE (Single_Block_Allocation_t, TBF_Starting_Time, Starting_Frame_Number_t),
1916CSN_DESCR_END (Single_Block_Allocation_t)
1917
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01001918#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001919static const
1920CSN_DESCR_BEGIN(DTM_Dynamic_Allocation_t)
1921 M_UINT (DTM_Dynamic_Allocation_t, Extended_Dynamic_Allocation, 1),
1922
1923 M_NEXT_EXIST (DTM_Dynamic_Allocation_t, Exist_P0, 2),
1924 M_UINT (DTM_Dynamic_Allocation_t, P0, 4),
1925 M_UINT (DTM_Dynamic_Allocation_t, PR_MODE, 1),
1926
1927 M_UINT (DTM_Dynamic_Allocation_t, USF_GRANULARITY, 1),
1928
1929 M_NEXT_EXIST (DTM_Dynamic_Allocation_t, Exist_UPLINK_TFI_ASSIGNMENT, 1),
1930 M_UINT (DTM_Dynamic_Allocation_t, UPLINK_TFI_ASSIGNMENT, 5),
1931
1932 M_NEXT_EXIST (DTM_Dynamic_Allocation_t, Exist_RLC_DATA_BLOCKS_GRANTED, 1),
1933 M_UINT (DTM_Dynamic_Allocation_t, RLC_DATA_BLOCKS_GRANTED, 8),
1934
1935 M_UNION (DTM_Dynamic_Allocation_t, 2),
1936 M_TYPE_ARRAY (DTM_Dynamic_Allocation_t, u.Timeslot_Allocation, Timeslot_Allocation_t, 8),
1937 M_TYPE (DTM_Dynamic_Allocation_t, u.Timeslot_Allocation_Power_Ctrl_Param, Timeslot_Allocation_Power_Ctrl_Param_t),
1938CSN_DESCR_END (DTM_Dynamic_Allocation_t)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01001939#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001940
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01001941#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001942static const
1943CSN_DESCR_BEGIN(DTM_Single_Block_Allocation_t)
1944 M_UINT (DTM_Single_Block_Allocation_t, TIMESLOT_NUMBER, 3),
1945
1946 M_NEXT_EXIST (DTM_Single_Block_Allocation_t, Exist_ALPHA_and_GAMMA_TN, 2),
1947 M_UINT (DTM_Single_Block_Allocation_t, ALPHA, 4),
1948 M_UINT (DTM_Single_Block_Allocation_t, GAMMA_TN, 5),
1949
1950 M_NEXT_EXIST (DTM_Single_Block_Allocation_t, Exist_P0, 3),
1951 M_UINT (DTM_Single_Block_Allocation_t, P0, 4),
1952 M_UINT (DTM_Single_Block_Allocation_t, BTS_PWR_CTRL_MODE, 1),
1953 M_UINT (DTM_Single_Block_Allocation_t, PR_MODE, 1),
1954CSN_DESCR_END (DTM_Single_Block_Allocation_t)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01001955#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001956
1957/* Help structures */
1958typedef struct
1959{
1960 Global_TFI_t Global_TFI; /* 0 < Global TFI : < Global TFI IE > > */
1961} h0_Global_TFI_t;
1962
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01001963#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001964static const
1965CSN_DESCR_BEGIN(h0_Global_TFI_t)
1966 M_FIXED (h0_Global_TFI_t, 1, 0x00),
1967 M_TYPE (h0_Global_TFI_t, Global_TFI, Global_TFI_t),
1968CSN_DESCR_END (h0_Global_TFI_t)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01001969#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001970
1971typedef struct
1972{
1973 guint32 TLLI;/* | 10 < TLLI : bit (32) >*/
1974} h10_TLLI_t;
1975
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01001976#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001977static const
1978CSN_DESCR_BEGIN(h10_TLLI_t)
1979 M_FIXED (h10_TLLI_t, 2, 0x02),
1980 M_UINT (h10_TLLI_t, TLLI, 32),
1981CSN_DESCR_END (h10_TLLI_t)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01001982#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001983
1984typedef struct
1985{
1986 guint16 TQI;/*| 110 < TQI : bit (16) > */
1987} h110_TQI_t;
1988
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01001989#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001990static const
1991CSN_DESCR_BEGIN(h110_TQI_t)
1992 M_FIXED (h110_TQI_t, 3, 0x06),
1993 M_UINT (h110_TQI_t, TQI, 16),
1994CSN_DESCR_END (h110_TQI_t)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01001995#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03001996
1997typedef struct
1998{
1999 Packet_Request_Reference_t Packet_Request_Reference;/*| 111 < Packet Request Reference : < Packet Request Reference IE > > }*/
2000} h111_Packet_Request_Reference_t;
2001
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01002002#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002003static const
2004CSN_DESCR_BEGIN(h111_Packet_Request_Reference_t)
2005 M_FIXED (h111_Packet_Request_Reference_t, 3, 0x07),
2006 M_TYPE (h111_Packet_Request_Reference_t, Packet_Request_Reference, Packet_Request_Reference_t),
2007CSN_DESCR_END (h111_Packet_Request_Reference_t)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01002008#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002009
2010static const
2011CSN_ChoiceElement_t PacketUplinkID[] =
2012{
Pau Espin Pedrol7cce8252020-01-24 16:41:14 +01002013 {1, 0, 0, M_TYPE(PacketUplinkID_t, u.Global_TFI, Global_TFI_t)},
2014 {2, 0x02, 0, M_UINT(PacketUplinkID_t, u.TLLI, 32)},
2015 {3, 0x06, 0, M_UINT(PacketUplinkID_t, u.TQI, 16)},
2016 {3, 0x07, 0, M_TYPE(PacketUplinkID_t, u.Packet_Request_Reference, Packet_Request_Reference_t)},
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002017};
2018
2019static const
2020CSN_DESCR_BEGIN(PacketUplinkID_t)
2021 M_CHOICE (PacketUplinkID_t, UnionType, PacketUplinkID, ElementsOf(PacketUplinkID)),
2022CSN_DESCR_END (PacketUplinkID_t)
2023
2024static const
2025CSN_DESCR_BEGIN(PUA_GPRS_AdditionsR99_t)
2026 M_NEXT_EXIST (PUA_GPRS_AdditionsR99_t, Exist_Packet_Extended_Timing_Advance, 1),
2027 M_UINT (PUA_GPRS_AdditionsR99_t, Packet_Extended_Timing_Advance, 2),
2028CSN_DESCR_END (PUA_GPRS_AdditionsR99_t)
2029
2030static const
2031CSN_DESCR_BEGIN (PUA_GPRS_t)
2032 M_UINT (PUA_GPRS_t, CHANNEL_CODING_COMMAND, 2),
Anders Broman8ea3cbe2020-01-28 17:36:33 +01002033 M_UINT (PUA_GPRS_t, TLLI_BLOCK_CHANNEL_CODING, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002034 M_TYPE (PUA_GPRS_t, Packet_Timing_Advance, Packet_Timing_Advance_t),
2035
2036 M_NEXT_EXIST (PUA_GPRS_t, Exist_Frequency_Parameters, 1),
2037 M_TYPE (PUA_GPRS_t, Frequency_Parameters, Frequency_Parameters_t),
2038
2039 M_UNION (PUA_GPRS_t, 4),
2040 CSN_ERROR (PUA_GPRS_t, "00 <extension> not implemented", CSN_ERROR_STREAM_NOT_SUPPORTED),
2041 M_TYPE (PUA_GPRS_t, u.Dynamic_Allocation, Dynamic_Allocation_t),
2042 M_TYPE (PUA_GPRS_t, u.Single_Block_Allocation, Single_Block_Allocation_t),
2043 CSN_ERROR (PUA_GPRS_t, "11 <Fixed Allocation> not supported", CSN_ERROR_STREAM_NOT_SUPPORTED),
2044
2045 M_NEXT_EXIST_OR_NULL(PUA_GPRS_t, Exist_AdditionsR99, 1),
2046 M_TYPE (PUA_GPRS_t, AdditionsR99, PUA_GPRS_AdditionsR99_t),
2047CSN_DESCR_END (PUA_GPRS_t)
2048
2049static const
2050CSN_DESCR_BEGIN(COMPACT_ReducedMA_t)
2051 M_UINT (COMPACT_ReducedMA_t, BitmapLength, 7),
2052 M_VAR_BITMAP (COMPACT_ReducedMA_t, ReducedMA_Bitmap, BitmapLength, 0),
2053
2054 M_NEXT_EXIST (COMPACT_ReducedMA_t, Exist_MAIO_2, 1),
2055 M_UINT (COMPACT_ReducedMA_t, MAIO_2, 6),
2056CSN_DESCR_END (COMPACT_TeducedMA_t)
2057
2058static const
2059CSN_DESCR_BEGIN(MultiBlock_Allocation_t)
2060 M_UINT (MultiBlock_Allocation_t, TIMESLOT_NUMBER, 3),
2061
2062 M_NEXT_EXIST (MultiBlock_Allocation_t, Exist_ALPHA_GAMMA_TN, 2),
2063 M_UINT (MultiBlock_Allocation_t, ALPHA, 4),
2064 M_UINT (MultiBlock_Allocation_t, GAMMA_TN, 5),
2065
2066 M_NEXT_EXIST (MultiBlock_Allocation_t, Exist_P0_BTS_PWR_CTRL_PR_MODE, 3),
2067 M_UINT (MultiBlock_Allocation_t, P0, 4),
2068 M_UINT (MultiBlock_Allocation_t, BTS_PWR_CTRL_MODE, 1),
2069 M_UINT (MultiBlock_Allocation_t, PR_MODE, 1),
2070
2071 M_TYPE (MultiBlock_Allocation_t, TBF_Starting_Time, Starting_Frame_Number_t),
2072 M_UINT (MultiBlock_Allocation_t, NUMBER_OF_RADIO_BLOCKS_ALLOCATED, 2),
2073CSN_DESCR_END (MultiBlock_Allocation_t)
2074
2075static const
2076CSN_DESCR_BEGIN (PUA_EGPRS_00_t)
2077 M_NEXT_EXIST (PUA_EGPRS_00_t, Exist_CONTENTION_RESOLUTION_TLLI, 1),
2078 M_UINT (PUA_EGPRS_00_t, CONTENTION_RESOLUTION_TLLI, 32),
2079
2080 M_NEXT_EXIST (PUA_EGPRS_00_t, Exist_COMPACT_ReducedMA, 1),
2081 M_TYPE (PUA_EGPRS_00_t, COMPACT_ReducedMA, COMPACT_ReducedMA_t),
2082
2083 M_UINT (PUA_EGPRS_00_t, EGPRS_CHANNEL_CODING_COMMAND, 4),
2084 M_UINT (PUA_EGPRS_00_t, RESEGMENT, 1),
2085 M_UINT (PUA_EGPRS_00_t, EGPRS_WindowSize, 5),
2086
2087 M_REC_ARRAY (PUA_EGPRS_00_t, AccessTechnologyType, NrOfAccessTechnologies, 4),
2088
2089 M_UINT (PUA_EGPRS_00_t, ARAC_RETRANSMISSION_REQUEST, 1),
2090 M_UINT (PUA_EGPRS_00_t, TLLI_BLOCK_CHANNEL_CODING, 1),
2091
2092 M_NEXT_EXIST (PUA_EGPRS_00_t, Exist_BEP_PERIOD2, 1),
2093 M_UINT (PUA_EGPRS_00_t, BEP_PERIOD2, 4),
2094
Vadim Yanitskiy48587d52020-08-22 02:08:25 +07002095 M_TYPE (PUA_EGPRS_00_t, Packet_Timing_Advance, Packet_Timing_Advance_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002096
2097 M_NEXT_EXIST (PUA_EGPRS_00_t, Exist_Packet_Extended_Timing_Advance, 1),
2098 M_UINT (PUA_EGPRS_00_t, Packet_Extended_Timing_Advance, 2),
2099
2100 M_NEXT_EXIST (PUA_EGPRS_00_t, Exist_Frequency_Parameters, 1),
2101 M_TYPE (PUA_EGPRS_00_t, Frequency_Parameters, Frequency_Parameters_t),
2102
2103 M_UNION (PUA_EGPRS_00_t, 4),
2104 CSN_ERROR (PUA_EGPRS_00_t, "00 <extension>", CSN_ERROR_STREAM_NOT_SUPPORTED),
2105 M_TYPE (PUA_EGPRS_00_t, u.Dynamic_Allocation, Dynamic_Allocation_t),
2106 M_TYPE (PUA_EGPRS_00_t, u.MultiBlock_Allocation, MultiBlock_Allocation_t),
2107 CSN_ERROR (PUA_EGPRS_00_t, "11 <Fixed Allocation>", CSN_ERROR_STREAM_NOT_SUPPORTED),
2108CSN_DESCR_END (PUA_EGPRS_00_t)
2109
2110static const
2111CSN_DESCR_BEGIN(PUA_EGPRS_t)
2112 M_UNION (PUA_EGPRS_t, 4),
2113 M_TYPE (PUA_EGPRS_t, u.PUA_EGPRS_00, PUA_EGPRS_00_t),
2114 CSN_ERROR (PUA_EGPRS_t, "01 <PUA EGPRS>", CSN_ERROR_STREAM_NOT_SUPPORTED),
2115 CSN_ERROR (PUA_EGPRS_t, "10 <PUA EGPRS>", CSN_ERROR_STREAM_NOT_SUPPORTED),
2116 CSN_ERROR (PUA_EGPRS_t, "11 <PUA EGPRS>", CSN_ERROR_STREAM_NOT_SUPPORTED),
2117CSN_DESCR_END (PUA_EGPRS_t)
2118
2119static const
2120CSN_DESCR_BEGIN(Packet_Uplink_Assignment_t)
2121 M_UINT (Packet_Uplink_Assignment_t, MESSAGE_TYPE, 6),
2122 M_UINT (Packet_Uplink_Assignment_t, PAGE_MODE, 2),
2123
2124 M_NEXT_EXIST (Packet_Uplink_Assignment_t, Exist_PERSISTENCE_LEVEL, 1),
2125 M_UINT_ARRAY (Packet_Uplink_Assignment_t, PERSISTENCE_LEVEL, 4, 4),
2126
2127 M_TYPE (Packet_Uplink_Assignment_t, ID, PacketUplinkID_t),
2128
2129 M_UNION (Packet_Uplink_Assignment_t, 2),
2130 M_TYPE (Packet_Uplink_Assignment_t, u.PUA_GPRS_Struct, PUA_GPRS_t),
2131 M_TYPE (Packet_Uplink_Assignment_t, u.PUA_EGPRS_Struct, PUA_EGPRS_t),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04002132
2133 M_PADDING_BITS(Packet_Uplink_Assignment_t ),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002134CSN_DESCR_END (Packet_Uplink_Assignment_t)
2135
2136/*< Packet Downlink Assignment message content > */
2137static const
2138CSN_DESCR_BEGIN(Measurement_Mapping_struct_t)
2139 M_TYPE (Measurement_Mapping_struct_t, Measurement_Starting_Time, Starting_Frame_Number_t),
2140 M_UINT (Measurement_Mapping_struct_t, MEASUREMENT_INTERVAL, 5),
2141 M_UINT (Measurement_Mapping_struct_t, MEASUREMENT_BITMAP, 8),
2142CSN_DESCR_END (Measurement_Mapping_struct_t)
2143
2144static const
2145CSN_ChoiceElement_t PacketDownlinkID[] =
2146{
Pau Espin Pedrol7cce8252020-01-24 16:41:14 +01002147 {1, 0, 0, M_TYPE(PacketDownlinkID_t, u.Global_TFI, Global_TFI_t)},
2148 {2, 0x02, 0, M_UINT(PacketDownlinkID_t, u.TLLI, 32)},
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002149};
2150
2151static const
2152CSN_DESCR_BEGIN(PacketDownlinkID_t)
2153 M_CHOICE (PacketDownlinkID_t, UnionType, PacketDownlinkID, ElementsOf(PacketDownlinkID)),
2154CSN_DESCR_END (PacketDownlinkID_t)
2155
2156static const
2157CSN_DESCR_BEGIN(PDA_AdditionsR99_t)
2158 M_NEXT_EXIST (PDA_AdditionsR99_t, Exist_EGPRS_Params, 4), /*if Exist_EGPRS_Params == FALSE then none of the following 4 vars exist */
2159 M_UINT (PDA_AdditionsR99_t, EGPRS_WindowSize, 5),
2160 M_UINT (PDA_AdditionsR99_t, LINK_QUALITY_MEASUREMENT_MODE, 2),
2161 M_NEXT_EXIST (PDA_AdditionsR99_t, Exist_BEP_PERIOD2, 1),
2162 M_UINT (PDA_AdditionsR99_t, BEP_PERIOD2, 4),
2163
2164 M_NEXT_EXIST (PDA_AdditionsR99_t, Exist_Packet_Extended_Timing_Advance, 1),
2165 M_UINT (PDA_AdditionsR99_t, Packet_Extended_Timing_Advance, 2),
2166
2167 M_NEXT_EXIST (PDA_AdditionsR99_t, Exist_COMPACT_ReducedMA, 1),
2168 M_TYPE (PDA_AdditionsR99_t, COMPACT_ReducedMA, COMPACT_ReducedMA_t),
2169CSN_DESCR_END (PDA_AdditionsR99_t)
2170
2171static const
2172CSN_DESCR_BEGIN (Packet_Downlink_Assignment_t)
2173 M_UINT (Packet_Downlink_Assignment_t, MESSAGE_TYPE, 6),
2174 M_UINT (Packet_Downlink_Assignment_t, PAGE_MODE, 2),
2175
2176 M_NEXT_EXIST (Packet_Downlink_Assignment_t, Exist_PERSISTENCE_LEVEL, 1),
2177 M_UINT_ARRAY (Packet_Downlink_Assignment_t, PERSISTENCE_LEVEL, 4, 4),
2178
2179 M_TYPE (Packet_Downlink_Assignment_t, ID, PacketDownlinkID_t),
2180
2181 M_FIXED (Packet_Downlink_Assignment_t, 1, 0x00),/*-- Message escape */
2182
2183 M_UINT (Packet_Downlink_Assignment_t, MAC_MODE, 2),
Anders Broman8ea3cbe2020-01-28 17:36:33 +01002184 M_UINT (Packet_Downlink_Assignment_t, RLC_MODE, 1),
2185 M_UINT (Packet_Downlink_Assignment_t, CONTROL_ACK, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002186 M_UINT (Packet_Downlink_Assignment_t, TIMESLOT_ALLOCATION, 8),
2187 M_TYPE (Packet_Downlink_Assignment_t, Packet_Timing_Advance, Packet_Timing_Advance_t),
2188
2189 M_NEXT_EXIST (Packet_Downlink_Assignment_t, Exist_P0_and_BTS_PWR_CTRL_MODE, 3),
2190 M_UINT (Packet_Downlink_Assignment_t, P0, 4),
Anders Broman8ea3cbe2020-01-28 17:36:33 +01002191 M_UINT (Packet_Downlink_Assignment_t, BTS_PWR_CTRL_MODE, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002192 M_UINT (Packet_Downlink_Assignment_t, PR_MODE, 1),
2193
2194 M_NEXT_EXIST (Packet_Downlink_Assignment_t, Exist_Frequency_Parameters, 1),
2195 M_TYPE (Packet_Downlink_Assignment_t, Frequency_Parameters, Frequency_Parameters_t),
2196
2197 M_NEXT_EXIST (Packet_Downlink_Assignment_t, Exist_DOWNLINK_TFI_ASSIGNMENT, 1),
2198 M_UINT (Packet_Downlink_Assignment_t, DOWNLINK_TFI_ASSIGNMENT, 5),
2199
2200 M_NEXT_EXIST (Packet_Downlink_Assignment_t, Exist_Power_Control_Parameters, 1),
2201 M_TYPE (Packet_Downlink_Assignment_t, Power_Control_Parameters, Power_Control_Parameters_t),
2202
2203 M_NEXT_EXIST (Packet_Downlink_Assignment_t, Exist_TBF_Starting_Time, 1),
2204 M_TYPE (Packet_Downlink_Assignment_t, TBF_Starting_Time, Starting_Frame_Number_t),
2205
2206 M_NEXT_EXIST (Packet_Downlink_Assignment_t, Exist_Measurement_Mapping, 1),
2207 M_TYPE (Packet_Downlink_Assignment_t, Measurement_Mapping, Measurement_Mapping_struct_t),
2208
2209 M_NEXT_EXIST_OR_NULL(Packet_Downlink_Assignment_t, Exist_AdditionsR99, 1),
2210 M_TYPE (Packet_Downlink_Assignment_t, AdditionsR99, PDA_AdditionsR99_t),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04002211
2212 M_PADDING_BITS (Packet_Downlink_Assignment_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002213CSN_DESCR_END (Packet_Downlink_Assignment_t)
2214
2215typedef Packet_Downlink_Assignment_t pdlaCheck_t;
2216
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01002217#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002218static const
2219CSN_DESCR_BEGIN(pdlaCheck_t)
2220 M_UINT (pdlaCheck_t, MESSAGE_TYPE, 6),
2221 M_UINT (pdlaCheck_t, PAGE_MODE, 2),
2222
2223 M_NEXT_EXIST (pdlaCheck_t, Exist_PERSISTENCE_LEVEL, 1),
2224 M_UINT_ARRAY (pdlaCheck_t, PERSISTENCE_LEVEL, 4, 4),
2225
2226 M_TYPE (pdlaCheck_t, ID, PacketDownlinkID_t),
2227CSN_DESCR_END (pdlaCheck_t)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01002228#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002229
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01002230#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002231/* DTM Packet UL Assignment */
2232static const
2233CSN_DESCR_BEGIN(DTM_Packet_Uplink_Assignment_t)
2234 M_UINT (DTM_Packet_Uplink_Assignment_t, CHANNEL_CODING_COMMAND, 2),
Anders Broman8ea3cbe2020-01-28 17:36:33 +01002235 M_UINT (DTM_Packet_Uplink_Assignment_t, TLLI_BLOCK_CHANNEL_CODING, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002236 M_TYPE (DTM_Packet_Uplink_Assignment_t, Packet_Timing_Advance, Packet_Timing_Advance_t),
2237
2238 M_UNION (DTM_Packet_Uplink_Assignment_t, 3),
2239 CSN_ERROR (DTM_Packet_Uplink_Assignment_t, "Not Implemented", CSN_ERROR_STREAM_NOT_SUPPORTED),
2240 M_TYPE (DTM_Packet_Uplink_Assignment_t, u.DTM_Dynamic_Allocation, DTM_Dynamic_Allocation_t),
2241 M_TYPE (DTM_Packet_Uplink_Assignment_t, u.DTM_Single_Block_Allocation, DTM_Single_Block_Allocation_t),
2242 M_NEXT_EXIST_OR_NULL (DTM_Packet_Uplink_Assignment_t, Exist_EGPRS_Parameters, 3),
2243 M_UINT (DTM_Packet_Uplink_Assignment_t, EGPRS_CHANNEL_CODING_COMMAND, 4),
2244 M_UINT (DTM_Packet_Uplink_Assignment_t, RESEGMENT, 1),
2245 M_UINT (DTM_Packet_Uplink_Assignment_t, EGPRS_WindowSize, 5),
2246 M_NEXT_EXIST (DTM_Packet_Uplink_Assignment_t, Exist_Packet_Extended_Timing_Advance, 1),
2247 M_UINT (DTM_Packet_Uplink_Assignment_t, Packet_Extended_Timing_Advance, 2),
2248CSN_DESCR_END(DTM_Packet_Uplink_Assignment_t)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01002249#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002250
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01002251#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002252static const
2253CSN_DESCR_BEGIN(DTM_UL_t)
2254 M_TYPE (DTM_UL_t, DTM_Packet_Uplink_Assignment, DTM_Packet_Uplink_Assignment_t),
2255CSN_DESCR_END(DTM_UL_t)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01002256#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002257
2258/* DTM Packet DL Assignment */
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01002259#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002260static const
2261CSN_DESCR_BEGIN(DTM_Packet_Downlink_Assignment_t)
2262 M_UINT (DTM_Packet_Downlink_Assignment_t, MAC_MODE, 2),
Anders Broman8ea3cbe2020-01-28 17:36:33 +01002263 M_UINT (DTM_Packet_Downlink_Assignment_t, RLC_MODE ,1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002264 M_UINT (DTM_Packet_Downlink_Assignment_t, TIMESLOT_ALLOCATION, 8),
2265 M_TYPE (DTM_Packet_Downlink_Assignment_t, Packet_Timing_Advance, Packet_Timing_Advance_t),
2266
2267 M_NEXT_EXIST (DTM_Packet_Downlink_Assignment_t, Exist_P0_and_BTS_PWR_CTRL_MODE, 3),
2268 M_UINT (DTM_Packet_Downlink_Assignment_t, P0, 4),
Anders Broman8ea3cbe2020-01-28 17:36:33 +01002269 M_UINT (DTM_Packet_Downlink_Assignment_t, BTS_PWR_CTRL_MODE, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002270 M_UINT (DTM_Packet_Downlink_Assignment_t, PR_MODE, 1),
2271
2272 M_NEXT_EXIST (DTM_Packet_Downlink_Assignment_t, Exist_Power_Control_Parameters, 1),
2273 M_TYPE (DTM_Packet_Downlink_Assignment_t, Power_Control_Parameters, Power_Control_Parameters_t),
2274
2275 M_NEXT_EXIST (DTM_Packet_Downlink_Assignment_t, Exist_DOWNLINK_TFI_ASSIGNMENT, 1),
2276 M_UINT (DTM_Packet_Downlink_Assignment_t, DOWNLINK_TFI_ASSIGNMENT, 5),
2277
2278 M_NEXT_EXIST (DTM_Packet_Downlink_Assignment_t, Exist_Measurement_Mapping, 1),
2279 M_TYPE (DTM_Packet_Downlink_Assignment_t, Measurement_Mapping, Measurement_Mapping_struct_t),
2280 M_NEXT_EXIST_OR_NULL (DTM_Packet_Downlink_Assignment_t, EGPRS_Mode, 2),
2281 M_UINT (DTM_Packet_Downlink_Assignment_t, EGPRS_WindowSize, 5),
2282 M_UINT (DTM_Packet_Downlink_Assignment_t, LINK_QUALITY_MEASUREMENT_MODE, 2),
2283 M_NEXT_EXIST (DTM_Packet_Downlink_Assignment_t, Exist_Packet_Extended_Timing_Advance, 1),
2284 M_UINT (DTM_Packet_Downlink_Assignment_t, Packet_Extended_Timing_Advance, 2),
2285CSN_DESCR_END(DTM_Packet_Downlink_Assignment_t)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01002286#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002287
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01002288#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002289static const
2290CSN_DESCR_BEGIN(DTM_DL_t)
2291 M_TYPE (DTM_DL_t, DTM_Packet_Downlink_Assignment, DTM_Packet_Downlink_Assignment_t),
2292CSN_DESCR_END(DTM_DL_t)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01002293#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002294
2295/* GPRS Broadcast Information */
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01002296#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002297static const
2298CSN_DESCR_BEGIN(DTM_GPRS_Broadcast_Information_t)
2299 M_TYPE (DTM_GPRS_Broadcast_Information_t, GPRS_Cell_Options, GPRS_Cell_Options_t),
2300 M_TYPE (DTM_GPRS_Broadcast_Information_t, GPRS_Power_Control_Parameters, GPRS_Power_Control_Parameters_t),
2301CSN_DESCR_END(DTM_GPRS_Broadcast_Information_t)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01002302#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002303
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01002304#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002305static const
2306CSN_DESCR_BEGIN(DTM_GPRS_B_t)
2307 M_TYPE (DTM_GPRS_B_t, DTM_GPRS_Broadcast_Information, DTM_GPRS_Broadcast_Information_t),
2308CSN_DESCR_END(DTM_GPRS_B_t)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01002309#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002310
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01002311#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002312static const
2313CSN_DESCR_BEGIN(DTM_Channel_Request_Description_t)
2314 M_UINT (DTM_Channel_Request_Description_t, DTM_Pkt_Est_Cause, 2),
2315 M_TYPE (DTM_Channel_Request_Description_t, Channel_Request_Description, Channel_Request_Description_t),
2316 M_NEXT_EXIST (DTM_Channel_Request_Description_t, Exist_PFI, 1),
2317 M_UINT (DTM_Channel_Request_Description_t, PFI, 7),
2318CSN_DESCR_END(DTM_Channel_Request_Description_t)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01002319#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002320/* DTM */
2321
2322/*< Packet Paging Request message content > */
2323typedef struct
2324{
2325 guint8 Length_of_Mobile_Identity_contents;/* bit (4) */
2326 guint8 Mobile_Identity[8];/* octet (val (Length of Mobile Identity contents)) */
2327} Mobile_Identity_t; /* helper */
2328
2329static const
2330CSN_DESCR_BEGIN(Mobile_Identity_t)
2331 M_UINT (Mobile_Identity_t, Length_of_Mobile_Identity_contents, 4),
2332 M_VAR_ARRAY (Mobile_Identity_t, Mobile_Identity, Length_of_Mobile_Identity_contents, 0),
2333CSN_DESCR_END (Mobile_Identity_t)
2334
2335static const
2336CSN_DESCR_BEGIN(Page_request_for_TBF_establishment_t)
2337 M_UNION (Page_request_for_TBF_establishment_t, 2),
2338 M_UINT_ARRAY (Page_request_for_TBF_establishment_t, u.PTMSI, 8, 4),/* bit (32) == 8*4 */
2339 M_TYPE (Page_request_for_TBF_establishment_t, u.Mobile_Identity, Mobile_Identity_t),
2340CSN_DESCR_END (Page_request_for_TBF_establishment_t)
2341
2342static const
2343CSN_DESCR_BEGIN(Page_request_for_RR_conn_t)
2344 M_UNION (Page_request_for_RR_conn_t, 2),
2345 M_UINT_ARRAY (Page_request_for_RR_conn_t, u.TMSI, 8, 4),/* bit (32) == 8*4 */
2346 M_TYPE (Page_request_for_RR_conn_t, u.Mobile_Identity, Mobile_Identity_t),
2347
2348 M_UINT (Page_request_for_RR_conn_t, CHANNEL_NEEDED, 2),
2349
2350 M_NEXT_EXIST (Page_request_for_RR_conn_t, Exist_eMLPP_PRIORITY, 1),
2351 M_UINT (Page_request_for_RR_conn_t, eMLPP_PRIORITY, 3),
2352CSN_DESCR_END (Page_request_for_RR_conn_t)
2353
2354static const
2355CSN_DESCR_BEGIN(Repeated_Page_info_t)
2356 M_UNION (Repeated_Page_info_t, 2),
2357 M_TYPE (Repeated_Page_info_t, u.Page_req_TBF, Page_request_for_TBF_establishment_t),
2358 M_TYPE (Repeated_Page_info_t, u.Page_req_RR, Page_request_for_RR_conn_t),
2359CSN_DESCR_END (Repeated_Page_info_t)
2360
2361static const
2362CSN_DESCR_BEGIN(Packet_Paging_Request_t)
2363 M_UINT (Packet_Paging_Request_t, MESSAGE_TYPE, 6),
2364 M_UINT (Packet_Paging_Request_t, PAGE_MODE, 2),
2365
2366 M_NEXT_EXIST (Packet_Paging_Request_t, Exist_PERSISTENCE_LEVEL, 1),
2367 M_UINT_ARRAY (Packet_Paging_Request_t, PERSISTENCE_LEVEL, 4, 4), /* 4bit*4 */
2368
2369 M_NEXT_EXIST (Packet_Paging_Request_t, Exist_NLN, 1),
2370 M_UINT (Packet_Paging_Request_t, NLN, 2),
2371
2372 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 +04002373 M_PADDING_BITS(Packet_Paging_Request_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002374CSN_DESCR_END (Packet_Paging_Request_t)
2375
2376static const
2377CSN_DESCR_BEGIN(Packet_PDCH_Release_t)
2378 M_UINT (Packet_PDCH_Release_t, MESSAGE_TYPE, 6),
2379 M_UINT (Packet_PDCH_Release_t, PAGE_MODE, 2),
2380
2381 M_FIXED (Packet_PDCH_Release_t, 1, 0x01),
2382 M_UINT (Packet_PDCH_Release_t, TIMESLOTS_AVAILABLE, 8),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04002383 M_PADDING_BITS(Packet_PDCH_Release_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002384CSN_DESCR_END (Packet_PDCH_Release_t)
2385
2386/*< Packet Power Control/Timing Advance message content >*/
2387static const
2388CSN_DESCR_BEGIN(GlobalTimingAndPower_t)
2389 M_TYPE (GlobalTimingAndPower_t, Global_Packet_Timing_Advance, Global_Packet_Timing_Advance_t),
2390 M_TYPE (GlobalTimingAndPower_t, Power_Control_Parameters, Power_Control_Parameters_t),
2391CSN_DESCR_END (GlobalTimingAndPower_t)
2392
2393static const
2394CSN_DESCR_BEGIN(GlobalTimingOrPower_t)
2395 M_UNION (GlobalTimingOrPower_t, 2),
2396 M_TYPE (GlobalTimingOrPower_t, u.Global_Packet_Timing_Advance, Global_Packet_Timing_Advance_t),
2397 M_TYPE (GlobalTimingOrPower_t, u.Power_Control_Parameters, Power_Control_Parameters_t),
2398CSN_DESCR_END (GlobalTimingOrPower_t)
2399
2400static const
2401CSN_ChoiceElement_t PacketPowerControlTimingAdvanceID[] =
2402{
Pau Espin Pedrol7cce8252020-01-24 16:41:14 +01002403 {1, 0, 0, M_TYPE(PacketPowerControlTimingAdvanceID_t, u.Global_TFI, Global_TFI_t)},
2404 {3, 0x06, 0, M_UINT(PacketPowerControlTimingAdvanceID_t, u.TQI, 16)},
2405 {3, 0x07, 0, M_TYPE(PacketPowerControlTimingAdvanceID_t, u.Packet_Request_Reference, Packet_Request_Reference_t)},
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002406};
2407
2408static const
2409CSN_DESCR_BEGIN(PacketPowerControlTimingAdvanceID_t)
2410 M_CHOICE (PacketPowerControlTimingAdvanceID_t, UnionType, PacketPowerControlTimingAdvanceID, ElementsOf(PacketPowerControlTimingAdvanceID)),
2411CSN_DESCR_END (PacketPowerControlTimingAdvanceID_t)
2412
2413static const
2414CSN_DESCR_BEGIN(Packet_Power_Control_Timing_Advance_t)
2415 M_UINT (Packet_Power_Control_Timing_Advance_t, MESSAGE_TYPE, 6),
2416 M_UINT (Packet_Power_Control_Timing_Advance_t, PAGE_MODE, 2),
2417
2418 M_TYPE (Packet_Power_Control_Timing_Advance_t, ID, PacketPowerControlTimingAdvanceID_t),
2419
2420 /*-- Message escape*/
2421 M_FIXED (Packet_Power_Control_Timing_Advance_t, 1, 0x00),
2422
2423 M_NEXT_EXIST (Packet_Power_Control_Timing_Advance_t, Exist_Global_Power_Control_Parameters, 1),
2424 M_TYPE (Packet_Power_Control_Timing_Advance_t, Global_Power_Control_Parameters, Global_Power_Control_Parameters_t),
2425
2426 M_UNION (Packet_Power_Control_Timing_Advance_t, 2),
2427 M_TYPE (Packet_Power_Control_Timing_Advance_t, u.GlobalTimingAndPower, GlobalTimingAndPower_t),
2428 M_TYPE (Packet_Power_Control_Timing_Advance_t, u.GlobalTimingOrPower, GlobalTimingOrPower_t),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04002429
2430 M_PADDING_BITS(Packet_Power_Control_Timing_Advance_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002431CSN_DESCR_END (Packet_Power_Control_Timing_Advance_t)
2432
2433/*< Packet Queueing Notification message content > */
2434static const
2435CSN_DESCR_BEGIN(Packet_Queueing_Notification_t)
2436 M_UINT (Packet_Queueing_Notification_t, MESSAGE_TYPE, 6),
2437 M_UINT (Packet_Queueing_Notification_t, PAGE_MODE, 2),
2438
2439 M_FIXED (Packet_Queueing_Notification_t, 3, 0x07),/* 111 Fixed */
2440 M_TYPE (Packet_Queueing_Notification_t, Packet_Request_Reference, Packet_Request_Reference_t),
2441
2442 M_UINT (Packet_Queueing_Notification_t, TQI, 16),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04002443 M_PADDING_BITS(Packet_Queueing_Notification_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002444CSN_DESCR_END (Packet_Queueing_Notification_t)
2445
2446/* USED in Packet Timeslot Reconfigure message content
2447 * This is almost the same structure as used in
2448 * <Packet Uplink Assignment message content> but UPLINK_TFI_ASSIGNMENT is removed.
2449 */
2450static const
2451CSN_DESCR_BEGIN(TRDynamic_Allocation_t)
2452 M_UINT (TRDynamic_Allocation_t, Extended_Dynamic_Allocation, 1),
2453
2454 M_NEXT_EXIST (TRDynamic_Allocation_t, Exist_P0, 2),
2455 M_UINT (TRDynamic_Allocation_t, P0, 4),
2456 M_UINT (TRDynamic_Allocation_t, PR_MODE, 1),
2457
2458 M_UINT (TRDynamic_Allocation_t, USF_GRANULARITY, 1),
2459
2460 M_NEXT_EXIST (TRDynamic_Allocation_t, Exist_RLC_DATA_BLOCKS_GRANTED, 1),
2461 M_UINT (TRDynamic_Allocation_t, RLC_DATA_BLOCKS_GRANTED, 8),
2462
2463 M_NEXT_EXIST (TRDynamic_Allocation_t, Exist_TBF_Starting_Time, 1),
2464 M_TYPE (TRDynamic_Allocation_t, TBF_Starting_Time, Starting_Frame_Number_t),
2465
2466 M_UNION (TRDynamic_Allocation_t, 2),
2467 M_TYPE_ARRAY (TRDynamic_Allocation_t, u.Timeslot_Allocation, Timeslot_Allocation_t, 8),
2468 M_TYPE (TRDynamic_Allocation_t, u.Timeslot_Allocation_Power_Ctrl_Param, Timeslot_Allocation_Power_Ctrl_Param_t),
2469CSN_DESCR_END (TRDynamic_Allocation_t)
2470
2471/*< Packet Timeslot Reconfigure message content > */
2472static const
2473CSN_DESCR_BEGIN(PTR_GPRS_AdditionsR99_t)
2474 M_NEXT_EXIST (PTR_GPRS_AdditionsR99_t, Exist_Packet_Extended_Timing_Advance, 1),
2475 M_UINT (PTR_GPRS_AdditionsR99_t, Packet_Extended_Timing_Advance, 2),
2476CSN_DESCR_END (PTR_GPRS_AdditionsR99_t)
2477
2478static const
2479CSN_DESCR_BEGIN (PTR_GPRS_t)
2480 M_UINT (PTR_GPRS_t, CHANNEL_CODING_COMMAND, 2),
2481 M_TYPE (PTR_GPRS_t, Common_Timeslot_Reconfigure_Data.Global_Packet_Timing_Advance, Global_Packet_Timing_Advance_t),
2482 M_UINT (PTR_GPRS_t, Common_Timeslot_Reconfigure_Data.DOWNLINK_RLC_MODE, 1),
2483 M_UINT (PTR_GPRS_t, Common_Timeslot_Reconfigure_Data.CONTROL_ACK, 1),
2484
2485 M_NEXT_EXIST (PTR_GPRS_t, Common_Timeslot_Reconfigure_Data.Exist_DOWNLINK_TFI_ASSIGNMENT, 1),
2486 M_UINT (PTR_GPRS_t, Common_Timeslot_Reconfigure_Data.DOWNLINK_TFI_ASSIGNMENT, 5),
2487
2488 M_NEXT_EXIST (PTR_GPRS_t, Common_Timeslot_Reconfigure_Data.Exist_UPLINK_TFI_ASSIGNMENT, 1),
2489 M_UINT (PTR_GPRS_t, Common_Timeslot_Reconfigure_Data.UPLINK_TFI_ASSIGNMENT, 5),
2490
2491 M_UINT (PTR_GPRS_t, Common_Timeslot_Reconfigure_Data.DOWNLINK_TIMESLOT_ALLOCATION, 8),
2492
2493 M_NEXT_EXIST (PTR_GPRS_t, Common_Timeslot_Reconfigure_Data.Exist_Frequency_Parameters, 1),
2494 M_TYPE (PTR_GPRS_t, Common_Timeslot_Reconfigure_Data.Frequency_Parameters, Frequency_Parameters_t),
2495
2496 M_UNION (PTR_GPRS_t, 2),
2497 M_TYPE (PTR_GPRS_t, u.Dynamic_Allocation, TRDynamic_Allocation_t),
2498 CSN_ERROR (PTR_GPRS_t, "1 - Fixed Allocation was removed", CSN_ERROR_STREAM_NOT_SUPPORTED),
2499
2500 M_NEXT_EXIST_OR_NULL(PTR_GPRS_t, Exist_AdditionsR99, 1),
2501 M_TYPE (PTR_GPRS_t, AdditionsR99, PTR_GPRS_AdditionsR99_t),
2502CSN_DESCR_END (PTR_GPRS_t)
2503
2504static const
2505CSN_DESCR_BEGIN(PTR_EGPRS_00_t)
2506 M_NEXT_EXIST (PTR_EGPRS_00_t, Exist_COMPACT_ReducedMA, 1),
2507 M_TYPE (PTR_EGPRS_00_t, COMPACT_ReducedMA, COMPACT_ReducedMA_t),
2508
2509 M_UINT (PTR_EGPRS_00_t, EGPRS_ChannelCodingCommand, 4),
2510 M_UINT (PTR_EGPRS_00_t, RESEGMENT, 1),
2511
2512 M_NEXT_EXIST (PTR_EGPRS_00_t, Exist_DOWNLINK_EGPRS_WindowSize, 1),
2513 M_UINT (PTR_EGPRS_00_t, DOWNLINK_EGPRS_WindowSize, 5),
2514
2515 M_NEXT_EXIST (PTR_EGPRS_00_t, Exist_UPLINK_EGPRS_WindowSize, 1),
2516 M_UINT (PTR_EGPRS_00_t, UPLINK_EGPRS_WindowSize, 5),
2517
2518 M_UINT (PTR_EGPRS_00_t, LINK_QUALITY_MEASUREMENT_MODE, 2),
2519
2520 M_TYPE (PTR_EGPRS_00_t, Common_Timeslot_Reconfigure_Data.Global_Packet_Timing_Advance, Global_Packet_Timing_Advance_t),
2521
2522 M_NEXT_EXIST (PTR_EGPRS_00_t, Exist_Packet_Extended_Timing_Advance, 1),
2523 M_UINT (PTR_EGPRS_00_t, Packet_Extended_Timing_Advance, 2),
2524
2525 M_UINT (PTR_EGPRS_00_t, Common_Timeslot_Reconfigure_Data.DOWNLINK_RLC_MODE, 1),
2526 M_UINT (PTR_EGPRS_00_t, Common_Timeslot_Reconfigure_Data.CONTROL_ACK, 1),
2527
2528 M_NEXT_EXIST (PTR_EGPRS_00_t, Common_Timeslot_Reconfigure_Data.Exist_DOWNLINK_TFI_ASSIGNMENT, 1),
2529 M_UINT (PTR_EGPRS_00_t, Common_Timeslot_Reconfigure_Data.DOWNLINK_TFI_ASSIGNMENT, 5),
2530
2531 M_NEXT_EXIST (PTR_EGPRS_00_t, Common_Timeslot_Reconfigure_Data.Exist_UPLINK_TFI_ASSIGNMENT, 1),
2532 M_UINT (PTR_EGPRS_00_t, Common_Timeslot_Reconfigure_Data.UPLINK_TFI_ASSIGNMENT, 5),
2533
2534 M_UINT (PTR_EGPRS_00_t, Common_Timeslot_Reconfigure_Data.DOWNLINK_TIMESLOT_ALLOCATION, 8),
2535
2536 M_NEXT_EXIST (PTR_EGPRS_00_t, Common_Timeslot_Reconfigure_Data.Exist_Frequency_Parameters, 1),
2537 M_TYPE (PTR_EGPRS_00_t, Common_Timeslot_Reconfigure_Data.Frequency_Parameters, Frequency_Parameters_t),
2538
2539 M_UNION (PTR_EGPRS_00_t, 2),
2540 M_TYPE (PTR_EGPRS_00_t, u.Dynamic_Allocation, TRDynamic_Allocation_t),
2541 CSN_ERROR (PTR_EGPRS_00_t, "1 <Fixed Allocation>", CSN_ERROR_STREAM_NOT_SUPPORTED),
2542CSN_DESCR_END (PTR_EGPRS_00_t)
2543
2544static const
2545CSN_DESCR_BEGIN(PTR_EGPRS_t)
2546 M_UNION (PTR_EGPRS_t, 4),
2547 M_TYPE (PTR_EGPRS_t, u.PTR_EGPRS_00, PTR_EGPRS_00_t),
2548 CSN_ERROR (PTR_EGPRS_t, "01 <PTR_EGPRS>", CSN_ERROR_STREAM_NOT_SUPPORTED),
2549 CSN_ERROR (PTR_EGPRS_t, "10 <PTR_EGPRS>", CSN_ERROR_STREAM_NOT_SUPPORTED),
2550 CSN_ERROR (PTR_EGPRS_t, "11 <PTR_EGPRS>", CSN_ERROR_STREAM_NOT_SUPPORTED),
2551CSN_DESCR_END (PTR_EGPRS_t)
2552
2553static const
2554CSN_DESCR_BEGIN(Packet_Timeslot_Reconfigure_t)
2555 M_UINT (Packet_Timeslot_Reconfigure_t, MESSAGE_TYPE, 6),
2556 M_UINT (Packet_Timeslot_Reconfigure_t, PAGE_MODE, 2),
2557
2558 M_FIXED (Packet_Timeslot_Reconfigure_t, 1, 0x00),
2559 M_TYPE (Packet_Timeslot_Reconfigure_t, Global_TFI, Global_TFI_t),
2560
2561 M_UNION (Packet_Timeslot_Reconfigure_t, 2),
2562 M_TYPE (Packet_Timeslot_Reconfigure_t, u.PTR_GPRS_Struct, PTR_GPRS_t),
2563 M_TYPE (Packet_Timeslot_Reconfigure_t, u.PTR_EGPRS_Struct, PTR_EGPRS_t),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04002564
2565 M_PADDING_BITS(Packet_Timeslot_Reconfigure_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002566CSN_DESCR_END (Packet_Timeslot_Reconfigure_t)
2567
2568typedef Packet_Timeslot_Reconfigure_t PTRCheck_t;
2569
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01002570#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002571static const
2572CSN_DESCR_BEGIN(PTRCheck_t)
2573 M_UINT (PTRCheck_t, MESSAGE_TYPE, 6),
2574 M_UINT (PTRCheck_t, PAGE_MODE, 2),
2575 M_FIXED (PTRCheck_t, 1, 0x00),/* 0 fixed */
2576 M_TYPE (PTRCheck_t, Global_TFI, Global_TFI_t),
2577CSN_DESCR_END (PTRCheck_t)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01002578#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002579
2580/*< Packet PRACH Parameters message content > */
2581static const
2582CSN_DESCR_BEGIN(PRACH_Control_t)
2583 M_UINT_ARRAY (PRACH_Control_t, ACC_CONTR_CLASS, 8, 2), /* bit (16) == 8bit*2 */
2584 M_UINT_ARRAY (PRACH_Control_t, MAX_RETRANS, 2, 4), /* bit (2) * 4 */
2585 M_UINT (PRACH_Control_t, S, 4),
2586 M_UINT (PRACH_Control_t, TX_INT, 4),
2587 M_NEXT_EXIST (PRACH_Control_t, Exist_PERSISTENCE_LEVEL, 1),
2588 M_UINT_ARRAY (PRACH_Control_t, PERSISTENCE_LEVEL, 4, 4),
2589CSN_DESCR_END (PRACH_Control_t)
2590
2591static const
2592CSN_DESCR_BEGIN(Cell_Allocation_t)
2593 M_REC_ARRAY (Cell_Allocation_t, RFL_Number, NoOfRFLs, 4),
2594CSN_DESCR_END (Cell_Allocation_t)
2595
2596static const
2597CSN_DESCR_BEGIN(HCS_t)
2598 M_UINT (HCS_t, PRIORITY_CLASS, 3),
2599 M_UINT (HCS_t, HCS_THR, 5),
2600CSN_DESCR_END (HCS_t)
2601
2602static const
2603CSN_DESCR_BEGIN(Location_Repeat_t)
2604 M_UINT (Location_Repeat_t, PBCCH_LOCATION, 2),
2605 M_UINT (Location_Repeat_t, PSI1_REPEAT_PERIOD, 4),
2606CSN_DESCR_END (Location_Repeat_t)
2607
2608static const
2609CSN_DESCR_BEGIN(SI13_PBCCH_Location_t)
2610 M_UNION (SI13_PBCCH_Location_t, 2),
2611 M_UINT (SI13_PBCCH_Location_t, u.SI13_LOCATION, 1),
2612 M_TYPE (SI13_PBCCH_Location_t, u.lr, Location_Repeat_t),
2613CSN_DESCR_END (SI13_PBCCH_Location_t)
2614
2615static const
2616CSN_DESCR_BEGIN(Cell_Selection_t)
2617 M_UINT (Cell_Selection_t, BSIC, 6),
2618 M_UINT (Cell_Selection_t, CELL_BAR_ACCESS_2, 1),
2619 M_UINT (Cell_Selection_t, EXC_ACC, 1),
2620 M_UINT (Cell_Selection_t, SAME_RA_AS_SERVING_CELL, 1),
2621 M_NEXT_EXIST (Cell_Selection_t, Exist_RXLEV_and_TXPWR, 2),
2622 M_UINT (Cell_Selection_t, GPRS_RXLEV_ACCESS_MIN, 6),
2623 M_UINT (Cell_Selection_t, GPRS_MS_TXPWR_MAX_CCH, 5),
2624 M_NEXT_EXIST (Cell_Selection_t, Exist_OFFSET_and_TIME, 2),
2625 M_UINT (Cell_Selection_t, GPRS_TEMPORARY_OFFSET, 3),
2626 M_UINT (Cell_Selection_t, GPRS_PENALTY_TIME, 5),
2627 M_NEXT_EXIST (Cell_Selection_t, Exist_GPRS_RESELECT_OFFSET, 1),
2628 M_UINT (Cell_Selection_t, GPRS_RESELECT_OFFSET, 5),
2629 M_NEXT_EXIST (Cell_Selection_t, Exist_HCS, 1),
2630 M_TYPE (Cell_Selection_t, HCS, HCS_t),
2631 M_NEXT_EXIST (Cell_Selection_t, Exist_SI13_PBCCH_Location, 1),
2632 M_TYPE (Cell_Selection_t, SI13_PBCCH_Location, SI13_PBCCH_Location_t),
2633CSN_DESCR_END (Cell_Selection_t)
2634
2635static const
2636CSN_DESCR_BEGIN(Cell_Selection_Params_With_FreqDiff_t)
2637 M_VAR_BITMAP (Cell_Selection_Params_With_FreqDiff_t, FREQUENCY_DIFF, FREQ_DIFF_LENGTH, 0),
2638 M_TYPE (Cell_Selection_Params_With_FreqDiff_t, Cell_SelectionParams, Cell_Selection_t),
2639CSN_DESCR_END (Cell_Selection_Params_With_FreqDiff_t)
2640
Pau Espin Pedrol4c238702021-05-28 18:39:35 +02002641CSN_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 +01002642{
2643 guint i;
2644 guint8 freq_diff_len = *(guint8*)param1;
2645 Cell_Selection_Params_With_FreqDiff_t *pCell_Sel_Param = (Cell_Selection_Params_With_FreqDiff_t*)param2;
2646
2647 for( i=0; i<16; i++, pCell_Sel_Param++ )
2648 {
2649 pCell_Sel_Param->FREQ_DIFF_LENGTH = freq_diff_len;
2650 }
2651
2652 return 0;
2653}
2654
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002655static const
2656CSN_DESCR_BEGIN(NeighbourCellParameters_t)
2657 M_UINT (NeighbourCellParameters_t, START_FREQUENCY, 10),
2658 M_TYPE (NeighbourCellParameters_t, Cell_Selection, Cell_Selection_t),
2659 M_UINT (NeighbourCellParameters_t, NR_OF_REMAINING_CELLS, 4),
2660 M_UINT_OFFSET(NeighbourCellParameters_t, FREQ_DIFF_LENGTH, 3, 1),/* offset 1 */
Pau Espin Pedrolf3ac06b2020-03-26 18:13:19 +01002661 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 +03002662 M_VAR_TARRAY (NeighbourCellParameters_t, Cell_Selection_Params_With_FreqDiff, Cell_Selection_Params_With_FreqDiff_t, NR_OF_REMAINING_CELLS),
2663CSN_DESCR_END (NeighbourCellParameters_t)
2664
2665static const
2666CSN_DESCR_BEGIN(NeighbourCellList_t)
2667 M_REC_TARRAY (NeighbourCellList_t, Parameters, NeighbourCellParameters_t, Count),
2668CSN_DESCR_END (NeighbourCellList_t)
2669
2670static const
2671CSN_DESCR_BEGIN(Cell_Selection_2_t)
2672 M_UINT (Cell_Selection_2_t, CELL_BAR_ACCESS_2, 1),
2673 M_UINT (Cell_Selection_2_t, EXC_ACC, 1),
2674 M_UINT (Cell_Selection_2_t, SAME_RA_AS_SERVING_CELL, 1),
2675 M_NEXT_EXIST (Cell_Selection_2_t, Exist_RXLEV_and_TXPWR, 2),
2676 M_UINT (Cell_Selection_2_t, GPRS_RXLEV_ACCESS_MIN, 6),
2677 M_UINT (Cell_Selection_2_t, GPRS_MS_TXPWR_MAX_CCH, 5),
2678 M_NEXT_EXIST (Cell_Selection_2_t, Exist_OFFSET_and_TIME, 2),
2679 M_UINT (Cell_Selection_2_t, GPRS_TEMPORARY_OFFSET, 3),
2680 M_UINT (Cell_Selection_2_t, GPRS_PENALTY_TIME, 5),
2681 M_NEXT_EXIST (Cell_Selection_2_t, Exist_GPRS_RESELECT_OFFSET, 1),
2682 M_UINT (Cell_Selection_2_t, GPRS_RESELECT_OFFSET, 5),
2683 M_NEXT_EXIST (Cell_Selection_2_t, Exist_HCS, 1),
2684 M_TYPE (Cell_Selection_2_t, HCS, HCS_t),
2685 M_NEXT_EXIST (Cell_Selection_2_t, Exist_SI13_PBCCH_Location, 1),
2686 M_TYPE (Cell_Selection_2_t, SI13_PBCCH_Location, SI13_PBCCH_Location_t),
2687CSN_DESCR_END (Cell_Selection_2_t)
2688
2689static const
2690CSN_DESCR_BEGIN(Packet_PRACH_Parameters_t)
2691 M_UINT (Packet_PRACH_Parameters_t, MESSAGE_TYPE, 6),
2692 M_UINT (Packet_PRACH_Parameters_t, PAGE_MODE, 2),
2693
2694 M_TYPE (Packet_PRACH_Parameters_t, PRACH_Control, PRACH_Control_t),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04002695 M_PADDING_BITS(Packet_PRACH_Parameters_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002696CSN_DESCR_END (Packet_PRACH_Parameters_t)
2697
2698/* < Packet Access Reject message content > */
2699static const
2700CSN_ChoiceElement_t RejectID[] =
2701{
Pau Espin Pedrol7cce8252020-01-24 16:41:14 +01002702 {1, 0x00, 0, M_UINT(RejectID_t, u.TLLI, 32)},
2703 {2, 0x02, 0, M_TYPE(RejectID_t, u.Packet_Request_Reference, Packet_Request_Reference_t)},
2704 {2, 0x03, 0, M_TYPE(RejectID_t, u.Global_TFI, Global_TFI_t)},
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002705};
2706
2707static const
2708CSN_DESCR_BEGIN(RejectID_t)
2709 M_CHOICE (RejectID_t, UnionType, RejectID, ElementsOf(RejectID)),
2710CSN_DESCR_END (RejectID_t)
2711
2712static const
2713CSN_DESCR_BEGIN(Reject_t)
2714 M_TYPE (Reject_t, ID, RejectID_t),
2715
2716 M_NEXT_EXIST (Reject_t, Exist_Wait, 2),
2717 M_UINT (Reject_t, WAIT_INDICATION, 8),
2718 M_UINT (Reject_t, WAIT_INDICATION_SIZE, 1),
2719CSN_DESCR_END (Reject_t)
2720
2721static const
2722CSN_DESCR_BEGIN(Packet_Access_Reject_t)
2723 M_UINT (Packet_Access_Reject_t, MESSAGE_TYPE, 6),
2724 M_UINT (Packet_Access_Reject_t, PAGE_MODE, 2),
2725
Pau Espin Pedrol81b40cb2020-03-23 15:23:51 +01002726 M_REC_TARRAY_1(Packet_Access_Reject_t, Reject, Reject_t, Count_Reject),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04002727 M_PADDING_BITS(Packet_Access_Reject_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002728CSN_DESCR_END (Packet_Access_Reject_t)
2729
2730/* < Packet Cell Change Order message content > */
2731static const
2732CSN_ChoiceElement_t PacketCellChangeOrderID[] =
2733{
Pau Espin Pedrol7cce8252020-01-24 16:41:14 +01002734 {1, 0, 0, M_TYPE(PacketCellChangeOrderID_t, u.Global_TFI, Global_TFI_t)},
2735 {2, 0x02, 0, M_UINT(PacketCellChangeOrderID_t, u.TLLI, 32)},
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002736};
2737/* PacketCellChangeOrderID_t; */
2738
2739static const
2740CSN_DESCR_BEGIN(PacketCellChangeOrderID_t)
2741 M_CHOICE (PacketCellChangeOrderID_t, UnionType, PacketCellChangeOrderID, ElementsOf(PacketCellChangeOrderID)),
2742CSN_DESCR_END (PacketCellChangeOrderID_t)
2743
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01002744#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002745static const
2746CSN_DESCR_BEGIN(h_FreqBsicCell_t)
2747 M_UINT (h_FreqBsicCell_t, BSIC, 6),
2748 M_TYPE (h_FreqBsicCell_t, Cell_Selection, Cell_Selection_t),
2749CSN_DESCR_END (h_FreqBsicCell_t)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01002750#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002751
2752static const CSN_DESCR_BEGIN(CellSelectionParamsWithFreqDiff_t)
2753 /*FREQUENCY_DIFF is really an integer but the number of bits to decode it are stored in FREQ_DIFF_LENGTH*/
2754 M_VAR_BITMAP (CellSelectionParamsWithFreqDiff_t, FREQUENCY_DIFF, FREQ_DIFF_LENGTH, 0),
2755 M_UINT (CellSelectionParamsWithFreqDiff_t, BSIC, 6),
2756 M_NEXT_EXIST (CellSelectionParamsWithFreqDiff_t, Exist_CellSelectionParams, 1),
2757 M_TYPE (CellSelectionParamsWithFreqDiff_t, CellSelectionParams, Cell_Selection_2_t),
2758CSN_DESCR_END (CellSelectionParamsWithFreqDiff_t)
2759
Pau Espin Pedrol4c238702021-05-28 18:39:35 +02002760CSN_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 +01002761{
2762 guint i;
2763 guint8 freq_diff_len = *(guint8*)param1;
2764 CellSelectionParamsWithFreqDiff_t *pCell_Sel_Param = (CellSelectionParamsWithFreqDiff_t*)param2;
2765
2766 for( i=0; i<16; i++, pCell_Sel_Param++ )
2767 {
2768 pCell_Sel_Param->FREQ_DIFF_LENGTH = freq_diff_len;
2769 }
2770
2771 return 0;
2772}
2773
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002774static const
2775CSN_DESCR_BEGIN(Add_Frequency_list_t)
2776 M_UINT (Add_Frequency_list_t, START_FREQUENCY, 10),
2777 M_UINT (Add_Frequency_list_t, BSIC, 6),
2778
2779 M_NEXT_EXIST (Add_Frequency_list_t, Exist_Cell_Selection, 1),
2780 M_TYPE (Add_Frequency_list_t, Cell_Selection, Cell_Selection_2_t),
2781
2782 M_UINT (Add_Frequency_list_t, NR_OF_FREQUENCIES, 5),
2783 M_UINT_OFFSET(Add_Frequency_list_t, FREQ_DIFF_LENGTH, 3, 1),/*offset 1*/
2784
Pau Espin Pedrolf3ac06b2020-03-26 18:13:19 +01002785 M_CALLBACK (Add_Frequency_list_t, callback_init_Cell_Sel_Param_2_FREQUENCY_DIFF, FREQ_DIFF_LENGTH, CellSelectionParamsWithFreqDiff),
2786
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002787 M_VAR_TARRAY (Add_Frequency_list_t, CellSelectionParamsWithFreqDiff, CellSelectionParamsWithFreqDiff_t, NR_OF_FREQUENCIES),
2788CSN_DESCR_END (Add_Frequency_list_t)
2789
2790static const CSN_DESCR_BEGIN(Removed_Freq_Index_t)
2791 M_UINT(Removed_Freq_Index_t, REMOVED_FREQ_INDEX, 6),
2792CSN_DESCR_END(Removed_Freq_Index_t)
2793
2794static const
2795CSN_DESCR_BEGIN(NC_Frequency_list_t)
2796 M_NEXT_EXIST (NC_Frequency_list_t, Exist_REMOVED_FREQ, 2),
2797 M_UINT_OFFSET(NC_Frequency_list_t, NR_OF_REMOVED_FREQ, 5, 1),/*offset 1*/
2798 M_VAR_TARRAY (NC_Frequency_list_t, Removed_Freq_Index, Removed_Freq_Index_t, NR_OF_REMOVED_FREQ),
2799 M_REC_TARRAY (NC_Frequency_list_t, Add_Frequency, Add_Frequency_list_t, Count_Add_Frequency),
2800CSN_DESCR_END (NC_Frequency_list_t)
2801
2802static const
2803CSN_DESCR_BEGIN(NC_Measurement_Parameters_t)
2804 M_UINT (NC_Measurement_Parameters_t, NETWORK_CONTROL_ORDER, 2),
2805
2806 M_NEXT_EXIST (NC_Measurement_Parameters_t, Exist_NC, 3),
2807 M_UINT (NC_Measurement_Parameters_t, NC_NON_DRX_PERIOD, 3),
2808 M_UINT (NC_Measurement_Parameters_t, NC_REPORTING_PERIOD_I, 3),
2809 M_UINT (NC_Measurement_Parameters_t, NC_REPORTING_PERIOD_T, 3),
2810CSN_DESCR_END (NC_Measurement_Parameters_t)
2811
2812static const
2813CSN_DESCR_BEGIN(NC_Measurement_Parameters_with_Frequency_List_t)
2814 M_UINT (NC_Measurement_Parameters_with_Frequency_List_t, NETWORK_CONTROL_ORDER, 2),
2815
2816 M_NEXT_EXIST (NC_Measurement_Parameters_with_Frequency_List_t, Exist_NC, 3),
2817 M_UINT (NC_Measurement_Parameters_with_Frequency_List_t, NC_NON_DRX_PERIOD, 3),
2818 M_UINT (NC_Measurement_Parameters_with_Frequency_List_t, NC_REPORTING_PERIOD_I, 3),
2819 M_UINT (NC_Measurement_Parameters_with_Frequency_List_t, NC_REPORTING_PERIOD_T, 3),
2820
2821 M_NEXT_EXIST (NC_Measurement_Parameters_with_Frequency_List_t, Exist_NC_FREQUENCY_LIST, 1),
2822 M_TYPE (NC_Measurement_Parameters_with_Frequency_List_t, NC_Frequency_list, NC_Frequency_list_t),
2823CSN_DESCR_END (NC_Measurement_Parameters_with_Frequency_List_t)
2824
2825/*< Packet Cell Change Order message contents >*/
2826static const
2827CSN_DESCR_BEGIN(BA_IND_t)
2828 M_UINT (BA_IND_t, BA_IND, 1),
2829 M_UINT (BA_IND_t, BA_IND_3G, 1),
2830CSN_DESCR_END (BA_IND_t)
2831
2832static const
2833CSN_DESCR_BEGIN(GPRSReportPriority_t)
2834 M_UINT (GPRSReportPriority_t, NUMBER_CELLS, 7),
2835 M_VAR_BITMAP (GPRSReportPriority_t, REPORT_PRIORITY, NUMBER_CELLS, 0),
2836CSN_DESCR_END (GPRSReportPriority_t)
2837
2838static const
2839CSN_DESCR_BEGIN(OffsetThreshold_t)
2840 M_UINT (OffsetThreshold_t, REPORTING_OFFSET, 3),
2841 M_UINT (OffsetThreshold_t, REPORTING_THRESHOLD, 3),
2842CSN_DESCR_END (OffsetThreshold_t)
2843
2844static const
2845CSN_DESCR_BEGIN(GPRSMeasurementParams_PMO_PCCO_t)
2846 M_NEXT_EXIST (GPRSMeasurementParams_PMO_PCCO_t, Exist_MULTI_BAND_REPORTING, 1),
2847 M_UINT (GPRSMeasurementParams_PMO_PCCO_t, MULTI_BAND_REPORTING, 2),
2848
2849 M_NEXT_EXIST (GPRSMeasurementParams_PMO_PCCO_t, Exist_SERVING_BAND_REPORTING, 1),
2850 M_UINT (GPRSMeasurementParams_PMO_PCCO_t, SERVING_BAND_REPORTING, 2),
2851
2852 M_UINT (GPRSMeasurementParams_PMO_PCCO_t, SCALE_ORD, 2),
2853
2854 M_NEXT_EXIST (GPRSMeasurementParams_PMO_PCCO_t, Exist_OffsetThreshold900, 1),
2855 M_TYPE (GPRSMeasurementParams_PMO_PCCO_t, OffsetThreshold900, OffsetThreshold_t),
2856
2857 M_NEXT_EXIST (GPRSMeasurementParams_PMO_PCCO_t, Exist_OffsetThreshold1800, 1),
2858 M_TYPE (GPRSMeasurementParams_PMO_PCCO_t, OffsetThreshold1800, OffsetThreshold_t),
2859
2860 M_NEXT_EXIST (GPRSMeasurementParams_PMO_PCCO_t, Exist_OffsetThreshold400, 1),
2861 M_TYPE (GPRSMeasurementParams_PMO_PCCO_t, OffsetThreshold400, OffsetThreshold_t),
2862
2863 M_NEXT_EXIST (GPRSMeasurementParams_PMO_PCCO_t, Exist_OffsetThreshold1900, 1),
2864 M_TYPE (GPRSMeasurementParams_PMO_PCCO_t, OffsetThreshold1900, OffsetThreshold_t),
2865
2866 M_NEXT_EXIST (GPRSMeasurementParams_PMO_PCCO_t, Exist_OffsetThreshold850, 1),
2867 M_TYPE (GPRSMeasurementParams_PMO_PCCO_t, OffsetThreshold850, OffsetThreshold_t),
2868CSN_DESCR_END (GPRSMeasurementParams_PMO_PCCO_t)
2869
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01002870#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002871static const
2872CSN_DESCR_BEGIN(GPRSMeasurementParams3G_t)
2873 M_UINT (GPRSMeasurementParams3G_t, Qsearch_p, 4),
2874 M_UINT (GPRSMeasurementParams3G_t, SearchPrio3G, 1),
2875
2876 M_NEXT_EXIST (GPRSMeasurementParams3G_t, existRepParamsFDD, 2),
2877 M_UINT (GPRSMeasurementParams3G_t, RepQuantFDD, 1),
2878 M_UINT (GPRSMeasurementParams3G_t, MultiratReportingFDD, 2),
2879
2880 M_NEXT_EXIST (GPRSMeasurementParams3G_t, existReportingParamsFDD, 2),
2881 M_UINT (GPRSMeasurementParams3G_t, ReportingOffsetFDD, 3),
2882 M_UINT (GPRSMeasurementParams3G_t, ReportingThresholdFDD, 3),
2883
2884 M_NEXT_EXIST (GPRSMeasurementParams3G_t, existMultiratReportingTDD, 1),
2885 M_UINT (GPRSMeasurementParams3G_t, MultiratReportingTDD, 2),
2886
2887 M_NEXT_EXIST (GPRSMeasurementParams3G_t, existOffsetThresholdTDD, 2),
2888 M_UINT (GPRSMeasurementParams3G_t, ReportingOffsetTDD, 3),
2889 M_UINT (GPRSMeasurementParams3G_t, ReportingThresholdTDD, 3),
2890CSN_DESCR_END (GPRSMeasurementParams3G_t)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01002891#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03002892
2893static const
2894CSN_DESCR_BEGIN(MultiratParams3G_t)
2895 M_NEXT_EXIST (MultiratParams3G_t, existMultiratReporting, 1),
2896 M_UINT (MultiratParams3G_t, MultiratReporting, 2),
2897
2898 M_NEXT_EXIST (MultiratParams3G_t, existOffsetThreshold, 1),
2899 M_TYPE (MultiratParams3G_t, OffsetThreshold, OffsetThreshold_t),
2900CSN_DESCR_END (MultiratParams3G_t)
2901
2902static const
2903CSN_DESCR_BEGIN(ENH_GPRSMeasurementParams3G_PMO_t)
2904 M_UINT (ENH_GPRSMeasurementParams3G_PMO_t, Qsearch_P, 4),
2905 M_UINT (ENH_GPRSMeasurementParams3G_PMO_t, SearchPrio3G, 1),
2906
2907 M_NEXT_EXIST (ENH_GPRSMeasurementParams3G_PMO_t, existRepParamsFDD, 2),
2908 M_UINT (ENH_GPRSMeasurementParams3G_PMO_t, RepQuantFDD, 1),
2909 M_UINT (ENH_GPRSMeasurementParams3G_PMO_t, MultiratReportingFDD, 2),
2910
2911 M_NEXT_EXIST (ENH_GPRSMeasurementParams3G_PMO_t, existOffsetThreshold, 1),
2912 M_TYPE (ENH_GPRSMeasurementParams3G_PMO_t, OffsetThreshold, OffsetThreshold_t),
2913
2914 M_TYPE (ENH_GPRSMeasurementParams3G_PMO_t, ParamsTDD, MultiratParams3G_t),
2915 M_TYPE (ENH_GPRSMeasurementParams3G_PMO_t, ParamsCDMA2000, MultiratParams3G_t),
2916CSN_DESCR_END (ENH_GPRSMeasurementParams3G_PMO_t)
2917
2918static const
2919CSN_DESCR_BEGIN(ENH_GPRSMeasurementParams3G_PCCO_t)
2920 M_UINT (ENH_GPRSMeasurementParams3G_PCCO_t, Qsearch_P, 4),
2921 M_UINT (ENH_GPRSMeasurementParams3G_PCCO_t, SearchPrio3G, 1),
2922
2923 M_NEXT_EXIST (ENH_GPRSMeasurementParams3G_PCCO_t, existRepParamsFDD, 2),
2924 M_UINT (ENH_GPRSMeasurementParams3G_PCCO_t, RepQuantFDD, 1),
2925 M_UINT (ENH_GPRSMeasurementParams3G_PCCO_t, MultiratReportingFDD, 2),
2926
2927 M_NEXT_EXIST (ENH_GPRSMeasurementParams3G_PCCO_t, existOffsetThreshold, 1),
2928 M_TYPE (ENH_GPRSMeasurementParams3G_PCCO_t, OffsetThreshold, OffsetThreshold_t),
2929
2930 M_TYPE (ENH_GPRSMeasurementParams3G_PCCO_t, ParamsTDD, MultiratParams3G_t),
2931CSN_DESCR_END (ENH_GPRSMeasurementParams3G_PCCO_t)
2932
2933static const
2934CSN_DESCR_BEGIN(N2_t)
2935 M_UINT (N2_t, REMOVED_3GCELL_INDEX, 7),
2936 M_UINT (N2_t, CELL_DIFF_LENGTH_3G, 3),
2937 M_VAR_BITMAP (N2_t, CELL_DIFF_3G, CELL_DIFF_LENGTH_3G, 0),
2938CSN_DESCR_END (N2_t)
2939
2940static const
2941CSN_DESCR_BEGIN (N1_t)
2942 M_UINT_OFFSET (N1_t, N2_Count, 5, 1), /*offset 1*/
2943 M_VAR_TARRAY (N1_t, N2s, N2_t, N2_Count),
2944CSN_DESCR_END (N1_t)
2945
2946static const
2947CSN_DESCR_BEGIN (Removed3GCellDescription_t)
2948 M_UINT_OFFSET (Removed3GCellDescription_t, N1_Count, 2, 1), /* offset 1 */
2949 M_VAR_TARRAY (Removed3GCellDescription_t, N1s, N1_t, N1_Count),
2950CSN_DESCR_END (Removed3GCellDescription_t)
2951
2952static const
2953CSN_DESCR_BEGIN(CDMA2000_Description_t)
2954 M_UINT (CDMA2000_Description_t, Complete_This, 1),
2955 CSN_ERROR (CDMA2000_Description_t, "Not Implemented", CSN_ERROR_STREAM_NOT_SUPPORTED),
2956CSN_DESCR_END (CDMA2000_Description_t)
2957
Pau Espin Pedrolf3ac06b2020-03-26 18:13:19 +01002958#if 0
2959static 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};
2960#endif
2961#if 0
2962static CSN_CallBackStatus_t callback_UTRAN_FDD_map_NrOfFrequencies(proto_tree *tree _U_, tvbuff_t *tvb _U_, void* param1, void* param2,
2963 int bit_offset _U_, int ett_csn1 _U_, packet_info* pinfo _U_)
2964{ /* TS 44.060 Table 11.2.9b.2.a */
2965 guint8 *pNrOfCells = (guint8*)param1;
2966 guint8 *pBitsInCellInfo = (guint8*)param2;
2967
2968 if ( *pNrOfCells < 32 )
2969 {
2970 *pBitsInCellInfo = NR_OF_FDD_CELLS_map[*pNrOfCells];
2971 }
2972 else
2973 {
2974 *pBitsInCellInfo = 0;
2975 }
2976
2977 return 0;
2978}
2979
2980static CSN_CallBackStatus_t callback_UTRAN_FDD_compute_FDD_CELL_INFORMATION(proto_tree *tree, tvbuff_t *tvb, void* param1, void* param2 _U_,
2981 int bit_offset, int ett_csn1, packet_info* pinfo _U_)
2982{
2983 proto_tree *subtree;
2984 UTRAN_FDD_NeighbourCells_t * pUtranFddNcell = (UTRAN_FDD_NeighbourCells_t*)param1;
2985 gint xdd_cell_info, wsize, nwi, jwi, w[64], i, iused;
2986 gint curr_bit_offset, idx;
2987
2988 curr_bit_offset = bit_offset;
2989 idx = pUtranFddNcell->BitsInCellInfo;
2990
2991 if ( idx > 0 )
2992 {
2993 subtree = proto_tree_add_subtree(tree, tvb, curr_bit_offset>>3, 1, ett_csn1, NULL, "FDD_CELL_INFORMATION: ");
2994
2995 if (pUtranFddNcell->Indic0)
2996 {
2997 proto_tree_add_uint(tree, hf_gsm_rlcmac_scrambling_code, tvb, curr_bit_offset>>3, 0, 0);
2998 proto_tree_add_uint(tree, hf_gsm_rlcmac_diversity, tvb, curr_bit_offset>>3, 0, 0);
2999 }
3000
3001 if (idx)
3002 {
3003 wsize = 10;
3004 nwi = 1;
3005 jwi = 0;
3006 i = 1;
3007
3008 while (idx > 0)
3009 {
3010 w[i] = tvb_get_bits(tvb, curr_bit_offset, wsize, ENC_BIG_ENDIAN);
3011 curr_bit_offset += wsize;
3012 idx -= wsize;
3013 if (w[i] == 0)
3014 {
3015 idx = 0;
3016 break;
3017 }
3018 if (++jwi==nwi)
3019 {
3020 jwi = 0;
3021 nwi <<= 1;
3022 wsize--;
3023 }
3024 i++;
3025 }
3026 if (idx < 0)
3027 {
3028 curr_bit_offset += idx;
3029 }
3030 iused = i-1;
3031
3032 for (i=1; i <= iused; i++)
3033 {
3034 xdd_cell_info = f_k(i, w, 1024);
3035 proto_tree_add_uint(subtree, hf_gsm_rlcmac_scrambling_code, tvb, curr_bit_offset>>3, 0, xdd_cell_info & 0x01FF);
3036 proto_tree_add_uint(subtree, hf_gsm_rlcmac_diversity, tvb, curr_bit_offset>>3, 0, (xdd_cell_info >> 9) & 0x01);
3037 }
3038 }
3039 }
3040
3041 return curr_bit_offset - bit_offset;
3042}
3043#endif
3044
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03003045static const
3046CSN_DESCR_BEGIN(UTRAN_FDD_NeighbourCells_t)
3047 M_UINT (UTRAN_FDD_NeighbourCells_t, ZERO, 1),
3048 M_UINT (UTRAN_FDD_NeighbourCells_t, UARFCN, 14),
3049 M_UINT (UTRAN_FDD_NeighbourCells_t, Indic0, 1),
3050 M_UINT (UTRAN_FDD_NeighbourCells_t, NrOfCells, 5),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03003051 M_VAR_BITMAP (UTRAN_FDD_NeighbourCells_t, CellInfo, BitsInCellInfo, 0),
3052CSN_DESCR_END (UTRAN_FDD_NeighbourCells_t)
3053
3054static const
3055CSN_DESCR_BEGIN(UTRAN_FDD_Description_t)
3056 M_NEXT_EXIST (UTRAN_FDD_Description_t, existBandwidth, 1),
3057 M_UINT (UTRAN_FDD_Description_t, Bandwidth, 3),
3058 M_REC_TARRAY (UTRAN_FDD_Description_t, CellParams, UTRAN_FDD_NeighbourCells_t, NrOfFrequencies),
3059CSN_DESCR_END (UTRAN_FDD_Description_t)
3060
Pau Espin Pedrolf3ac06b2020-03-26 18:13:19 +01003061static 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};
3062static CSN_CallBackStatus_t callback_UTRAN_TDD_map_NrOfFrequencies(struct bitvec *vector, unsigned *readIndex, void* param1, void* param2)
3063{ /* TS 44.060 Table 11.2.9b.2.b */
3064 guint8 * pNrOfCells = (guint8*)param1;
3065 guint8 * pBitsInCellInfo = (guint8*)param2;
3066
3067 if ( *pNrOfCells < 32 )
3068 {
3069 *pBitsInCellInfo = NR_OF_TDD_CELLS_map[*pNrOfCells];
3070 }
3071 else
3072 {
3073 *pBitsInCellInfo = 0;
3074 }
3075
3076 return 0;
3077}
3078
3079static CSN_CallBackStatus_t callback_UTRAN_TDD_compute_TDD_CELL_INFORMATION(struct bitvec *vector, unsigned *readIndex, void* param1, void* param2)
3080{
3081 UTRAN_TDD_NeighbourCells_t *pUtranTddNcell = (UTRAN_TDD_NeighbourCells_t *)param1;
3082 gint wsize, nwi, jwi, w[64], i, iused;
3083 guint bit_offset, curr_bit_offset;
3084 gint idx;
3085
3086 bit_offset = *readIndex;
3087 curr_bit_offset = bit_offset;
3088 idx = pUtranTddNcell->BitsInCellInfo;
3089
3090 if ( idx > 0 )
3091 {
3092 /*
3093 subtree = proto_tree_add_subtree(tree, tvb, curr_bit_offset>>3, 1, ett_csn1, NULL, "TDD_CELL_INFORMATION: ");
3094
3095 if (pUtranTddNcell->Indic0)
3096 {
3097 proto_tree_add_uint(tree, hf_gsm_rlcmac_cell_parameter, tvb, curr_bit_offset>>3, 0, 0);
3098 proto_tree_add_uint(tree, hf_gsm_rlcmac_sync_case_tstd, tvb, curr_bit_offset>>3, 0, 0);
3099 proto_tree_add_uint(tree, hf_gsm_rlcmac_diversity_tdd, tvb, curr_bit_offset>>3, 0, 0);
3100 }
3101 */
3102
3103 if (idx)
3104 {
3105 wsize = 10;
3106 nwi = 1;
3107 jwi = 0;
3108 i = 1;
3109
3110 while (idx > 0)
3111 {
3112 w[i] = ntohs((uint16_t)bitvec_read_field(vector, &curr_bit_offset, wsize));
3113 idx -= wsize;
3114 if (w[i] == 0)
3115 {
3116 idx = 0;
3117 break;
3118 }
3119 if (++jwi==nwi)
3120 {
3121 jwi = 0;
3122 nwi <<= 1;
3123 wsize--;
3124 }
3125 i++;
3126 }
3127 if (idx < 0)
3128 {
3129 curr_bit_offset += idx;
3130 }
3131 iused = i-1;
3132
3133 for (i=1; i <= iused; i++)
3134 {
3135 /*
3136 xdd_cell_info = f_k(i, w, 1024);
3137 proto_tree_add_uint(subtree, hf_gsm_rlcmac_cell_parameter, tvb, curr_bit_offset>>3, 0, xdd_cell_info & 0x007F);
3138 proto_tree_add_uint(subtree, hf_gsm_rlcmac_sync_case_tstd, tvb, curr_bit_offset>>3, 0, (xdd_cell_info >> 7) & 0x01);
3139 proto_tree_add_uint(subtree, hf_gsm_rlcmac_diversity_tdd, tvb, curr_bit_offset>>3, 0, (xdd_cell_info >> 8) & 0x01);
3140 */
3141 }
3142 }
3143 }
3144 *readIndex = curr_bit_offset;
3145 return curr_bit_offset - bit_offset;
3146}
3147
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03003148static const
3149CSN_DESCR_BEGIN(UTRAN_TDD_NeighbourCells_t)
3150 M_UINT (UTRAN_TDD_NeighbourCells_t, ZERO, 1),
3151 M_UINT (UTRAN_TDD_NeighbourCells_t, UARFCN, 14),
3152 M_UINT (UTRAN_TDD_NeighbourCells_t, Indic0, 1),
3153 M_UINT (UTRAN_TDD_NeighbourCells_t, NrOfCells, 5),
Pau Espin Pedrolf3ac06b2020-03-26 18:13:19 +01003154 M_CALLBACK (UTRAN_TDD_NeighbourCells_t, callback_UTRAN_TDD_map_NrOfFrequencies, NrOfCells, BitsInCellInfo),
3155 M_CALLBACK (UTRAN_TDD_NeighbourCells_t, callback_UTRAN_TDD_compute_TDD_CELL_INFORMATION, ZERO, CellInfo),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03003156CSN_DESCR_END (UTRAN_TDD_NeighbourCells_t)
3157
3158static const
3159CSN_DESCR_BEGIN(UTRAN_TDD_Description_t)
3160 M_NEXT_EXIST (UTRAN_TDD_Description_t, existBandwidth, 1),
3161 M_UINT (UTRAN_TDD_Description_t, Bandwidth, 3),
3162 M_REC_TARRAY (UTRAN_TDD_Description_t, CellParams, UTRAN_TDD_NeighbourCells_t, NrOfFrequencies),
3163CSN_DESCR_END (UTRAN_TDD_Description_t)
3164
3165static const
3166CSN_DESCR_BEGIN(NeighbourCellDescription3G_PMO_t)
3167 M_NEXT_EXIST (NeighbourCellDescription3G_PMO_t, Exist_Index_Start_3G, 1),
3168 M_UINT (NeighbourCellDescription3G_PMO_t, Index_Start_3G, 7),
3169 M_NEXT_EXIST (NeighbourCellDescription3G_PMO_t, Exist_Absolute_Index_Start_EMR, 1),
3170 M_UINT (NeighbourCellDescription3G_PMO_t, Absolute_Index_Start_EMR, 7),
3171 M_NEXT_EXIST (NeighbourCellDescription3G_PMO_t, Exist_UTRAN_FDD_Description, 1),
3172 M_TYPE (NeighbourCellDescription3G_PMO_t, UTRAN_FDD_Description, UTRAN_FDD_Description_t),
3173 M_NEXT_EXIST (NeighbourCellDescription3G_PMO_t, Exist_UTRAN_TDD_Description, 1),
3174 M_TYPE (NeighbourCellDescription3G_PMO_t, UTRAN_TDD_Description, UTRAN_TDD_Description_t),
3175 M_NEXT_EXIST (NeighbourCellDescription3G_PMO_t, Exist_CDMA2000_Description, 1),
3176 M_TYPE (NeighbourCellDescription3G_PMO_t, CDMA2000_Description, CDMA2000_Description_t),
3177 M_NEXT_EXIST (NeighbourCellDescription3G_PMO_t, Exist_Removed3GCellDescription, 1),
3178 M_TYPE (NeighbourCellDescription3G_PMO_t, Removed3GCellDescription, Removed3GCellDescription_t),
3179CSN_DESCR_END (NeighbourCellDescription3G_PMO_t)
3180
3181static const
3182CSN_DESCR_BEGIN(NeighbourCellDescription3G_PCCO_t)
3183 M_NEXT_EXIST (NeighbourCellDescription3G_PCCO_t, Exist_Index_Start_3G, 1),
3184 M_UINT (NeighbourCellDescription3G_PCCO_t, Index_Start_3G, 7),
3185 M_NEXT_EXIST (NeighbourCellDescription3G_PCCO_t, Exist_Absolute_Index_Start_EMR, 1),
3186 M_UINT (NeighbourCellDescription3G_PCCO_t, Absolute_Index_Start_EMR, 7),
3187 M_NEXT_EXIST (NeighbourCellDescription3G_PCCO_t, Exist_UTRAN_FDD_Description, 1),
3188 M_TYPE (NeighbourCellDescription3G_PCCO_t, UTRAN_FDD_Description, UTRAN_FDD_Description_t),
3189 M_NEXT_EXIST (NeighbourCellDescription3G_PCCO_t, Exist_UTRAN_TDD_Description, 1),
3190 M_TYPE (NeighbourCellDescription3G_PCCO_t, UTRAN_TDD_Description, UTRAN_TDD_Description_t),
3191 M_NEXT_EXIST (NeighbourCellDescription3G_PCCO_t, Exist_Removed3GCellDescription, 1),
3192 M_TYPE (NeighbourCellDescription3G_PCCO_t, Removed3GCellDescription, Removed3GCellDescription_t),
3193CSN_DESCR_END (NeighbourCellDescription3G_PCCO_t)
3194
3195static const
3196CSN_DESCR_BEGIN(ENH_Measurement_Parameters_PMO_t)
3197 M_UNION (ENH_Measurement_Parameters_PMO_t, 2),
3198 M_TYPE (ENH_Measurement_Parameters_PMO_t, u.BA_IND, BA_IND_t),
3199 M_UINT (ENH_Measurement_Parameters_PMO_t, u.PSI3_CHANGE_MARK, 2),
3200 M_UINT (ENH_Measurement_Parameters_PMO_t, PMO_IND, 1),
3201
3202 M_UINT (ENH_Measurement_Parameters_PMO_t, REPORT_TYPE, 1),
3203 M_UINT (ENH_Measurement_Parameters_PMO_t, REPORTING_RATE, 1),
3204 M_UINT (ENH_Measurement_Parameters_PMO_t, INVALID_BSIC_REPORTING, 1),
3205
3206 M_NEXT_EXIST (ENH_Measurement_Parameters_PMO_t, Exist_NeighbourCellDescription3G, 1),
3207 M_TYPE (ENH_Measurement_Parameters_PMO_t, NeighbourCellDescription3G, NeighbourCellDescription3G_PMO_t),
3208
3209 M_NEXT_EXIST (ENH_Measurement_Parameters_PMO_t, Exist_GPRSReportPriority, 1),
3210 M_TYPE (ENH_Measurement_Parameters_PMO_t, GPRSReportPriority, GPRSReportPriority_t),
3211
3212 M_NEXT_EXIST (ENH_Measurement_Parameters_PMO_t, Exist_GPRSMeasurementParams, 1),
3213 M_TYPE (ENH_Measurement_Parameters_PMO_t, GPRSMeasurementParams, GPRSMeasurementParams_PMO_PCCO_t),
3214
3215 M_NEXT_EXIST (ENH_Measurement_Parameters_PMO_t, Exist_GPRSMeasurementParams3G, 1),
3216 M_TYPE (ENH_Measurement_Parameters_PMO_t, GPRSMeasurementParams3G, ENH_GPRSMeasurementParams3G_PMO_t),
3217CSN_DESCR_END (ENH_Measurement_Parameters_PMO_t)
3218
3219static const
3220CSN_DESCR_BEGIN(ENH_Measurement_Parameters_PCCO_t)
3221 M_UNION (ENH_Measurement_Parameters_PCCO_t, 2),
3222 M_TYPE (ENH_Measurement_Parameters_PCCO_t, u.BA_IND, BA_IND_t),
3223 M_UINT (ENH_Measurement_Parameters_PCCO_t, u.PSI3_CHANGE_MARK, 2),
3224 M_UINT (ENH_Measurement_Parameters_PCCO_t, PMO_IND, 1),
3225
3226 M_UINT (ENH_Measurement_Parameters_PCCO_t, REPORT_TYPE, 1),
3227 M_UINT (ENH_Measurement_Parameters_PCCO_t, REPORTING_RATE, 1),
3228 M_UINT (ENH_Measurement_Parameters_PCCO_t, INVALID_BSIC_REPORTING, 1),
3229
3230 M_NEXT_EXIST (ENH_Measurement_Parameters_PCCO_t, Exist_NeighbourCellDescription3G, 1),
3231 M_TYPE (ENH_Measurement_Parameters_PCCO_t, NeighbourCellDescription3G, NeighbourCellDescription3G_PCCO_t),
3232
3233 M_NEXT_EXIST (ENH_Measurement_Parameters_PCCO_t, Exist_GPRSReportPriority, 1),
3234 M_TYPE (ENH_Measurement_Parameters_PCCO_t, GPRSReportPriority, GPRSReportPriority_t),
3235
3236 M_NEXT_EXIST (ENH_Measurement_Parameters_PCCO_t, Exist_GPRSMeasurementParams, 1),
3237 M_TYPE (ENH_Measurement_Parameters_PCCO_t, GPRSMeasurementParams, GPRSMeasurementParams_PMO_PCCO_t),
3238
3239 M_NEXT_EXIST (ENH_Measurement_Parameters_PCCO_t, Exist_GPRSMeasurementParams3G, 1),
3240 M_TYPE (ENH_Measurement_Parameters_PCCO_t, GPRSMeasurementParams3G, ENH_GPRSMeasurementParams3G_PCCO_t),
3241CSN_DESCR_END (ENH_Measurement_Parameters_PCCO_t)
3242
3243static const
3244CSN_DESCR_BEGIN(CCN_Support_Description_t)
3245 M_UINT (CCN_Support_Description_t, NUMBER_CELLS, 7),
3246 M_VAR_BITMAP (CCN_Support_Description_t, CCN_SUPPORTED, NUMBER_CELLS, 0),
3247CSN_DESCR_END (CCN_Support_Description_t)
3248
3249static const
3250CSN_DESCR_BEGIN(lu_ModeCellSelectionParameters_t)
3251 M_UINT (lu_ModeCellSelectionParameters_t, CELL_BAR_QUALIFY_3, 2),
3252 M_NEXT_EXIST (lu_ModeCellSelectionParameters_t, Exist_SI13_Alt_PBCCH_Location, 1),
3253 M_TYPE (lu_ModeCellSelectionParameters_t, SI13_Alt_PBCCH_Location, SI13_PBCCH_Location_t),
3254CSN_DESCR_END (lu_ModeCellSelectionParameters_t)
3255
3256static const
3257CSN_DESCR_BEGIN(lu_ModeCellSelectionParams_t)
3258 M_NEXT_EXIST (lu_ModeCellSelectionParams_t, Exist_lu_ModeCellSelectionParams, 1),
3259 M_TYPE (lu_ModeCellSelectionParams_t, lu_ModeCellSelectionParameters, lu_ModeCellSelectionParameters_t),
3260CSN_DESCR_END (lu_ModeCellSelectionParams_t)
3261
3262static const
3263CSN_DESCR_BEGIN(lu_ModeNeighbourCellParams_t)
3264 M_TYPE (lu_ModeNeighbourCellParams_t, lu_ModeCellSelectionParameters, lu_ModeCellSelectionParams_t),
3265 M_UINT (lu_ModeNeighbourCellParams_t, NR_OF_FREQUENCIES, 5),
3266 M_VAR_TARRAY (lu_ModeNeighbourCellParams_t, lu_ModeCellSelectionParams, lu_ModeCellSelectionParams_t, NR_OF_FREQUENCIES),
3267CSN_DESCR_END (lu_ModeNeighbourCellParams_t)
3268
3269static const
3270CSN_DESCR_BEGIN(lu_ModeOnlyCellSelection_t)
3271 M_UINT (lu_ModeOnlyCellSelection_t, CELL_BAR_QUALIFY_3, 2),
3272 M_UINT (lu_ModeOnlyCellSelection_t, SAME_RA_AS_SERVING_CELL, 1),
3273
3274 M_NEXT_EXIST (lu_ModeOnlyCellSelection_t, Exist_RXLEV_and_TXPWR, 2),
3275 M_UINT (lu_ModeOnlyCellSelection_t, GPRS_RXLEV_ACCESS_MIN, 6),
3276 M_UINT (lu_ModeOnlyCellSelection_t, GPRS_MS_TXPWR_MAX_CCH, 5),
3277
3278 M_NEXT_EXIST (lu_ModeOnlyCellSelection_t, Exist_OFFSET_and_TIME, 2),
3279 M_UINT (lu_ModeOnlyCellSelection_t, GPRS_TEMPORARY_OFFSET, 3),
3280 M_UINT (lu_ModeOnlyCellSelection_t, GPRS_PENALTY_TIME, 5),
3281
3282 M_NEXT_EXIST (lu_ModeOnlyCellSelection_t, Exist_GPRS_RESELECT_OFFSET, 1),
3283 M_UINT (lu_ModeOnlyCellSelection_t, GPRS_RESELECT_OFFSET, 5),
3284
3285 M_NEXT_EXIST (lu_ModeOnlyCellSelection_t, Exist_HCS, 1),
3286 M_TYPE (lu_ModeOnlyCellSelection_t, HCS, HCS_t),
3287
3288 M_NEXT_EXIST (lu_ModeOnlyCellSelection_t, Exist_SI13_Alt_PBCCH_Location, 1),
3289 M_TYPE (lu_ModeOnlyCellSelection_t, SI13_Alt_PBCCH_Location, SI13_PBCCH_Location_t),
3290CSN_DESCR_END (lu_ModeOnlyCellSelection_t)
3291
3292static const
3293CSN_DESCR_BEGIN(lu_ModeOnlyCellSelectionParamsWithFreqDiff_t)
3294 /*FREQUENCY_DIFF is really an integer but the number of bits to decode it are stored in FREQ_DIFF_LENGTH*/
3295 M_VAR_BITMAP (lu_ModeOnlyCellSelectionParamsWithFreqDiff_t, FREQUENCY_DIFF, FREQ_DIFF_LENGTH, 0),
3296 M_UINT (lu_ModeOnlyCellSelectionParamsWithFreqDiff_t, BSIC, 6),
3297 M_NEXT_EXIST (lu_ModeOnlyCellSelectionParamsWithFreqDiff_t, Exist_lu_ModeOnlyCellSelectionParams, 1),
3298 M_TYPE (lu_ModeOnlyCellSelectionParamsWithFreqDiff_t, lu_ModeOnlyCellSelectionParams, lu_ModeOnlyCellSelection_t),
3299CSN_DESCR_END (lu_ModeOnlyCellSelectionParamsWithFreqDiff_t)
3300
Pau Espin Pedrolf3ac06b2020-03-26 18:13:19 +01003301CSN_CallBackStatus_t callback_init_luMode_Cell_Sel_Param_FREQUENCY_DIFF(struct bitvec *vector, unsigned *readIndex, void* param1, void* param2)
3302{
3303 guint i;
3304 guint8 freq_diff_len = *(guint8*)param1;
3305 lu_ModeOnlyCellSelectionParamsWithFreqDiff_t *pArray = (lu_ModeOnlyCellSelectionParamsWithFreqDiff_t*)param2;
3306
3307 for( i=0; i<16; i++, pArray++ )
3308 {
3309 pArray->FREQ_DIFF_LENGTH = freq_diff_len;
3310 }
3311
3312 return 0;
3313}
3314
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03003315static const
3316CSN_DESCR_BEGIN(Add_lu_ModeOnlyFrequencyList_t)
3317 M_UINT (Add_lu_ModeOnlyFrequencyList_t, START_FREQUENCY, 10),
3318 M_UINT (Add_lu_ModeOnlyFrequencyList_t, BSIC, 6),
3319
3320 M_NEXT_EXIST (Add_lu_ModeOnlyFrequencyList_t, Exist_lu_ModeCellSelection, 1),
3321 M_TYPE (Add_lu_ModeOnlyFrequencyList_t, lu_ModeOnlyCellSelection, lu_ModeOnlyCellSelection_t),
3322
3323 M_UINT (Add_lu_ModeOnlyFrequencyList_t, NR_OF_FREQUENCIES, 5),
3324 M_UINT (Add_lu_ModeOnlyFrequencyList_t, FREQ_DIFF_LENGTH, 3),
3325
Pau Espin Pedrolf3ac06b2020-03-26 18:13:19 +01003326 M_CALLBACK (Add_lu_ModeOnlyFrequencyList_t, callback_init_luMode_Cell_Sel_Param_FREQUENCY_DIFF, FREQ_DIFF_LENGTH, lu_ModeOnlyCellSelectionParamsWithFreqDiff),
3327
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03003328 M_VAR_TARRAY (Add_lu_ModeOnlyFrequencyList_t, lu_ModeOnlyCellSelectionParamsWithFreqDiff, lu_ModeOnlyCellSelectionParamsWithFreqDiff_t, NR_OF_FREQUENCIES),
3329CSN_DESCR_END (Add_lu_ModeOnlyFrequencyList_t)
3330
3331static const
3332CSN_DESCR_BEGIN(NC_lu_ModeOnlyCapableCellList_t)
3333 M_REC_TARRAY (NC_lu_ModeOnlyCapableCellList_t, Add_lu_ModeOnlyFrequencyList, Add_lu_ModeOnlyFrequencyList_t, Count_Add_lu_ModeOnlyFrequencyList),
3334CSN_DESCR_END (NC_lu_ModeOnlyCapableCellList_t)
3335
3336static const
3337CSN_DESCR_BEGIN(GPRS_AdditionalMeasurementParams3G_t)
3338 M_NEXT_EXIST (GPRS_AdditionalMeasurementParams3G_t, Exist_FDD_REPORTING_THRESHOLD_2, 1),
3339 M_UINT (GPRS_AdditionalMeasurementParams3G_t, FDD_REPORTING_THRESHOLD_2, 6),
3340CSN_DESCR_END (GPRS_AdditionalMeasurementParams3G_t)
3341
3342static const
3343CSN_DESCR_BEGIN(ServingCellPriorityParametersDescription_t)
3344 M_UINT (ServingCellPriorityParametersDescription_t, GERAN_PRIORITY, 3),
3345 M_UINT (ServingCellPriorityParametersDescription_t, THRESH_Priority_Search, 4),
3346 M_UINT (ServingCellPriorityParametersDescription_t, THRESH_GSM_low, 4),
3347 M_UINT (ServingCellPriorityParametersDescription_t, H_PRIO, 2),
3348 M_UINT (ServingCellPriorityParametersDescription_t, T_Reselection, 2),
3349CSN_DESCR_END (ServingCellPriorityParametersDescription_t)
3350
3351static const
3352CSN_DESCR_BEGIN(RepeatedUTRAN_PriorityParameters_t)
3353 M_REC_ARRAY (RepeatedUTRAN_PriorityParameters_t, UTRAN_FREQUENCY_INDEX_a, NumberOfFrequencyIndexes, 5),
3354
3355 M_NEXT_EXIST (RepeatedUTRAN_PriorityParameters_t, existUTRAN_PRIORITY, 1),
3356 M_UINT (RepeatedUTRAN_PriorityParameters_t, UTRAN_PRIORITY, 3),
3357
3358 M_UINT (RepeatedUTRAN_PriorityParameters_t, THRESH_UTRAN_high, 5),
3359
3360 M_NEXT_EXIST (RepeatedUTRAN_PriorityParameters_t, existTHRESH_UTRAN_low, 1),
3361 M_UINT (RepeatedUTRAN_PriorityParameters_t, THRESH_UTRAN_low, 5),
3362
3363 M_NEXT_EXIST (RepeatedUTRAN_PriorityParameters_t, existUTRAN_QRXLEVMIN, 1),
3364 M_UINT (RepeatedUTRAN_PriorityParameters_t, UTRAN_QRXLEVMIN, 5),
3365CSN_DESCR_END (RepeatedUTRAN_PriorityParameters_t)
3366
3367static const
3368CSN_DESCR_BEGIN(PriorityParametersDescription3G_PMO_t)
3369
3370 M_NEXT_EXIST (PriorityParametersDescription3G_PMO_t, existDEFAULT_UTRAN_Parameters, 3),
3371 M_UINT (PriorityParametersDescription3G_PMO_t, DEFAULT_UTRAN_PRIORITY, 3),
3372 M_UINT (PriorityParametersDescription3G_PMO_t, DEFAULT_THRESH_UTRAN, 5),
3373 M_UINT (PriorityParametersDescription3G_PMO_t, DEFAULT_UTRAN_QRXLEVMIN, 5),
3374
3375 M_REC_TARRAY (PriorityParametersDescription3G_PMO_t, RepeatedUTRAN_PriorityParameters_a, RepeatedUTRAN_PriorityParameters_t, NumberOfPriorityParameters),
3376CSN_DESCR_END (PriorityParametersDescription3G_PMO_t)
3377
3378static const
3379CSN_DESCR_BEGIN(EUTRAN_REPORTING_THRESHOLD_OFFSET_t)
3380 M_NEXT_EXIST (EUTRAN_REPORTING_THRESHOLD_OFFSET_t, existEUTRAN_FDD_REPORTING_THRESHOLD_OFFSET, 5),
3381 M_UINT (EUTRAN_REPORTING_THRESHOLD_OFFSET_t, EUTRAN_FDD_REPORTING_THRESHOLD, 3),
3382 M_NEXT_EXIST (EUTRAN_REPORTING_THRESHOLD_OFFSET_t, existEUTRAN_FDD_REPORTING_THRESHOLD_2, 1),
3383 M_UINT (EUTRAN_REPORTING_THRESHOLD_OFFSET_t, EUTRAN_FDD_REPORTING_THRESHOLD_2, 6),
3384 M_NEXT_EXIST (EUTRAN_REPORTING_THRESHOLD_OFFSET_t, existEUTRAN_FDD_REPORTING_OFFSET, 1),
3385 M_UINT (EUTRAN_REPORTING_THRESHOLD_OFFSET_t, EUTRAN_FDD_REPORTING_OFFSET, 3),
3386
3387 M_NEXT_EXIST (EUTRAN_REPORTING_THRESHOLD_OFFSET_t, existEUTRAN_TDD_REPORTING_THRESHOLD_OFFSET, 5),
3388 M_UINT (EUTRAN_REPORTING_THRESHOLD_OFFSET_t, EUTRAN_TDD_REPORTING_THRESHOLD, 3),
3389 M_NEXT_EXIST (EUTRAN_REPORTING_THRESHOLD_OFFSET_t, existEUTRAN_TDD_REPORTING_THRESHOLD_2, 1),
3390 M_UINT (EUTRAN_REPORTING_THRESHOLD_OFFSET_t, EUTRAN_TDD_REPORTING_THRESHOLD_2, 6),
3391 M_NEXT_EXIST (EUTRAN_REPORTING_THRESHOLD_OFFSET_t, existEUTRAN_TDD_REPORTING_OFFSET, 1),
3392 M_UINT (EUTRAN_REPORTING_THRESHOLD_OFFSET_t, EUTRAN_TDD_REPORTING_OFFSET, 3),
3393CSN_DESCR_END (EUTRAN_REPORTING_THRESHOLD_OFFSET_t)
3394
3395static const
3396CSN_DESCR_BEGIN(GPRS_EUTRAN_MeasurementParametersDescription_t)
3397 M_UINT (GPRS_EUTRAN_MeasurementParametersDescription_t, Qsearch_P_EUTRAN, 4),
Anders Broman8ea3cbe2020-01-28 17:36:33 +01003398 M_UINT (GPRS_EUTRAN_MeasurementParametersDescription_t, EUTRAN_REP_QUANT, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03003399 M_UINT (GPRS_EUTRAN_MeasurementParametersDescription_t, EUTRAN_MULTIRAT_REPORTING, 2),
3400 M_TYPE (GPRS_EUTRAN_MeasurementParametersDescription_t, EUTRAN_REPORTING_THRESHOLD_OFFSET, EUTRAN_REPORTING_THRESHOLD_OFFSET_t),
3401CSN_DESCR_END (GPRS_EUTRAN_MeasurementParametersDescription_t)
3402
3403static const
3404CSN_DESCR_BEGIN(RepeatedEUTRAN_Cells_t)
3405 M_UINT (RepeatedEUTRAN_Cells_t, EARFCN, 16),
3406 M_NEXT_EXIST (RepeatedEUTRAN_Cells_t, existMeasurementBandwidth, 1),
3407 M_UINT (RepeatedEUTRAN_Cells_t, MeasurementBandwidth, 3),
3408CSN_DESCR_END (RepeatedEUTRAN_Cells_t)
3409
3410static const
3411CSN_DESCR_BEGIN(RepeatedEUTRAN_NeighbourCells_t)
3412 M_REC_TARRAY (RepeatedEUTRAN_NeighbourCells_t, EUTRAN_Cells_a, RepeatedEUTRAN_Cells_t, nbrOfEUTRAN_Cells),
3413
3414 M_NEXT_EXIST (RepeatedEUTRAN_NeighbourCells_t, existEUTRAN_PRIORITY, 1),
3415 M_UINT (RepeatedEUTRAN_NeighbourCells_t, EUTRAN_PRIORITY, 3),
3416
3417 M_UINT (RepeatedEUTRAN_NeighbourCells_t, THRESH_EUTRAN_high, 5),
3418
3419 M_NEXT_EXIST (RepeatedEUTRAN_NeighbourCells_t, existTHRESH_EUTRAN_low, 1),
3420 M_UINT (RepeatedEUTRAN_NeighbourCells_t, THRESH_EUTRAN_low, 5),
3421
3422 M_NEXT_EXIST (RepeatedEUTRAN_NeighbourCells_t, existEUTRAN_QRXLEVMIN, 1),
3423 M_UINT (RepeatedEUTRAN_NeighbourCells_t, EUTRAN_QRXLEVMIN, 5),
3424CSN_DESCR_END (RepeatedEUTRAN_NeighbourCells_t)
3425
3426static const
3427CSN_DESCR_BEGIN(PCID_Pattern_t)
3428 M_UINT (PCID_Pattern_t, PCID_Pattern_length, 3),
3429 M_VAR_BITMAP (PCID_Pattern_t, PCID_Pattern, PCID_Pattern_length, 1), /* offset 1, 44.060 12.57 */
3430 M_UINT (PCID_Pattern_t, PCID_Pattern_sense, 1),
3431CSN_DESCR_END (PCID_Pattern_t)
3432
3433static const
3434CSN_DESCR_BEGIN(PCID_Group_IE_t)
3435
3436 M_REC_ARRAY (PCID_Group_IE_t, PCID_a, NumberOfPCIDs, 9),
3437
3438 M_NEXT_EXIST (PCID_Group_IE_t, existPCID_BITMAP_GROUP, 1),
3439 M_UINT (PCID_Group_IE_t, PCID_BITMAP_GROUP, 6),
3440
3441 M_REC_TARRAY (PCID_Group_IE_t, PCID_Pattern_a, PCID_Pattern_t, NumberOfPCID_Patterns),
3442CSN_DESCR_END (PCID_Group_IE_t)
3443
3444static const
3445CSN_DESCR_BEGIN(EUTRAN_FREQUENCY_INDEX_t)
3446 M_UINT (EUTRAN_FREQUENCY_INDEX_t, EUTRAN_FREQUENCY_INDEX, 3),
3447CSN_DESCR_END (EUTRAN_FREQUENCY_INDEX_t)
3448
3449static const
3450CSN_DESCR_BEGIN(RepeatedEUTRAN_NotAllowedCells_t)
3451 M_TYPE (RepeatedEUTRAN_NotAllowedCells_t, NotAllowedCells, PCID_Group_IE_t),
3452
3453 M_REC_TARRAY (RepeatedEUTRAN_NotAllowedCells_t, EUTRAN_FREQUENCY_INDEX_a, EUTRAN_FREQUENCY_INDEX_t, NumberOfFrequencyIndexes),
3454CSN_DESCR_END (RepeatedEUTRAN_NotAllowedCells_t)
3455
3456static const
3457CSN_DESCR_BEGIN(RepeatedEUTRAN_PCID_to_TA_mapping_t)
3458 M_REC_TARRAY (RepeatedEUTRAN_PCID_to_TA_mapping_t, PCID_ToTA_Mapping_a, PCID_Group_IE_t, NumberOfMappings),
3459 M_REC_TARRAY (RepeatedEUTRAN_PCID_to_TA_mapping_t, EUTRAN_FREQUENCY_INDEX_a, EUTRAN_FREQUENCY_INDEX_t, NumberOfFrequencyIndexes),
3460CSN_DESCR_END (RepeatedEUTRAN_PCID_to_TA_mapping_t)
3461
3462static const
3463CSN_DESCR_BEGIN(EUTRAN_ParametersDescription_PMO_t)
Anders Broman8ea3cbe2020-01-28 17:36:33 +01003464 M_UINT (EUTRAN_ParametersDescription_PMO_t, EUTRAN_CCN_ACTIVE, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03003465
3466 M_NEXT_EXIST (EUTRAN_ParametersDescription_PMO_t, existGPRS_EUTRAN_MeasurementParametersDescription, 1),
3467 M_TYPE (EUTRAN_ParametersDescription_PMO_t, GPRS_EUTRAN_MeasurementParametersDescription, GPRS_EUTRAN_MeasurementParametersDescription_t),
3468
3469 M_REC_TARRAY (EUTRAN_ParametersDescription_PMO_t, RepeatedEUTRAN_NeighbourCells_a, RepeatedEUTRAN_NeighbourCells_t, nbrOfRepeatedEUTRAN_NeighbourCellsStructs),
3470 M_REC_TARRAY (EUTRAN_ParametersDescription_PMO_t, RepeatedEUTRAN_NotAllowedCells_a, RepeatedEUTRAN_NotAllowedCells_t, NumberOfNotAllowedCells),
3471 M_REC_TARRAY (EUTRAN_ParametersDescription_PMO_t, RepeatedEUTRAN_PCID_to_TA_mapping_a, RepeatedEUTRAN_PCID_to_TA_mapping_t, NumberOfMappings),
3472CSN_DESCR_END (EUTRAN_ParametersDescription_PMO_t)
3473
3474static const
3475CSN_DESCR_BEGIN(PSC_Pattern_t)
3476 M_UINT (PSC_Pattern_t, PSC_Pattern_length, 3),
3477 M_VAR_BITMAP (PSC_Pattern_t, PSC_Pattern, PSC_Pattern_length, 1),
Anders Broman8ea3cbe2020-01-28 17:36:33 +01003478 M_UINT (PSC_Pattern_t, PSC_Pattern_sense, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03003479CSN_DESCR_END (PSC_Pattern_t)
3480
3481static const
3482CSN_DESCR_BEGIN(PSC_Group_t)
3483 M_REC_ARRAY (PSC_Group_t, PSC, PSC_Count, 9),
3484 M_REC_TARRAY (PSC_Group_t, PSC_Pattern, PSC_Pattern_t, PSC_Pattern_Count),
3485CSN_DESCR_END (PSC_Group_t)
3486
3487static const
3488CSN_DESCR_BEGIN(ThreeG_CSG_Description_Body_t)
3489 M_TYPE (ThreeG_CSG_Description_Body_t, CSG_PSC_SPLIT, PSC_Group_t),
3490 M_REC_ARRAY (ThreeG_CSG_Description_Body_t, UTRAN_FREQUENCY_INDEX, Count, 5),
3491CSN_DESCR_END (ThreeG_CSG_Description_Body_t)
3492
3493static const
3494CSN_DESCR_BEGIN(ThreeG_CSG_Description_t)
3495 M_REC_TARRAY (ThreeG_CSG_Description_t, ThreeG_CSG_Description_Body, ThreeG_CSG_Description_Body_t, Count),
3496CSN_DESCR_END (ThreeG_CSG_Description_t)
3497
3498static const
3499CSN_DESCR_BEGIN(EUTRAN_CSG_Description_Body_t)
3500 M_TYPE (EUTRAN_CSG_Description_Body_t, CSG_PCI_SPLIT, PSC_Group_t),
3501 M_REC_ARRAY (EUTRAN_CSG_Description_Body_t, EUTRAN_FREQUENCY_INDEX, Count, 3),
3502CSN_DESCR_END (EUTRAN_CSG_Description_Body_t)
3503
3504static const
3505CSN_DESCR_BEGIN(EUTRAN_CSG_Description_t)
3506 M_REC_TARRAY (EUTRAN_CSG_Description_t, EUTRAN_CSG_Description_Body, EUTRAN_CSG_Description_Body_t, Count),
3507CSN_DESCR_END (EUTRAN_CSG_Description_t)
3508
3509static const
3510CSN_DESCR_BEGIN(Meas_Ctrl_Param_Desp_t)
3511 M_NEXT_EXIST (Meas_Ctrl_Param_Desp_t, existMeasurement_Control_EUTRAN, 3),
Anders Broman8ea3cbe2020-01-28 17:36:33 +01003512 M_UINT (Meas_Ctrl_Param_Desp_t, Measurement_Control_EUTRAN, 1),
3513 M_UINT (Meas_Ctrl_Param_Desp_t, EUTRAN_FREQUENCY_INDEX_top, 3),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03003514 M_REC_ARRAY (Meas_Ctrl_Param_Desp_t, EUTRAN_FREQUENCY_INDEX, Count_EUTRAN_FREQUENCY_INDEX, 3),
3515 M_NEXT_EXIST (Meas_Ctrl_Param_Desp_t, existMeasurement_Control_UTRAN, 1),
Anders Broman8ea3cbe2020-01-28 17:36:33 +01003516 M_UINT (Meas_Ctrl_Param_Desp_t, Measurement_Control_UTRAN, 1),
3517 M_UINT (Meas_Ctrl_Param_Desp_t, UTRAN_FREQUENCY_INDEX_top, 5),
3518 M_REC_ARRAY (Meas_Ctrl_Param_Desp_t, UTRAN_FREQUENCY_INDEX, Count_UTRAN_FREQUENCY_INDEX, 5),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03003519CSN_DESCR_END (Meas_Ctrl_Param_Desp_t)
3520
3521static const
3522CSN_DESCR_BEGIN(Reselection_Based_On_RSRQ_t)
3523 M_UINT (Reselection_Based_On_RSRQ_t, THRESH_EUTRAN_high_Q, 5),
3524 M_NEXT_EXIST (Reselection_Based_On_RSRQ_t, existTHRESH_EUTRAN_low_Q, 1),
3525 M_UINT (Reselection_Based_On_RSRQ_t, THRESH_EUTRAN_low_Q, 5),
3526 M_NEXT_EXIST (Reselection_Based_On_RSRQ_t, existEUTRAN_QQUALMIN, 1),
3527 M_UINT (Reselection_Based_On_RSRQ_t, EUTRAN_QQUALMIN, 4),
3528 M_NEXT_EXIST (Reselection_Based_On_RSRQ_t, existEUTRAN_RSRPmin, 1),
3529 M_UINT (Reselection_Based_On_RSRQ_t, EUTRAN_RSRPmin, 5),
3530CSN_DESCR_END (Reselection_Based_On_RSRQ_t)
3531
3532static const
3533CSN_DESCR_BEGIN(Rept_EUTRAN_Enh_Cell_Resel_Param_t)
3534 M_REC_ARRAY (Rept_EUTRAN_Enh_Cell_Resel_Param_t, EUTRAN_FREQUENCY_INDEX, Count_EUTRAN_FREQUENCY_INDEX, 3),
3535 M_UNION (Rept_EUTRAN_Enh_Cell_Resel_Param_t, 2),
3536 M_UINT (Rept_EUTRAN_Enh_Cell_Resel_Param_t, u.EUTRAN_Qmin, 4),
3537 M_TYPE (Rept_EUTRAN_Enh_Cell_Resel_Param_t, u.Reselection_Based_On_RSRQ, Reselection_Based_On_RSRQ_t),
3538CSN_DESCR_END (Rept_EUTRAN_Enh_Cell_Resel_Param_t)
3539
3540static const
3541CSN_DESCR_BEGIN(Enh_Cell_Reselect_Param_Desp_t)
3542 M_REC_TARRAY (Enh_Cell_Reselect_Param_Desp_t, Repeated_EUTRAN_Enhanced_Cell_Reselection_Parameters, Rept_EUTRAN_Enh_Cell_Resel_Param_t, Count),
3543CSN_DESCR_END (Enh_Cell_Reselect_Param_Desp_t)
3544
3545static const
3546CSN_DESCR_BEGIN(UTRAN_CSG_Cells_Reporting_Desp_t)
3547 M_NEXT_EXIST (UTRAN_CSG_Cells_Reporting_Desp_t, existUTRAN_CSG_FDD_REPORTING_THRESHOLD, 2),
3548 M_UINT (UTRAN_CSG_Cells_Reporting_Desp_t, UTRAN_CSG_FDD_REPORTING_THRESHOLD, 3),
3549 M_UINT (UTRAN_CSG_Cells_Reporting_Desp_t, UTRAN_CSG_FDD_REPORTING_THRESHOLD_2, 6),
3550 M_NEXT_EXIST (UTRAN_CSG_Cells_Reporting_Desp_t, existUTRAN_CSG_TDD_REPORTING_THRESHOLD, 1),
3551 M_UINT (UTRAN_CSG_Cells_Reporting_Desp_t, UTRAN_CSG_TDD_REPORTING_THRESHOLD, 3),
3552CSN_DESCR_END (UTRAN_CSG_Cells_Reporting_Desp_t)
3553
3554static const
3555CSN_DESCR_BEGIN(EUTRAN_CSG_Cells_Reporting_Desp_t)
3556 M_NEXT_EXIST (EUTRAN_CSG_Cells_Reporting_Desp_t, existEUTRAN_CSG_FDD_REPORTING_THRESHOLD, 2),
3557 M_UINT (EUTRAN_CSG_Cells_Reporting_Desp_t, EUTRAN_CSG_FDD_REPORTING_THRESHOLD, 3),
3558 M_UINT (EUTRAN_CSG_Cells_Reporting_Desp_t, EUTRAN_CSG_FDD_REPORTING_THRESHOLD_2, 6),
3559 M_NEXT_EXIST (EUTRAN_CSG_Cells_Reporting_Desp_t, existEUTRAN_CSG_TDD_REPORTING_THRESHOLD, 2),
3560 M_UINT (EUTRAN_CSG_Cells_Reporting_Desp_t, EUTRAN_CSG_TDD_REPORTING_THRESHOLD, 3),
3561 M_UINT (EUTRAN_CSG_Cells_Reporting_Desp_t, EUTRAN_CSG_TDD_REPORTING_THRESHOLD_2, 6),
3562CSN_DESCR_END (EUTRAN_CSG_Cells_Reporting_Desp_t)
3563
3564
3565static const
3566CSN_DESCR_BEGIN(CSG_Cells_Reporting_Desp_t)
3567 M_NEXT_EXIST (CSG_Cells_Reporting_Desp_t, existUTRAN_CSG_Cells_Reporting_Description, 1),
3568 M_TYPE (CSG_Cells_Reporting_Desp_t, UTRAN_CSG_Cells_Reporting_Description, UTRAN_CSG_Cells_Reporting_Desp_t),
3569 M_NEXT_EXIST (CSG_Cells_Reporting_Desp_t, existEUTRAN_CSG_Cells_Reporting_Description, 1),
3570 M_TYPE (CSG_Cells_Reporting_Desp_t, EUTRAN_CSG_Cells_Reporting_Description, EUTRAN_CSG_Cells_Reporting_Desp_t),
3571CSN_DESCR_END (CSG_Cells_Reporting_Desp_t)
3572
3573static const
3574CSN_DESCR_BEGIN (PriorityAndEUTRAN_ParametersDescription_PMO_t)
3575 M_NEXT_EXIST (PriorityAndEUTRAN_ParametersDescription_PMO_t, existServingCellPriorityParametersDescription, 1),
3576 M_TYPE (PriorityAndEUTRAN_ParametersDescription_PMO_t, ServingCellPriorityParametersDescription, ServingCellPriorityParametersDescription_t),
3577 M_NEXT_EXIST (PriorityAndEUTRAN_ParametersDescription_PMO_t, existPriorityParametersDescription3G_PMO, 1),
3578 M_TYPE (PriorityAndEUTRAN_ParametersDescription_PMO_t, PriorityParametersDescription3G_PMO, PriorityParametersDescription3G_PMO_t),
3579 M_NEXT_EXIST (PriorityAndEUTRAN_ParametersDescription_PMO_t, existEUTRAN_ParametersDescription_PMO, 1),
3580 M_TYPE (PriorityAndEUTRAN_ParametersDescription_PMO_t, EUTRAN_ParametersDescription_PMO, EUTRAN_ParametersDescription_PMO_t),
3581CSN_DESCR_END (PriorityAndEUTRAN_ParametersDescription_PMO_t)
3582
3583
3584static const
3585CSN_DESCR_BEGIN (Delete_All_Stored_Individual_Priorities_t)
Anders Broman72c102a2020-01-24 14:31:15 +01003586 M_NULL (Delete_All_Stored_Individual_Priorities_t, dummy, 0),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03003587CSN_DESCR_END (Delete_All_Stored_Individual_Priorities_t)
3588
3589static const
3590CSN_DESCR_BEGIN (Individual_UTRAN_Priority_FDD_t)
3591 M_REC_ARRAY (Individual_UTRAN_Priority_FDD_t, FDD_ARFCN, Count, 14),
3592CSN_DESCR_END (Individual_UTRAN_Priority_FDD_t)
3593
3594static const
3595CSN_DESCR_BEGIN (Individual_UTRAN_Priority_TDD_t)
3596 M_REC_ARRAY (Individual_UTRAN_Priority_TDD_t, TDD_ARFCN, Count, 14),
3597CSN_DESCR_END (Individual_UTRAN_Priority_TDD_t)
3598
3599static const
3600CSN_DESCR_BEGIN (Repeated_Individual_UTRAN_Priority_Parameters_t)
3601 M_UNION (Repeated_Individual_UTRAN_Priority_Parameters_t, 2),
3602 M_TYPE (Repeated_Individual_UTRAN_Priority_Parameters_t, u.Individual_UTRAN_Priority_FDD, Individual_UTRAN_Priority_FDD_t),
3603 M_TYPE (Repeated_Individual_UTRAN_Priority_Parameters_t, u.Individual_UTRAN_Priority_TDD, Individual_UTRAN_Priority_TDD_t),
3604 M_UINT (Repeated_Individual_UTRAN_Priority_Parameters_t, UTRAN_PRIORITY, 3),
3605CSN_DESCR_END (Repeated_Individual_UTRAN_Priority_Parameters_t)
3606
3607static const
3608CSN_DESCR_BEGIN (ThreeG_Individual_Priority_Parameters_Description_t)
3609 M_NEXT_EXIST (ThreeG_Individual_Priority_Parameters_Description_t, Exist_DEFAULT_UTRAN_PRIORITY, 1),
3610 M_UINT (ThreeG_Individual_Priority_Parameters_Description_t, DEFAULT_UTRAN_PRIORITY, 3),
3611 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),
3612CSN_DESCR_END (ThreeG_Individual_Priority_Parameters_Description_t)
3613
3614static const
3615CSN_DESCR_BEGIN (Repeated_Individual_EUTRAN_Priority_Parameters_t)
3616 M_REC_ARRAY (Repeated_Individual_EUTRAN_Priority_Parameters_t, EARFCN, Count, 16),
3617 M_UINT (Repeated_Individual_EUTRAN_Priority_Parameters_t, EUTRAN_PRIORITY, 3),
3618CSN_DESCR_END (Repeated_Individual_EUTRAN_Priority_Parameters_t)
3619
3620static const
3621CSN_DESCR_BEGIN (EUTRAN_Individual_Priority_Parameters_Description_t)
3622 M_NEXT_EXIST (EUTRAN_Individual_Priority_Parameters_Description_t, Exist_DEFAULT_EUTRAN_PRIORITY, 1),
3623 M_UINT (EUTRAN_Individual_Priority_Parameters_Description_t, DEFAULT_EUTRAN_PRIORITY, 3),
3624 M_REC_TARRAY (EUTRAN_Individual_Priority_Parameters_Description_t, Repeated_Individual_EUTRAN_Priority_Parameters, Repeated_Individual_EUTRAN_Priority_Parameters_t, Count),
3625CSN_DESCR_END (EUTRAN_Individual_Priority_Parameters_Description_t)
3626
3627static const
3628CSN_DESCR_BEGIN (Provide_Individual_Priorities_t)
3629 M_UINT (Provide_Individual_Priorities_t, GERAN_PRIORITY, 3),
3630 M_NEXT_EXIST (Provide_Individual_Priorities_t, Exist_3G_Individual_Priority_Parameters_Description, 1),
3631 M_TYPE (Provide_Individual_Priorities_t, ThreeG_Individual_Priority_Parameters_Description, ThreeG_Individual_Priority_Parameters_Description_t),
3632 M_NEXT_EXIST (Provide_Individual_Priorities_t, Exist_EUTRAN_Individual_Priority_Parameters_Description, 1),
3633 M_TYPE (Provide_Individual_Priorities_t, EUTRAN_Individual_Priority_Parameters_Description, EUTRAN_Individual_Priority_Parameters_Description_t),
3634 M_NEXT_EXIST (Provide_Individual_Priorities_t, Exist_T3230_timeout_value, 1),
3635 M_UINT (Provide_Individual_Priorities_t, T3230_timeout_value, 3),
3636CSN_DESCR_END (Provide_Individual_Priorities_t)
3637
3638static const
3639CSN_DESCR_BEGIN (Individual_Priorities_t)
3640 M_UNION (Individual_Priorities_t, 2),
3641 M_TYPE (Individual_Priorities_t, u.Delete_All_Stored_Individual_Priorities, Delete_All_Stored_Individual_Priorities_t),
3642 M_TYPE (Individual_Priorities_t, u.Provide_Individual_Priorities, Provide_Individual_Priorities_t),
3643CSN_DESCR_END (Individual_Priorities_t)
3644
3645static const
3646CSN_DESCR_BEGIN (PMO_AdditionsR9_t)
3647 M_NEXT_EXIST (PMO_AdditionsR9_t, existEnhanced_Cell_Reselection_Parameters_Description, 1),
3648 M_TYPE (PMO_AdditionsR9_t, Enhanced_Cell_Reselection_Parameters_Description, Enh_Cell_Reselect_Param_Desp_t),
3649 M_NEXT_EXIST (PMO_AdditionsR9_t, existCSG_Cells_Reporting_Description, 1),
3650 M_TYPE (PMO_AdditionsR9_t, CSG_Cells_Reporting_Description, CSG_Cells_Reporting_Desp_t),
3651CSN_DESCR_END (PMO_AdditionsR9_t)
3652
3653static const
3654CSN_DESCR_BEGIN (PMO_AdditionsR8_t)
3655 M_NEXT_EXIST (PMO_AdditionsR8_t, existBA_IND_3G_PMO_IND, 2),
Anders Broman8ea3cbe2020-01-28 17:36:33 +01003656 M_UINT (PMO_AdditionsR8_t, BA_IND_3G, 1),
3657 M_UINT (PMO_AdditionsR8_t, PMO_IND, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03003658 M_NEXT_EXIST (PMO_AdditionsR8_t, existPriorityAndEUTRAN_ParametersDescription_PMO, 1),
3659 M_TYPE (PMO_AdditionsR8_t, PriorityAndEUTRAN_ParametersDescription_PMO, PriorityAndEUTRAN_ParametersDescription_PMO_t),
3660 M_NEXT_EXIST (PMO_AdditionsR8_t, existIndividualPriorities_PMO, 1),
3661 M_TYPE (PMO_AdditionsR8_t, IndividualPriorities_PMO, Individual_Priorities_t),
3662 M_NEXT_EXIST (PMO_AdditionsR8_t, existThreeG_CSG_Description, 1),
3663 M_TYPE (PMO_AdditionsR8_t, ThreeG_CSG_Description_PMO, ThreeG_CSG_Description_t),
3664 M_NEXT_EXIST (PMO_AdditionsR8_t, existEUTRAN_CSG_Description, 1),
3665 M_TYPE (PMO_AdditionsR8_t, EUTRAN_CSG_Description_PMO, EUTRAN_CSG_Description_t),
3666 M_NEXT_EXIST (PMO_AdditionsR8_t, existMeasurement_Control_Parameters_Description, 1),
3667 M_TYPE (PMO_AdditionsR8_t, Measurement_Control_Parameters_Description_PMO, Meas_Ctrl_Param_Desp_t),
3668 M_NEXT_EXIST_OR_NULL (PMO_AdditionsR8_t, existAdditionsR9, 1),
3669 M_TYPE (PMO_AdditionsR8_t, AdditionsR9, PMO_AdditionsR9_t),
3670CSN_DESCR_END (PMO_AdditionsR8_t)
3671
3672static const
3673CSN_DESCR_BEGIN (PMO_AdditionsR7_t)
3674 M_NEXT_EXIST (PMO_AdditionsR7_t, existREPORTING_OFFSET_THRESHOLD_700, 2),
3675 M_UINT (PMO_AdditionsR7_t, REPORTING_OFFSET_700, 3),
3676 M_UINT (PMO_AdditionsR7_t, REPORTING_THRESHOLD_700, 3),
3677
3678 M_NEXT_EXIST (PMO_AdditionsR7_t, existREPORTING_OFFSET_THRESHOLD_810, 2),
3679 M_UINT (PMO_AdditionsR7_t, REPORTING_OFFSET_810, 3),
3680 M_UINT (PMO_AdditionsR7_t, REPORTING_THRESHOLD_810, 3),
3681
3682 M_NEXT_EXIST_OR_NULL (PMO_AdditionsR7_t, existAdditionsR8, 1),
3683 M_TYPE (PMO_AdditionsR7_t, additionsR8, PMO_AdditionsR8_t),
3684CSN_DESCR_END (PMO_AdditionsR7_t)
3685
3686static const
3687CSN_DESCR_BEGIN (PMO_AdditionsR6_t)
3688 M_UINT (PMO_AdditionsR6_t, CCN_ACTIVE_3G, 1),
3689 M_NEXT_EXIST_OR_NULL (PMO_AdditionsR6_t, existAdditionsR7, 1),
3690 M_TYPE (PMO_AdditionsR6_t, additionsR7, PMO_AdditionsR7_t),
3691CSN_DESCR_END (PMO_AdditionsR6_t)
3692
3693static const
3694CSN_DESCR_BEGIN(PCCO_AdditionsR6_t)
3695 M_UINT (PCCO_AdditionsR6_t, CCN_ACTIVE_3G, 1),
3696CSN_DESCR_END (PCCO_AdditionsR6_t)
3697
3698static const
3699CSN_DESCR_BEGIN (PMO_AdditionsR5_t)
3700 M_NEXT_EXIST (PMO_AdditionsR5_t, existGRNTI_Extension, 1),
3701 M_UINT (PMO_AdditionsR5_t, GRNTI, 4),
3702 M_NEXT_EXIST (PMO_AdditionsR5_t, exist_lu_ModeNeighbourCellParams, 1),
3703 M_REC_TARRAY (PMO_AdditionsR5_t, lu_ModeNeighbourCellParams, lu_ModeNeighbourCellParams_t, count_lu_ModeNeighbourCellParams),
3704 M_NEXT_EXIST (PMO_AdditionsR5_t, existNC_lu_ModeOnlyCapableCellList, 1),
3705 M_TYPE (PMO_AdditionsR5_t, NC_lu_ModeOnlyCapableCellList, NC_lu_ModeOnlyCapableCellList_t),
3706 M_NEXT_EXIST (PMO_AdditionsR5_t, existGPRS_AdditionalMeasurementParams3G, 1),
3707 M_TYPE (PMO_AdditionsR5_t, GPRS_AdditionalMeasurementParams3G, GPRS_AdditionalMeasurementParams3G_t),
3708 M_NEXT_EXIST_OR_NULL (PMO_AdditionsR5_t, existAdditionsR6, 1),
3709 M_TYPE (PMO_AdditionsR5_t, additionsR6, PMO_AdditionsR6_t),
3710CSN_DESCR_END (PMO_AdditionsR5_t)
3711
3712static const
3713CSN_DESCR_BEGIN (PCCO_AdditionsR5_t)
3714 M_NEXT_EXIST (PCCO_AdditionsR5_t, existGRNTI_Extension, 1),
3715 M_UINT (PCCO_AdditionsR5_t, GRNTI, 4),
3716 M_NEXT_EXIST (PCCO_AdditionsR5_t, exist_lu_ModeNeighbourCellParams, 1),
3717 M_REC_TARRAY (PCCO_AdditionsR5_t, lu_ModeNeighbourCellParams, lu_ModeNeighbourCellParams_t, count_lu_ModeNeighbourCellParams),
3718 M_NEXT_EXIST (PCCO_AdditionsR5_t, existNC_lu_ModeOnlyCapableCellList, 1),
3719 M_TYPE (PCCO_AdditionsR5_t, NC_lu_ModeOnlyCapableCellList, NC_lu_ModeOnlyCapableCellList_t),
3720 M_NEXT_EXIST (PCCO_AdditionsR5_t, existGPRS_AdditionalMeasurementParams3G, 1),
3721 M_TYPE (PCCO_AdditionsR5_t, GPRS_AdditionalMeasurementParams3G, GPRS_AdditionalMeasurementParams3G_t),
3722 M_NEXT_EXIST_OR_NULL (PCCO_AdditionsR5_t, existAdditionsR6, 1),
3723 M_TYPE (PCCO_AdditionsR5_t, additionsR6, PCCO_AdditionsR6_t),
3724CSN_DESCR_END (PCCO_AdditionsR5_t)
3725
3726static const
3727CSN_DESCR_BEGIN (PMO_AdditionsR4_t)
3728 M_UINT (PMO_AdditionsR4_t, CCN_ACTIVE, 1),
3729 M_NEXT_EXIST (PMO_AdditionsR4_t, Exist_CCN_Support_Description_ID, 1),
3730 M_TYPE (PMO_AdditionsR4_t, CCN_Support_Description, CCN_Support_Description_t),
3731 M_NEXT_EXIST_OR_NULL (PMO_AdditionsR4_t, Exist_AdditionsR5, 1),
3732 M_TYPE (PMO_AdditionsR4_t, AdditionsR5, PMO_AdditionsR5_t),
3733CSN_DESCR_END (PMO_AdditionsR4_t)
3734
3735static const
3736CSN_DESCR_BEGIN (PMO_AdditionsR99_t)
3737 M_NEXT_EXIST (PMO_AdditionsR99_t, Exist_ENH_Measurement_Parameters, 1),
3738 M_TYPE (PMO_AdditionsR99_t, ENH_Measurement_Parameters, ENH_Measurement_Parameters_PMO_t),
3739 M_NEXT_EXIST_OR_NULL (PMO_AdditionsR99_t, Exist_AdditionsR4, 1),
3740 M_TYPE (PMO_AdditionsR99_t, AdditionsR4, PMO_AdditionsR4_t),
3741CSN_DESCR_END (PMO_AdditionsR99_t)
3742
3743static const
3744CSN_DESCR_BEGIN (PCCO_AdditionsR4_t)
3745 M_UINT (PCCO_AdditionsR4_t, CCN_ACTIVE, 1),
3746 M_NEXT_EXIST (PCCO_AdditionsR4_t, Exist_Container_ID, 1),
3747 M_UINT (PCCO_AdditionsR4_t, CONTAINER_ID, 2),
3748 M_NEXT_EXIST (PCCO_AdditionsR4_t, Exist_CCN_Support_Description_ID, 1),
3749 M_TYPE (PCCO_AdditionsR4_t, CCN_Support_Description, CCN_Support_Description_t),
3750 M_NEXT_EXIST_OR_NULL (PCCO_AdditionsR4_t, Exist_AdditionsR5, 1),
3751 M_TYPE (PCCO_AdditionsR4_t, AdditionsR5, PCCO_AdditionsR5_t),
3752CSN_DESCR_END (PCCO_AdditionsR4_t)
3753
3754static const
3755CSN_DESCR_BEGIN (PCCO_AdditionsR99_t)
3756 M_TYPE (PCCO_AdditionsR99_t, ENH_Measurement_Parameters, ENH_Measurement_Parameters_PCCO_t),
3757 M_NEXT_EXIST_OR_NULL (PCCO_AdditionsR99_t, Exist_AdditionsR4, 1),
3758 M_TYPE (PCCO_AdditionsR99_t, AdditionsR4, PCCO_AdditionsR4_t),
3759CSN_DESCR_END (PCCO_AdditionsR99_t)
3760
3761static const
3762CSN_DESCR_BEGIN(LSA_ID_Info_Element_t)
3763 M_UNION (LSA_ID_Info_Element_t, 2),
3764 M_UINT (LSA_ID_Info_Element_t, u.LSA_ID, 24),
3765 M_UINT (LSA_ID_Info_Element_t, u.ShortLSA_ID, 10),
3766CSN_DESCR_END (LSA_ID_Info_Element_t)
3767
3768static const
3769CSN_DESCR_BEGIN(LSA_ID_Info_t)
3770 M_REC_TARRAY (LSA_ID_Info_t, LSA_ID_Info_Elements, LSA_ID_Info_Element_t, Count_LSA_ID_Info_Element),
3771CSN_DESCR_END (LSA_ID_Info_t)
3772
3773static const
3774CSN_DESCR_BEGIN(LSA_Parameters_t)
3775 M_UINT (LSA_Parameters_t, NR_OF_FREQ_OR_CELLS, 5),
3776 M_VAR_TARRAY (LSA_Parameters_t, LSA_ID_Info, LSA_ID_Info_t, NR_OF_FREQ_OR_CELLS),
3777CSN_DESCR_END (LSA_Parameters_t)
3778
3779static const
3780CSN_DESCR_BEGIN (PMO_AdditionsR98_t)
3781 M_NEXT_EXIST (PMO_AdditionsR98_t, Exist_LSA_Parameters, 1),
3782 M_TYPE (PMO_AdditionsR98_t, LSA_Parameters, LSA_Parameters_t),
3783
3784 M_NEXT_EXIST_OR_NULL (PMO_AdditionsR98_t, Exist_AdditionsR99, 1),
3785 M_TYPE (PMO_AdditionsR98_t, AdditionsR99, PMO_AdditionsR99_t),
3786CSN_DESCR_END (PMO_AdditionsR98_t)
3787
3788static const
3789CSN_DESCR_BEGIN (PCCO_AdditionsR98_t)
3790 M_NEXT_EXIST (PCCO_AdditionsR98_t, Exist_LSA_Parameters, 1),
3791 M_TYPE (PCCO_AdditionsR98_t, LSA_Parameters, LSA_Parameters_t),
3792
3793 M_NEXT_EXIST_OR_NULL (PCCO_AdditionsR98_t, Exist_AdditionsR99, 1),
3794 M_TYPE (PCCO_AdditionsR98_t, AdditionsR99, PCCO_AdditionsR99_t),
3795CSN_DESCR_END (PCCO_AdditionsR98_t)
3796
3797static const
3798CSN_DESCR_BEGIN (Target_Cell_GSM_t)
3799 M_UINT (Target_Cell_GSM_t, IMMEDIATE_REL, 1),
3800 M_UINT (Target_Cell_GSM_t, ARFCN, 10),
3801 M_UINT (Target_Cell_GSM_t, BSIC, 6),
3802 M_TYPE (Target_Cell_GSM_t, NC_Measurement_Parameters, NC_Measurement_Parameters_with_Frequency_List_t),
3803 M_NEXT_EXIST_OR_NULL (Target_Cell_GSM_t, Exist_AdditionsR98, 1),
3804 M_TYPE (Target_Cell_GSM_t, AdditionsR98, PCCO_AdditionsR98_t),
3805CSN_DESCR_END (Target_Cell_GSM_t)
3806
3807static const
3808CSN_DESCR_BEGIN (Target_Cell_3G_AdditionsR8_t)
3809 M_NEXT_EXIST (Target_Cell_3G_AdditionsR8_t, Exist_EUTRAN_Target_Cell, 1),
3810 M_TYPE (Target_Cell_3G_AdditionsR8_t, EUTRAN_Target_Cell, EUTRAN_Target_Cell_t),
3811 M_NEXT_EXIST (Target_Cell_3G_AdditionsR8_t, Exist_Individual_Priorities, 1),
3812 M_TYPE (Target_Cell_3G_AdditionsR8_t, Individual_Priorities, Individual_Priorities_t),
3813CSN_DESCR_END (Target_Cell_3G_AdditionsR8_t)
3814
3815static const
3816CSN_DESCR_BEGIN (Target_Cell_3G_AdditionsR5_t)
3817 M_NEXT_EXIST (Target_Cell_3G_AdditionsR5_t, Exist_G_RNTI_Extention, 1),
3818 M_UINT (Target_Cell_3G_AdditionsR5_t, G_RNTI_Extention, 4),
3819 M_NEXT_EXIST_OR_NULL (Target_Cell_3G_AdditionsR5_t, Exist_AdditionsR8, 1),
3820 M_TYPE (Target_Cell_3G_AdditionsR5_t, AdditionsR8, Target_Cell_3G_AdditionsR8_t),
3821CSN_DESCR_END (Target_Cell_3G_AdditionsR5_t)
3822
3823static const
3824CSN_DESCR_BEGIN(Target_Cell_3G_t)
3825 /* 00 -- Message escape */
3826 M_FIXED (Target_Cell_3G_t, 2, 0x00),
3827 M_UINT (Target_Cell_3G_t, IMMEDIATE_REL, 1),
3828 M_NEXT_EXIST (Target_Cell_3G_t, Exist_FDD_Description, 1),
3829 M_TYPE (Target_Cell_3G_t, FDD_Target_Cell, FDD_Target_Cell_t),
3830 M_NEXT_EXIST (Target_Cell_3G_t, Exist_TDD_Description, 1),
3831 M_TYPE (Target_Cell_3G_t, TDD_Target_Cell, TDD_Target_Cell_t),
3832 M_NEXT_EXIST_OR_NULL (Target_Cell_3G_t, Exist_AdditionsR5, 1),
3833 M_TYPE (Target_Cell_3G_t, AdditionsR5, Target_Cell_3G_AdditionsR5_t),
3834CSN_DESCR_END (Target_Cell_3G_t)
3835
3836static const
3837CSN_DESCR_BEGIN(Packet_Cell_Change_Order_t)
3838 M_UINT (Packet_Cell_Change_Order_t, MESSAGE_TYPE, 6),
3839 M_UINT (Packet_Cell_Change_Order_t, PAGE_MODE, 2),
3840
3841 M_TYPE (Packet_Cell_Change_Order_t, ID, PacketCellChangeOrderID_t),
3842
3843 M_UNION (Packet_Cell_Change_Order_t, 2),
3844 M_TYPE (Packet_Cell_Change_Order_t, u.Target_Cell_GSM, Target_Cell_GSM_t),
3845 M_TYPE (Packet_Cell_Change_Order_t, u.Target_Cell_3G, Target_Cell_3G_t),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04003846
3847 M_PADDING_BITS(Packet_Cell_Change_Order_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03003848CSN_DESCR_END (Packet_Cell_Change_Order_t)
3849
3850/*< Packet (Enhanced) Measurement Report message contents > */
3851static const
3852CSN_DESCR_BEGIN(BA_USED_t)
3853 M_UINT (BA_USED_t, BA_USED, 1),
3854 M_UINT (BA_USED_t, BA_USED_3G, 1),
3855CSN_DESCR_END (BA_USED_t)
3856
3857static const
3858CSN_DESCR_BEGIN(Serving_Cell_Data_t)
3859 M_UINT (Serving_Cell_Data_t, RXLEV_SERVING_CELL, 6),
3860 M_FIXED (Serving_Cell_Data_t, 1, 0),
3861CSN_DESCR_END (Serving_Cell_Data_t)
3862
3863static const
3864CSN_DESCR_BEGIN(NC_Measurements_t)
3865 M_UINT (NC_Measurements_t, FREQUENCY_N, 6),
3866
3867 M_NEXT_EXIST (NC_Measurements_t, Exist_BSIC_N, 1),
3868 M_UINT (NC_Measurements_t, BSIC_N, 6),
3869 M_UINT (NC_Measurements_t, RXLEV_N, 6),
3870CSN_DESCR_END (NC_Measurements_t)
3871
3872static const
3873CSN_DESCR_BEGIN(RepeatedInvalid_BSIC_Info_t)
3874 M_UINT (RepeatedInvalid_BSIC_Info_t, BCCH_FREQ_N, 5),
3875 M_UINT (RepeatedInvalid_BSIC_Info_t, BSIC_N, 6),
3876 M_UINT (RepeatedInvalid_BSIC_Info_t, RXLEV_N, 6),
3877CSN_DESCR_END (RepeatedInvalid_BSIC_Info_t)
3878
3879static const
3880CSN_DESCR_BEGIN(REPORTING_QUANTITY_Instance_t)
3881 M_NEXT_EXIST (REPORTING_QUANTITY_Instance_t, Exist_REPORTING_QUANTITY, 1),
3882 M_UINT (REPORTING_QUANTITY_Instance_t, REPORTING_QUANTITY, 6),
3883CSN_DESCR_END (REPORTING_QUANTITY_Instance_t)
3884
3885static const
3886CSN_DESCR_BEGIN(NC_Measurement_Report_t)
3887 M_UINT (NC_Measurement_Report_t, NC_MODE, 1),
3888 M_TYPE (NC_Measurement_Report_t, Serving_Cell_Data, Serving_Cell_Data_t),
3889 M_UINT (NC_Measurement_Report_t, NUMBER_OF_NC_MEASUREMENTS, 3),
3890 M_VAR_TARRAY (NC_Measurement_Report_t, NC_Measurements, NC_Measurements_t, NUMBER_OF_NC_MEASUREMENTS),
3891CSN_DESCR_END (NC_Measurement_Report_t)
3892
3893static const
3894CSN_DESCR_BEGIN(ENH_NC_Measurement_Report_t)
3895 M_UINT (ENH_NC_Measurement_Report_t, NC_MODE, 1),
3896 M_UNION (ENH_NC_Measurement_Report_t, 2),
3897 M_TYPE (ENH_NC_Measurement_Report_t, u.BA_USED, BA_USED_t),
3898 M_UINT (ENH_NC_Measurement_Report_t, u.PSI3_CHANGE_MARK, 2),
3899 M_UINT (ENH_NC_Measurement_Report_t, PMO_USED, 1),
3900 M_UINT (ENH_NC_Measurement_Report_t, BSIC_Seen, 1),
3901 M_UINT (ENH_NC_Measurement_Report_t, SCALE, 1),
3902 M_NEXT_EXIST (ENH_NC_Measurement_Report_t, Exist_Serving_Cell_Data, 1),
3903 M_TYPE (ENH_NC_Measurement_Report_t, Serving_Cell_Data, Serving_Cell_Data_t),
Pau Espin Pedrol81b40cb2020-03-23 15:23:51 +01003904 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 +03003905 M_NEXT_EXIST (ENH_NC_Measurement_Report_t, Exist_ReportBitmap, 1),
3906 M_VAR_TARRAY (ENH_NC_Measurement_Report_t, REPORTING_QUANTITY_Instances, REPORTING_QUANTITY_Instance_t, Count_REPORTING_QUANTITY_Instances),
3907CSN_DESCR_END (ENH_NC_Measurement_Report_t)
3908
3909
3910static const
3911CSN_DESCR_BEGIN(EXT_Measurement_Report_t)
3912 M_UINT (EXT_Measurement_Report_t, EXT_REPORTING_TYPE, 2),
3913
3914 M_NEXT_EXIST (EXT_Measurement_Report_t, Exist_I_LEVEL, 1),
3915
3916 M_NEXT_EXIST (EXT_Measurement_Report_t, Slot[0].Exist, 1),
3917 M_UINT (EXT_Measurement_Report_t, Slot[0].I_LEVEL, 6),
3918
3919 M_NEXT_EXIST (EXT_Measurement_Report_t, Slot[1].Exist, 1),
3920 M_UINT (EXT_Measurement_Report_t, Slot[1].I_LEVEL, 6),
3921
3922 M_NEXT_EXIST (EXT_Measurement_Report_t, Slot[2].Exist, 1),
3923 M_UINT (EXT_Measurement_Report_t, Slot[2].I_LEVEL, 6),
3924
3925 M_NEXT_EXIST (EXT_Measurement_Report_t, Slot[3].Exist, 1),
3926 M_UINT (EXT_Measurement_Report_t, Slot[3].I_LEVEL, 6),
3927
3928 M_NEXT_EXIST (EXT_Measurement_Report_t, Slot[4].Exist, 1),
3929 M_UINT (EXT_Measurement_Report_t, Slot[4].I_LEVEL, 6),
3930
3931 M_NEXT_EXIST (EXT_Measurement_Report_t, Slot[5].Exist, 1),
3932 M_UINT (EXT_Measurement_Report_t, Slot[5].I_LEVEL, 6),
3933
3934 M_NEXT_EXIST (EXT_Measurement_Report_t, Slot[6].Exist, 1),
3935 M_UINT (EXT_Measurement_Report_t, Slot[6].I_LEVEL, 6),
3936
3937 M_NEXT_EXIST (EXT_Measurement_Report_t, Slot[7].Exist, 1),
3938 M_UINT (EXT_Measurement_Report_t, Slot[7].I_LEVEL, 6),
3939
3940 M_UINT (EXT_Measurement_Report_t, NUMBER_OF_EXT_MEASUREMENTS, 5),
3941 M_VAR_TARRAY (EXT_Measurement_Report_t, EXT_Measurements, NC_Measurements_t, NUMBER_OF_EXT_MEASUREMENTS),
3942CSN_DESCR_END (EXT_Measurement_Report_t)
3943
3944static const
3945CSN_DESCR_BEGIN (Measurements_3G_t)
3946 M_UINT (Measurements_3G_t, CELL_LIST_INDEX_3G, 7),
3947 M_UINT (Measurements_3G_t, REPORTING_QUANTITY, 6),
3948CSN_DESCR_END (Measurements_3G_t)
3949
3950static const
3951CSN_DESCR_BEGIN (EUTRAN_Measurement_Report_Body_t)
3952 M_UINT (EUTRAN_Measurement_Report_Body_t, EUTRAN_FREQUENCY_INDEX, 3),
3953 M_UINT (EUTRAN_Measurement_Report_Body_t, CELL_IDENTITY, 9),
3954 M_UINT (EUTRAN_Measurement_Report_Body_t, REPORTING_QUANTITY, 6),
3955CSN_DESCR_END (EUTRAN_Measurement_Report_Body_t)
3956
3957static const
3958CSN_DESCR_BEGIN (EUTRAN_Measurement_Report_t)
3959 M_UINT_OFFSET (EUTRAN_Measurement_Report_t, N_EUTRAN, 2, 1),
3960 M_VAR_TARRAY (EUTRAN_Measurement_Report_t, Report, EUTRAN_Measurement_Report_Body_t, N_EUTRAN),
3961CSN_DESCR_END (EUTRAN_Measurement_Report_t)
3962
3963static const
3964CSN_DESCR_BEGIN(UTRAN_CSG_Measurement_Report_t)
3965 M_UINT (UTRAN_CSG_Measurement_Report_t, UTRAN_CGI, 28),
3966 M_NEXT_EXIST (UTRAN_CSG_Measurement_Report_t, Exist_PLMN_ID, 1),
3967 M_TYPE (UTRAN_CSG_Measurement_Report_t, Plmn_ID, PLMN_t),
3968 M_UINT (UTRAN_CSG_Measurement_Report_t, CSG_ID, 27),
Anders Broman8ea3cbe2020-01-28 17:36:33 +01003969 M_UINT (UTRAN_CSG_Measurement_Report_t, Access_Mode, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03003970 M_UINT (UTRAN_CSG_Measurement_Report_t, REPORTING_QUANTITY, 6),
3971CSN_DESCR_END (UTRAN_CSG_Measurement_Report_t)
3972
3973static const
3974CSN_DESCR_BEGIN(EUTRAN_CSG_Measurement_Report_t)
Anders Broman8ea3cbe2020-01-28 17:36:33 +01003975 M_UINT (EUTRAN_CSG_Measurement_Report_t, EUTRAN_CGI, 28),
3976 M_UINT (EUTRAN_CSG_Measurement_Report_t, Tracking_Area_Code, 16),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03003977 M_NEXT_EXIST (EUTRAN_CSG_Measurement_Report_t, Exist_PLMN_ID, 1),
3978 M_TYPE (EUTRAN_CSG_Measurement_Report_t, Plmn_ID, PLMN_t),
Anders Broman8ea3cbe2020-01-28 17:36:33 +01003979 M_UINT (EUTRAN_CSG_Measurement_Report_t, CSG_ID, 27),
3980 M_UINT (EUTRAN_CSG_Measurement_Report_t, Access_Mode, 1),
3981 M_UINT (EUTRAN_CSG_Measurement_Report_t, REPORTING_QUANTITY, 6),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03003982CSN_DESCR_END (EUTRAN_CSG_Measurement_Report_t)
3983
3984static const
3985CSN_DESCR_BEGIN (PMR_AdditionsR9_t)
3986 M_NEXT_EXIST (PMR_AdditionsR9_t, Exist_UTRAN_CSG_Meas_Rpt, 1),
3987 M_TYPE (PMR_AdditionsR9_t, UTRAN_CSG_Meas_Rpt, UTRAN_CSG_Measurement_Report_t),
3988 M_NEXT_EXIST (PMR_AdditionsR9_t, Exist_EUTRAN_CSG_Meas_Rpt, 1),
3989 M_TYPE (PMR_AdditionsR9_t, EUTRAN_CSG_Meas_Rpt, EUTRAN_CSG_Measurement_Report_t),
3990CSN_DESCR_END (PMR_AdditionsR9_t)
3991
3992static const
3993CSN_DESCR_BEGIN (PMR_AdditionsR8_t)
3994 M_NEXT_EXIST (PMR_AdditionsR8_t, Exist_EUTRAN_Meas_Rpt, 1),
3995 M_TYPE (PMR_AdditionsR8_t, EUTRAN_Meas_Rpt, EUTRAN_Measurement_Report_t),
3996 M_NEXT_EXIST_OR_NULL(PMR_AdditionsR8_t, Exist_AdditionsR9, 1),
3997 M_TYPE (PMR_AdditionsR8_t, AdditionsR9, PMR_AdditionsR9_t),
3998CSN_DESCR_END (PMR_AdditionsR8_t)
3999
4000static const
4001CSN_DESCR_BEGIN (PMR_AdditionsR5_t)
Pascal Quantine4a243c2020-01-28 18:08:15 +01004002 M_NEXT_EXIST (PMR_AdditionsR5_t, Exist_GRNTI, 3),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004003 M_UINT (PMR_AdditionsR5_t, GRNTI, 4),
4004 M_NEXT_EXIST_OR_NULL (PMR_AdditionsR5_t, Exist_AdditionsR8, 1),
4005 M_TYPE (PMR_AdditionsR5_t, AdditionsR8, PMR_AdditionsR8_t),
4006CSN_DESCR_END (PMR_AdditionsR5_t)
4007
4008static const
4009CSN_DESCR_BEGIN (PMR_AdditionsR99_t)
4010 M_NEXT_EXIST (PMR_AdditionsR99_t, Exist_Info3G, 4),
4011 M_UNION (PMR_AdditionsR99_t, 2),
4012 M_TYPE (PMR_AdditionsR99_t, u.BA_USED, BA_USED_t),
4013 M_UINT (PMR_AdditionsR99_t, u.PSI3_CHANGE_MARK, 2),
4014 M_UINT (PMR_AdditionsR99_t, PMO_USED, 1),
4015
4016 M_NEXT_EXIST (PMR_AdditionsR99_t, Exist_MeasurementReport3G, 2),
4017 M_UINT_OFFSET (PMR_AdditionsR99_t, N_3G, 3, 1), /* offset 1 */
4018 M_VAR_TARRAY_OFFSET (PMR_AdditionsR99_t, Measurements_3G, Measurements_3G_t, N_3G),
4019
4020 M_NEXT_EXIST_OR_NULL (PMR_AdditionsR99_t, Exist_AdditionsR5, 1),
4021 M_TYPE (PMR_AdditionsR99_t, AdditionsR5, PMR_AdditionsR5_t),
4022CSN_DESCR_END (PMR_AdditionsR99_t)
4023
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01004024#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004025static const
4026CSN_DESCR_BEGIN(EMR_ServingCell_t)
4027 /*CSN_MEMBER_BIT (EMR_ServingCell_t, DTX_USED),*/
Anders Broman8ea3cbe2020-01-28 17:36:33 +01004028 M_UINT (EMR_ServingCell_t, DTX_USED, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004029 M_UINT (EMR_ServingCell_t, RXLEV_VAL, 6),
4030 M_UINT (EMR_ServingCell_t, RX_QUAL_FULL, 3),
4031 M_UINT (EMR_ServingCell_t, MEAN_BEP, 5),
4032 M_UINT (EMR_ServingCell_t, CV_BEP, 3),
4033 M_UINT (EMR_ServingCell_t, NBR_RCVD_BLOCKS, 5),
4034CSN_DESCR_END(EMR_ServingCell_t)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01004035#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004036
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01004037#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004038static const
4039CSN_DESCR_BEGIN (EnhancedMeasurementReport_t)
4040 M_UINT (EnhancedMeasurementReport_t, RR_Short_PD, 1),
4041 M_UINT (EnhancedMeasurementReport_t, MESSAGE_TYPE, 5),
4042 M_UINT (EnhancedMeasurementReport_t, ShortLayer2_Header, 2),
4043 M_TYPE (EnhancedMeasurementReport_t, BA_USED, BA_USED_t),
4044 M_UINT (EnhancedMeasurementReport_t, BSIC_Seen, 1),
4045 M_UINT (EnhancedMeasurementReport_t, SCALE, 1),
4046 M_NEXT_EXIST (EnhancedMeasurementReport_t, Exist_ServingCellData, 1),
4047 M_TYPE (EnhancedMeasurementReport_t, ServingCellData, EMR_ServingCell_t),
Pau Espin Pedrol81b40cb2020-03-23 15:23:51 +01004048 M_REC_TARRAY (EnhancedMeasurementReport_t, RepeatedInvalid_BSIC_Info, RepeatedInvalid_BSIC_Info_t,
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004049 Count_RepeatedInvalid_BSIC_Info),
4050 M_NEXT_EXIST (EnhancedMeasurementReport_t, Exist_ReportBitmap, 1),
4051 M_VAR_TARRAY (EnhancedMeasurementReport_t, REPORTING_QUANTITY_Instances, REPORTING_QUANTITY_Instance_t, Count_REPORTING_QUANTITY_Instances),
4052CSN_DESCR_END (EnhancedMeasurementReport_t)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01004053#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004054
4055static const
4056CSN_DESCR_BEGIN (Packet_Measurement_Report_t)
4057 /* Mac header */
4058 M_UINT (Packet_Measurement_Report_t, PayloadType, 2),
4059 M_UINT (Packet_Measurement_Report_t, spare, 5),
4060 M_UINT (Packet_Measurement_Report_t, R, 1),
4061 M_UINT (Packet_Measurement_Report_t, MESSAGE_TYPE, 6),
4062 /* Mac header */
4063
4064 M_UINT (Packet_Measurement_Report_t, TLLI, 32),
4065
4066 M_NEXT_EXIST (Packet_Measurement_Report_t, Exist_PSI5_CHANGE_MARK, 1),
4067 M_UINT (Packet_Measurement_Report_t, PSI5_CHANGE_MARK, 2),
4068
4069 M_UNION (Packet_Measurement_Report_t, 2),
4070 M_TYPE (Packet_Measurement_Report_t, u.NC_Measurement_Report, NC_Measurement_Report_t),
4071 M_TYPE (Packet_Measurement_Report_t, u.EXT_Measurement_Report, EXT_Measurement_Report_t),
4072
4073 M_NEXT_EXIST_OR_NULL(Packet_Measurement_Report_t, Exist_AdditionsR99, 1),
4074 M_TYPE (Packet_Measurement_Report_t, AdditionsR99, PMR_AdditionsR99_t),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04004075
4076 M_PADDING_BITS (Packet_Measurement_Report_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004077CSN_DESCR_END (Packet_Measurement_Report_t)
4078
4079static const
4080CSN_DESCR_BEGIN (PEMR_AdditionsR9_t)
4081 M_NEXT_EXIST (PEMR_AdditionsR9_t, Exist_UTRAN_CSG_Target_Cell, 1),
4082 M_TYPE (PEMR_AdditionsR9_t, UTRAN_CSG_Target_Cell, UTRAN_CSG_Target_Cell_t),
4083 M_NEXT_EXIST (PEMR_AdditionsR9_t, Exist_EUTRAN_CSG_Target_Cell, 1),
4084 M_TYPE (PEMR_AdditionsR9_t, EUTRAN_CSG_Target_Cell, EUTRAN_CSG_Target_Cell_t),
4085CSN_DESCR_END (PEMR_AdditionsR9_t)
4086
4087static const
4088CSN_DESCR_BEGIN (Bitmap_Report_Quantity_t)
4089 M_NEXT_EXIST (Bitmap_Report_Quantity_t, Exist_REPORTING_QUANTITY, 1),
4090 M_UINT (Bitmap_Report_Quantity_t, REPORTING_QUANTITY, 6),
4091CSN_DESCR_END (Bitmap_Report_Quantity_t)
4092
4093static const
4094CSN_DESCR_BEGIN (PEMR_AdditionsR8_t)
4095 M_UINT_OFFSET (PEMR_AdditionsR8_t, BITMAP_LENGTH, 7, 1),
4096 M_VAR_TARRAY (PEMR_AdditionsR8_t, Bitmap_Report_Quantity, Bitmap_Report_Quantity_t, BITMAP_LENGTH),
4097 M_NEXT_EXIST (PEMR_AdditionsR8_t, Exist_EUTRAN_Meas_Rpt, 1),
4098 M_TYPE (PEMR_AdditionsR8_t, EUTRAN_Meas_Rpt, EUTRAN_Measurement_Report_t),
4099 M_NEXT_EXIST_OR_NULL(PEMR_AdditionsR8_t, Exist_AdditionsR9, 1),
4100 M_TYPE (PEMR_AdditionsR8_t, AdditionsR9, PEMR_AdditionsR9_t),
4101CSN_DESCR_END (PEMR_AdditionsR8_t)
4102
4103static const
4104CSN_DESCR_BEGIN (PEMR_AdditionsR5_t)
4105 M_NEXT_EXIST (PEMR_AdditionsR5_t, Exist_GRNTI_Ext, 1),
4106 M_UINT (PEMR_AdditionsR5_t, GRNTI_Ext, 4),
4107 M_NEXT_EXIST_OR_NULL(PEMR_AdditionsR5_t, Exist_AdditionsR8, 1),
4108 M_TYPE (PEMR_AdditionsR5_t, AdditionsR8, PEMR_AdditionsR8_t),
4109CSN_DESCR_END (PEMR_AdditionsR5_t)
4110
4111
4112static const
4113CSN_DESCR_BEGIN (Packet_Enh_Measurement_Report_t)
4114 /* Mac header */
4115 M_UINT (Packet_Enh_Measurement_Report_t, PayloadType, 2),
4116 M_UINT (Packet_Enh_Measurement_Report_t, spare, 5),
4117 M_UINT (Packet_Enh_Measurement_Report_t, R, 1),
4118 M_UINT (Packet_Enh_Measurement_Report_t, MESSAGE_TYPE, 6),
4119 /* Mac header */
4120
4121 M_UINT (Packet_Enh_Measurement_Report_t, TLLI, 32),
4122
4123 M_TYPE (Packet_Enh_Measurement_Report_t, Measurements, ENH_NC_Measurement_Report_t),
4124
4125 M_NEXT_EXIST_OR_NULL(Packet_Enh_Measurement_Report_t, Exist_AdditionsR5, 1),
4126 M_TYPE (Packet_Enh_Measurement_Report_t, AdditionsR5, PEMR_AdditionsR5_t),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04004127
4128 M_PADDING_BITS(Packet_Enh_Measurement_Report_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004129CSN_DESCR_END (Packet_Enh_Measurement_Report_t)
4130
4131/*< Packet Measurement Order message contents >*/
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01004132#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004133static const
4134CSN_DESCR_BEGIN(EXT_Frequency_List_t)
4135 M_UINT (EXT_Frequency_List_t, START_FREQUENCY, 10),
4136 M_UINT (EXT_Frequency_List_t, NR_OF_FREQUENCIES, 5),
4137 M_UINT (EXT_Frequency_List_t, FREQ_DIFF_LENGTH, 3),
4138
4139/* TBD: Count_FREQUENCY_DIFF
4140 * guint8 FREQUENCY_DIFF[31];
4141 * bit (FREQ_DIFF_LENGTH) * NR_OF_FREQUENCIES --> MAX is bit(7) * 31
4142 */
4143CSN_DESCR_END (EXT_Frequency_List_t)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01004144#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004145
4146static const
4147CSN_DESCR_BEGIN (Packet_Measurement_Order_t)
4148 M_UINT (Packet_Measurement_Order_t, MESSAGE_TYPE, 6),
4149 M_UINT (Packet_Measurement_Order_t, PAGE_MODE, 2),
4150
4151 M_TYPE (Packet_Measurement_Order_t, ID, PacketDownlinkID_t), /* reuse the PDA ID type */
4152
4153 M_UINT (Packet_Measurement_Order_t, PMO_INDEX, 3),
4154 M_UINT (Packet_Measurement_Order_t, PMO_COUNT, 3),
4155
4156 M_NEXT_EXIST (Packet_Measurement_Order_t, Exist_NC_Measurement_Parameters, 1),
4157 M_TYPE (Packet_Measurement_Order_t, NC_Measurement_Parameters, NC_Measurement_Parameters_with_Frequency_List_t),
4158
4159 M_NEXT_EXIST (Packet_Measurement_Order_t, Exist_EXT_Measurement_Parameters, 1),
4160 M_FIXED (Packet_Measurement_Order_t, 2, 0x0), /* EXT_Measurement_Parameters not handled */
4161
4162 M_NEXT_EXIST_OR_NULL (Packet_Measurement_Order_t, Exist_AdditionsR98, 1),
4163 M_TYPE (Packet_Measurement_Order_t, AdditionsR98, PMO_AdditionsR98_t),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04004164
4165 M_PADDING_BITS (Packet_Measurement_Order_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004166CSN_DESCR_END (Packet_Measurement_Order_t)
4167
4168static const
4169CSN_DESCR_BEGIN(CCN_Measurement_Report_t)
4170 M_UINT (CCN_Measurement_Report_t, RXLEV_SERVING_CELL, 6),
4171 M_FIXED (CCN_Measurement_Report_t, 1, 0),
4172 M_UINT (CCN_Measurement_Report_t, NUMBER_OF_NC_MEASUREMENTS, 3),
4173 M_VAR_TARRAY (CCN_Measurement_Report_t, NC_Measurements, NC_Measurements_t, NUMBER_OF_NC_MEASUREMENTS),
4174CSN_DESCR_END (CCN_Measurement_Report_t)
4175
4176static const
4177CSN_DESCR_BEGIN(Target_Cell_GSM_Notif_t)
4178 M_UINT (Target_Cell_GSM_Notif_t, ARFCN, 10),
4179 M_UINT (Target_Cell_GSM_Notif_t, BSIC, 6),
4180CSN_DESCR_END (Target_Cell_GSM_Notif_t)
4181
4182static const
4183CSN_DESCR_BEGIN(FDD_Target_Cell_Notif_t)
4184 M_UINT (FDD_Target_Cell_Notif_t, FDD_ARFCN, 14),
4185 M_NEXT_EXIST (FDD_Target_Cell_Notif_t, Exist_Bandwith_FDD, 1),
4186 M_UINT (FDD_Target_Cell_Notif_t, BANDWITH_FDD, 3),
4187 M_UINT (FDD_Target_Cell_Notif_t, SCRAMBLING_CODE, 9),
4188CSN_DESCR_END (FDD_Target_Cell_Notif_t)
4189
4190static const
4191CSN_DESCR_BEGIN(TDD_Target_Cell_Notif_t)
4192 M_UINT (TDD_Target_Cell_Notif_t, TDD_ARFCN, 14),
4193 M_NEXT_EXIST (TDD_Target_Cell_Notif_t, Exist_Bandwith_TDD, 1),
4194 M_UINT (TDD_Target_Cell_Notif_t, BANDWITH_TDD, 3),
4195 M_UINT (TDD_Target_Cell_Notif_t, CELL_PARAMETER, 7),
4196 M_UINT (TDD_Target_Cell_Notif_t, Sync_Case_TSTD, 1),
4197CSN_DESCR_END (TDD_Target_Cell_Notif_t)
4198
4199static const
4200CSN_DESCR_BEGIN(Target_Cell_3G_Notif_t)
4201 M_NEXT_EXIST (Target_Cell_3G_Notif_t, Exist_FDD_Description, 1),
4202 M_TYPE (Target_Cell_3G_Notif_t, FDD_Target_Cell_Notif, FDD_Target_Cell_Notif_t),
4203 M_NEXT_EXIST (Target_Cell_3G_Notif_t, Exist_TDD_Description, 1),
4204 M_TYPE (Target_Cell_3G_Notif_t, TDD_Target_Cell, TDD_Target_Cell_Notif_t),
4205 M_UINT (Target_Cell_3G_Notif_t, REPORTING_QUANTITY, 6),
4206CSN_DESCR_END (Target_Cell_3G_Notif_t)
4207
4208static const
4209CSN_DESCR_BEGIN(Target_EUTRAN_Cell_Notif_t)
4210 M_UINT (Target_EUTRAN_Cell_Notif_t, EARFCN, 16),
4211 M_NEXT_EXIST (Target_EUTRAN_Cell_Notif_t, Exist_Measurement_Bandwidth, 1),
4212 M_UINT (Target_EUTRAN_Cell_Notif_t, Measurement_Bandwidth, 3),
4213 M_UINT (Target_EUTRAN_Cell_Notif_t, Physical_Layer_Cell_Identity, 9),
4214 M_UINT (Target_EUTRAN_Cell_Notif_t, Reporting_Quantity, 6),
4215CSN_DESCR_END (Target_EUTRAN_Cell_Notif_t)
4216
4217static const
4218CSN_DESCR_BEGIN(Eutran_Ccn_Measurement_Report_Cell_t)
4219 M_UINT (Eutran_Ccn_Measurement_Report_Cell_t, EUTRAN_FREQUENCY_INDEX, 3),
4220 M_UINT (Eutran_Ccn_Measurement_Report_Cell_t, CELL_IDENTITY, 9),
4221 M_UINT (Eutran_Ccn_Measurement_Report_Cell_t, REPORTING_QUANTITY, 6),
4222CSN_DESCR_END (Eutran_Ccn_Measurement_Report_Cell_t)
4223
4224
4225static const
4226CSN_DESCR_BEGIN(Eutran_Ccn_Measurement_Report_t)
Anders Broman8ea3cbe2020-01-28 17:36:33 +01004227 M_UINT (Eutran_Ccn_Measurement_Report_t, ThreeG_BA_USED, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004228 M_UINT_OFFSET(Eutran_Ccn_Measurement_Report_t, N_EUTRAN, 2, 1),
4229 M_VAR_TARRAY (Eutran_Ccn_Measurement_Report_t, Eutran_Ccn_Measurement_Report_Cell, Eutran_Ccn_Measurement_Report_Cell_t, N_EUTRAN),
4230CSN_DESCR_END (Eutran_Ccn_Measurement_Report_t)
4231
4232static const
4233CSN_DESCR_BEGIN(Target_Cell_4G_Notif_t)
4234 M_NEXT_EXIST (Target_Cell_4G_Notif_t, Exist_Arfcn, 2),
4235 M_UINT (Target_Cell_4G_Notif_t, Arfcn, 10),
4236 M_UINT (Target_Cell_4G_Notif_t, bsic, 6),
4237 M_NEXT_EXIST (Target_Cell_4G_Notif_t, Exist_3G_Target_Cell, 1),
4238 M_TYPE (Target_Cell_4G_Notif_t, Target_Cell_3G_Notif, Target_Cell_3G_Notif_t),
4239 M_NEXT_EXIST (Target_Cell_4G_Notif_t, Exist_Eutran_Target_Cell, 1),
4240 M_TYPE (Target_Cell_4G_Notif_t, Target_EUTRAN_Cell, Target_EUTRAN_Cell_Notif_t),
4241 M_NEXT_EXIST (Target_Cell_4G_Notif_t, Exist_Eutran_Ccn_Measurement_Report, 1),
4242 M_TYPE (Target_Cell_4G_Notif_t, Eutran_Ccn_Measurement_Report, Eutran_Ccn_Measurement_Report_t),
4243CSN_DESCR_END (Target_Cell_4G_Notif_t)
4244
4245static const
4246CSN_DESCR_BEGIN(Target_Cell_CSG_Notif_t)
4247 M_FIXED (Target_Cell_CSG_Notif_t, 1, 0x00),
4248 M_UNION (Target_Cell_CSG_Notif_t, 2),
4249 M_TYPE (Target_Cell_CSG_Notif_t, u.UTRAN_CSG_Measurement_Report, UTRAN_CSG_Measurement_Report_t),
4250 M_TYPE (Target_Cell_CSG_Notif_t, u.EUTRAN_CSG_Measurement_Report, EUTRAN_CSG_Measurement_Report_t),
4251 M_NEXT_EXIST (Target_Cell_CSG_Notif_t, Exist_Eutran_Ccn_Measurement_Report, 1),
4252 M_TYPE (Target_Cell_CSG_Notif_t, Eutran_Ccn_Measurement_Report, Eutran_Ccn_Measurement_Report_t),
4253CSN_DESCR_END (Target_Cell_CSG_Notif_t)
4254
4255static const
4256CSN_DESCR_BEGIN(Target_Other_RAT_2_Notif_t)
4257 /* 110 vs 1110 */
4258 M_UNION (Target_Other_RAT_2_Notif_t, 2),
4259 M_TYPE (Target_Other_RAT_2_Notif_t, u.Target_Cell_4G_Notif, Target_Cell_4G_Notif_t),
4260 M_TYPE (Target_Other_RAT_2_Notif_t, u.Target_Cell_CSG_Notif, Target_Cell_CSG_Notif_t),
4261CSN_DESCR_END (Target_Other_RAT_2_Notif_t)
4262
4263static const
4264CSN_DESCR_BEGIN(Target_Other_RAT_Notif_t)
4265 /* 10 vs 110 */
4266 M_UNION (Target_Other_RAT_Notif_t, 2),
4267 M_TYPE (Target_Other_RAT_Notif_t, u.Target_Cell_3G_Notif, Target_Cell_3G_Notif_t),
4268 M_TYPE (Target_Other_RAT_Notif_t, u.Target_Other_RAT_2_Notif, Target_Other_RAT_2_Notif_t),
4269CSN_DESCR_END (Target_Other_RAT_Notif_t)
4270
4271static const
4272CSN_DESCR_BEGIN(Target_Cell_t)
4273 /* 0 vs 10 */
4274 M_UNION (Target_Cell_t, 2),
4275 M_TYPE (Target_Cell_t, u.Target_Cell_GSM_Notif, Target_Cell_GSM_Notif_t),
4276 M_TYPE (Target_Cell_t, u.Target_Other_RAT_Notif, Target_Other_RAT_Notif_t),
4277CSN_DESCR_END (Target_Cell_t)
4278
4279static const
4280CSN_DESCR_BEGIN (PCCN_AdditionsR6_t)
4281 M_NEXT_EXIST (PCCN_AdditionsR6_t, Exist_BA_USED_3G, 1),
4282 M_UINT (PCCN_AdditionsR6_t, BA_USED_3G, 1),
4283
4284 M_UINT_OFFSET (PCCN_AdditionsR6_t, N_3G, 3, 1), /* offset 1 */
4285 M_VAR_TARRAY_OFFSET (PCCN_AdditionsR6_t, Measurements_3G, Measurements_3G_t, N_3G),
4286CSN_DESCR_END (PCCN_AdditionsR6_t)
4287
4288/*< Packet Cell Change Notification message contents > */
4289static const
4290CSN_DESCR_BEGIN(Packet_Cell_Change_Notification_t)
4291 /* Mac header */
4292 M_UINT (Packet_Cell_Change_Notification_t, PayloadType, 2),
4293 M_UINT (Packet_Cell_Change_Notification_t, spare, 5),
4294 M_UINT (Packet_Cell_Change_Notification_t, R, 1),
4295 M_UINT (Packet_Cell_Change_Notification_t, MESSAGE_TYPE, 6),
4296 /* Mac header */
4297
4298 M_TYPE (Packet_Cell_Change_Notification_t, Global_TFI, Global_TFI_t),
4299 M_TYPE (Packet_Cell_Change_Notification_t, Target_Cell, Target_Cell_t),
4300
4301 M_UNION (Packet_Cell_Change_Notification_t, 2),
4302 M_UINT (Packet_Cell_Change_Notification_t, u.BA_IND, 1),
4303 M_UINT (Packet_Cell_Change_Notification_t, u.PSI3_CHANGE_MARK, 2),
4304
4305 M_UINT (Packet_Cell_Change_Notification_t, PMO_USED, 1),
4306 M_UINT (Packet_Cell_Change_Notification_t, PCCN_SENDING, 1),
4307 M_TYPE (Packet_Cell_Change_Notification_t, CCN_Measurement_Report, CCN_Measurement_Report_t),
4308
4309 M_NEXT_EXIST_OR_NULL(Packet_Cell_Change_Notification_t, Exist_AdditionsR6, 1),
4310 M_TYPE (Packet_Cell_Change_Notification_t, AdditionsR6, PCCN_AdditionsR6_t),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04004311
4312 M_PADDING_BITS(Packet_Cell_Change_Notification_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004313CSN_DESCR_END (Packet_Cell_Change_Notification_t)
4314
4315/*< Packet Cell Change Continue message contents > */
4316static const
4317CSN_DESCR_BEGIN(Packet_Cell_Change_Continue_t)
4318 M_UINT (Packet_Cell_Change_Continue_t, MESSAGE_TYPE, 6),
4319 M_UINT (Packet_Cell_Change_Continue_t, PAGE_MODE, 2),
4320 M_FIXED (Packet_Cell_Change_Continue_t, 1, 0x00),
4321 M_TYPE (Packet_Cell_Change_Continue_t, Global_TFI, Global_TFI_t),
4322
4323 M_NEXT_EXIST (Packet_Cell_Change_Continue_t, Exist_ID, 3),
4324 M_UINT (Packet_Cell_Change_Continue_t, ARFCN, 10),
4325 M_UINT (Packet_Cell_Change_Continue_t, BSIC, 6),
4326 M_UINT (Packet_Cell_Change_Continue_t, CONTAINER_ID, 2),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04004327
4328 M_PADDING_BITS(Packet_Cell_Change_Continue_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004329CSN_DESCR_END (Packet_Cell_Change_Continue_t)
4330
4331/*< Packet Neighbour Cell Data message contents > */
4332static const
4333CSN_DESCR_BEGIN(PNCD_Container_With_ID_t)
4334 M_UINT (PNCD_Container_With_ID_t, ARFCN, 10),
4335 M_UINT (PNCD_Container_With_ID_t, BSIC, 6),
4336 M_UINT_ARRAY (PNCD_Container_With_ID_t, CONTAINER, 8, 17),/* 8*17 bits */
4337CSN_DESCR_END (PNCD_Container_With_ID_t)
4338
4339static const
4340CSN_DESCR_BEGIN(PNCD_Container_Without_ID_t)
4341 M_UINT_ARRAY (PNCD_Container_Without_ID_t, CONTAINER, 8, 19),/* 8*19 bits */
4342CSN_DESCR_END (PNCD_Container_Without_ID_t)
4343
4344static const
4345CSN_ChoiceElement_t PNCDContainer[] =
4346{
Pau Espin Pedrol7cce8252020-01-24 16:41:14 +01004347 {1, 0x0, 0, M_TYPE(PNCDContainer_t, u.PNCD_Container_Without_ID, PNCD_Container_Without_ID_t)},
4348 {1, 0x1, 0, M_TYPE(PNCDContainer_t, u.PNCD_Container_With_ID, PNCD_Container_With_ID_t)},
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004349};
4350
4351static const
4352CSN_DESCR_BEGIN(PNCDContainer_t)
4353 M_CHOICE (PNCDContainer_t, UnionType, PNCDContainer, ElementsOf(PNCDContainer)),
4354CSN_DESCR_END (PNCDContainer_t)
4355
4356static const
4357CSN_DESCR_BEGIN(Packet_Neighbour_Cell_Data_t)
4358 M_UINT (Packet_Neighbour_Cell_Data_t, MESSAGE_TYPE, 6),
4359 M_UINT (Packet_Neighbour_Cell_Data_t, PAGE_MODE, 2),
4360 M_FIXED (Packet_Neighbour_Cell_Data_t, 1, 0x00),
4361 M_TYPE (Packet_Neighbour_Cell_Data_t, Global_TFI, Global_TFI_t),
4362
4363 M_UINT (Packet_Neighbour_Cell_Data_t, CONTAINER_ID, 2),
4364 M_UINT (Packet_Neighbour_Cell_Data_t, spare, 1),
4365 M_UINT (Packet_Neighbour_Cell_Data_t, CONTAINER_INDEX, 5),
4366
4367 M_TYPE (Packet_Neighbour_Cell_Data_t, Container, PNCDContainer_t),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04004368 M_PADDING_BITS(Packet_Neighbour_Cell_Data_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004369CSN_DESCR_END (Packet_Neighbour_Cell_Data_t)
4370
4371/*< Packet Serving Cell Data message contents > */
4372static const
4373CSN_DESCR_BEGIN(Packet_Serving_Cell_Data_t)
4374 M_UINT (Packet_Serving_Cell_Data_t, MESSAGE_TYPE, 6),
4375 M_UINT (Packet_Serving_Cell_Data_t, PAGE_MODE, 2),
4376 M_FIXED (Packet_Serving_Cell_Data_t, 1, 0x00),
4377 M_TYPE (Packet_Serving_Cell_Data_t, Global_TFI, Global_TFI_t),
4378
4379 M_UINT (Packet_Serving_Cell_Data_t, spare, 4),
4380 M_UINT (Packet_Serving_Cell_Data_t, CONTAINER_INDEX, 5),
4381 M_UINT_ARRAY (Packet_Serving_Cell_Data_t, CONTAINER, 8, 19),/* 8*19 bits */
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04004382 M_PADDING_BITS(Packet_Serving_Cell_Data_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004383CSN_DESCR_END (Packet_Serving_Cell_Data_t)
4384
4385
4386/* Enhanced Measurement Report */
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01004387#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004388static const
4389CSN_DESCR_BEGIN (ServingCellData_t)
4390 M_UINT (ServingCellData_t, RXLEV_SERVING_CELL, 6),
4391 M_FIXED (ServingCellData_t, 1, 0),
4392CSN_DESCR_END (ServingCellData_t)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01004393#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004394
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01004395#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004396static const
4397CSN_DESCR_BEGIN (Repeated_Invalid_BSIC_Info_t)
4398 M_UINT (Repeated_Invalid_BSIC_Info_t, BCCH_FREQ_NCELL, 5),
4399 M_UINT (Repeated_Invalid_BSIC_Info_t, BSIC, 6),
4400 M_UINT (Repeated_Invalid_BSIC_Info_t, RXLEV_NCELL, 5),
4401CSN_DESCR_END (Repeated_Invalid_BSIC_Info_t)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01004402#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004403
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01004404#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004405static const
4406CSN_DESCR_BEGIN (REPORTING_QUANTITY_t)
4407 M_NEXT_EXIST (REPORTING_QUANTITY_t, Exist_REPORTING_QUANTITY, 1),
4408 M_UINT (REPORTING_QUANTITY_t, REPORTING_QUANTITY, 6),
4409CSN_DESCR_END (REPORTING_QUANTITY_t)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01004410#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004411
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01004412#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004413static const
4414CSN_DESCR_BEGIN (NC_MeasurementReport_t)
Anders Broman8ea3cbe2020-01-28 17:36:33 +01004415 M_UINT (NC_MeasurementReport_t, NC_MODE, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004416 M_UNION (NC_MeasurementReport_t, 2),
4417 M_TYPE (NC_MeasurementReport_t, u.BA_USED, BA_USED_t),
Anders Broman8ea3cbe2020-01-28 17:36:33 +01004418 M_UINT (NC_MeasurementReport_t, u.PSI3_CHANGE_MARK, 2),
4419 M_UINT (NC_MeasurementReport_t, PMO_USED, 1),
4420 M_UINT (NC_MeasurementReport_t, SCALE, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004421
4422 M_NEXT_EXIST (NC_MeasurementReport_t, Exist_ServingCellData, 1),
4423 M_TYPE (NC_MeasurementReport_t, ServingCellData, ServingCellData_t),
4424
4425 M_REC_TARRAY (NC_MeasurementReport_t, Repeated_Invalid_BSIC_Info, Repeated_Invalid_BSIC_Info_t, Count_Repeated_Invalid_BSIC_Info),
4426
4427 M_NEXT_EXIST (NC_MeasurementReport_t, Exist_Repeated_REPORTING_QUANTITY, 1),
4428 M_VAR_TARRAY (NC_MeasurementReport_t, Repeated_REPORTING_QUANTITY, REPORTING_QUANTITY_t, Count_Repeated_Reporting_Quantity),
4429CSN_DESCR_END (NC_MeasurementReport_t)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01004430#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004431
4432
4433/*< Packet Handover Command message content > */
4434static const
4435CSN_DESCR_BEGIN (GlobalTimeslotDescription_t)
4436 M_UNION (GlobalTimeslotDescription_t, 2),
4437 M_UINT (GlobalTimeslotDescription_t, u.MS_TimeslotAllocation, 8),
4438 M_TYPE (GlobalTimeslotDescription_t, u.Power_Control_Parameters, Power_Control_Parameters_t),
4439CSN_DESCR_END (GlobalTimeslotDescription_t)
4440
4441static const
4442CSN_DESCR_BEGIN (PHO_DownlinkAssignment_t)
4443 M_UINT (PHO_DownlinkAssignment_t, TimeslotAllocation, 8),
4444 M_UINT (PHO_DownlinkAssignment_t, PFI, 7),
Anders Broman8ea3cbe2020-01-28 17:36:33 +01004445 M_UINT (PHO_DownlinkAssignment_t, RLC_Mode, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004446 M_UINT (PHO_DownlinkAssignment_t, TFI_Assignment, 5),
Anders Broman8ea3cbe2020-01-28 17:36:33 +01004447 M_UINT (PHO_DownlinkAssignment_t, ControlACK, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004448
4449 M_NEXT_EXIST (PHO_DownlinkAssignment_t, Exist_EGPRS_WindowSize, 1),
4450 M_UINT (PHO_DownlinkAssignment_t, EGPRS_WindowSize, 5),
4451CSN_DESCR_END (PHO_DownlinkAssignment_t)
4452
4453static const
4454CSN_DESCR_BEGIN (PHO_USF_1_7_t)
4455 M_NEXT_EXIST (PHO_USF_1_7_t, Exist_USF, 1),
4456 M_UINT (PHO_USF_1_7_t, USF, 3),
4457CSN_DESCR_END (PHO_USF_1_7_t)
4458
4459static const
4460CSN_DESCR_BEGIN (USF_AllocationArray_t)
4461 M_UINT (USF_AllocationArray_t, USF_0, 3),
4462 M_VAR_TARRAY_OFFSET (USF_AllocationArray_t, USF_1_7, PHO_USF_1_7_t, NBR_OfAllocatedTimeslots),
4463CSN_DESCR_END (USF_AllocationArray_t)
4464
4465static const
4466CSN_DESCR_BEGIN (PHO_UplinkAssignment_t)
4467 M_UINT (PHO_UplinkAssignment_t, PFI, 7),
Anders Broman8ea3cbe2020-01-28 17:36:33 +01004468 M_UINT (PHO_UplinkAssignment_t, RLC_Mode, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004469 M_UINT (PHO_UplinkAssignment_t, TFI_Assignment, 5),
4470
4471 M_NEXT_EXIST (PHO_UplinkAssignment_t, Exist_ChannelCodingCommand, 1),
4472 M_UINT (PHO_UplinkAssignment_t, ChannelCodingCommand, 2),
4473
4474 M_NEXT_EXIST (PHO_UplinkAssignment_t, Exist_EGPRS_ChannelCodingCommand, 1),
4475 M_UINT (PHO_UplinkAssignment_t, EGPRS_ChannelCodingCommand, 4),
4476
4477 M_NEXT_EXIST (PHO_UplinkAssignment_t, Exist_EGPRS_WindowSize, 1),
4478 M_UINT (PHO_UplinkAssignment_t, EGPRS_WindowSize, 5),
4479
Anders Broman8ea3cbe2020-01-28 17:36:33 +01004480 M_UINT (PHO_UplinkAssignment_t, USF_Granularity, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004481
4482 M_NEXT_EXIST (PHO_UplinkAssignment_t, Exist_TBF_TimeslotAllocation, 1),
4483 M_LEFT_VAR_BMP (PHO_UplinkAssignment_t, TBF_TimeslotAllocation, u.USF_AllocationArray.NBR_OfAllocatedTimeslots, 0),
4484
4485 M_UNION (PHO_UplinkAssignment_t, 2),
4486 M_UINT (PHO_UplinkAssignment_t, u.USF_SingleAllocation, 3),
4487 M_TYPE (PHO_UplinkAssignment_t, u.USF_AllocationArray, USF_AllocationArray_t),
4488CSN_DESCR_END (PHO_UplinkAssignment_t)
4489
4490static const
4491CSN_DESCR_BEGIN (GlobalTimeslotDescription_UA_t)
4492 M_TYPE (GlobalTimeslotDescription_UA_t, GlobalTimeslotDescription, GlobalTimeslotDescription_t),
Pascal Quantin46374692020-01-28 18:03:22 +01004493 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 +03004494
4495 M_TYPE (GlobalTimeslotDescription_UA_t, PHO_UA, PHO_UplinkAssignment_t),
4496 M_FIXED (GlobalTimeslotDescription_UA_t, 1, 0x0), /* Escape recursive */
4497CSN_DESCR_END (GlobalTimeslotDescription_UA_t)
4498
4499static const
4500CSN_DESCR_BEGIN (PHO_GPRS_t)
4501 M_NEXT_EXIST (PHO_GPRS_t, Exist_ChannelCodingCommand, 1),
4502 M_UINT (PHO_GPRS_t, ChannelCodingCommand, 2),
4503
4504 M_NEXT_EXIST (PHO_GPRS_t, Exist_GlobalTimeslotDescription_UA, 1),
4505 M_TYPE (PHO_GPRS_t, GTD_UA, GlobalTimeslotDescription_UA_t),
4506
4507 M_NEXT_EXIST (PHO_GPRS_t, Exist_DownlinkAssignment, 2), /* Don't use M_REC_TARRAY as we don't support multiple TBFs */
4508 M_TYPE (PHO_GPRS_t, DownlinkAssignment, PHO_DownlinkAssignment_t),
4509 M_FIXED (PHO_GPRS_t, 1, 0x0), /* Escape recursive */
4510CSN_DESCR_END (PHO_GPRS_t)
4511
4512static const
4513CSN_DESCR_BEGIN (EGPRS_Description_t)
4514 M_NEXT_EXIST (EGPRS_Description_t, Exist_EGPRS_WindowSize, 1),
4515 M_UINT (EGPRS_Description_t, EGPRS_WindowSize, 5),
4516
4517 M_UINT (EGPRS_Description_t, LinkQualityMeasurementMode, 2),
4518 M_NEXT_EXIST (EGPRS_Description_t, Exist_BEP_Period2, 1),
4519 M_UINT (EGPRS_Description_t, BEP_Period2, 4),
4520CSN_DESCR_END (EGPRS_Description_t)
4521
4522static const
4523CSN_DESCR_BEGIN (DownlinkTBF_t)
4524 M_NEXT_EXIST (DownlinkTBF_t, Exist_EGPRS_Description, 1),
4525 M_TYPE (DownlinkTBF_t, EGPRS_Description, EGPRS_Description_t),
4526
4527 M_NEXT_EXIST (DownlinkTBF_t, Exist_DownlinkAssignment, 2), /* Don't use M_REC_TARRAY as we don't support multiple TBFs */
4528 M_TYPE (DownlinkTBF_t, DownlinkAssignment, PHO_DownlinkAssignment_t),
4529 M_FIXED (DownlinkTBF_t, 1, 0x0), /* Escape recursive */
4530CSN_DESCR_END (DownlinkTBF_t)
4531
4532static const
4533CSN_DESCR_BEGIN (PHO_EGPRS_t)
4534 M_NEXT_EXIST (PHO_EGPRS_t, Exist_EGPRS_WindowSize, 1),
4535 M_UINT (PHO_EGPRS_t, EGPRS_WindowSize, 5),
4536
4537 M_NEXT_EXIST (PHO_EGPRS_t, Exist_EGPRS_ChannelCodingCommand, 1),
4538 M_UINT (PHO_EGPRS_t, EGPRS_ChannelCodingCommand, 4),
4539
4540 M_NEXT_EXIST (PHO_EGPRS_t, Exist_BEP_Period2, 1),
4541 M_UINT (PHO_EGPRS_t, BEP_Period2, 4),
4542
4543 M_NEXT_EXIST (PHO_EGPRS_t, Exist_GlobalTimeslotDescription_UA, 1),
4544 M_TYPE (PHO_EGPRS_t, GTD_UA, GlobalTimeslotDescription_UA_t),
4545
Pascal Quantin46374692020-01-28 18:03:22 +01004546 M_NEXT_EXIST (PHO_EGPRS_t, Exist_DownlinkTBF, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004547 M_TYPE (PHO_EGPRS_t, DownlinkTBF, DownlinkTBF_t),
4548CSN_DESCR_END (PHO_EGPRS_t)
4549
4550static const
4551CSN_DESCR_BEGIN(PHO_TimingAdvance_t)
Vadim Yanitskiy48587d52020-08-22 02:08:25 +07004552 M_TYPE (PHO_TimingAdvance_t, GlobalPacket_Timing_Advance, Global_Packet_Timing_Advance_t),
4553 M_NEXT_EXIST (PHO_TimingAdvance_t, Exist_Packet_Extended_Timing_Advance, 1),
4554 M_UINT (PHO_TimingAdvance_t, Packet_Extended_Timing_Advance, 2),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004555CSN_DESCR_END (PHO_TimingAdvance_t)
4556
4557static const
Vincent Helfree525bf92020-01-28 18:14:30 +01004558CSN_DESCR_BEGIN(NAS_Container_For_PS_HO_t)
4559 M_UINT (NAS_Container_For_PS_HO_t, NAS_ContainerLength, 7),
4560 M_UINT (NAS_Container_For_PS_HO_t, Spare_1a, 1),
4561 M_UINT (NAS_Container_For_PS_HO_t, Spare_1b, 1),
4562 M_UINT (NAS_Container_For_PS_HO_t, Spare_1c, 1),
4563 M_UINT (NAS_Container_For_PS_HO_t, Old_XID, 1),
4564 M_UINT (NAS_Container_For_PS_HO_t, Spare_1e, 1),
4565 M_UINT (NAS_Container_For_PS_HO_t, Type_of_Ciphering_Algo, 3),
4566 M_UINT (NAS_Container_For_PS_HO_t, IOV_UI_value, 32),
4567CSN_DESCR_END (NAS_Container_For_PS_HO_t)
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004568
4569static const
4570CSN_DESCR_BEGIN(PS_HandoverTo_UTRAN_Payload_t)
4571 M_UINT (PS_HandoverTo_UTRAN_Payload_t, RRC_ContainerLength, 8),
4572 M_VAR_ARRAY (PS_HandoverTo_UTRAN_Payload_t, RRC_Container, RRC_ContainerLength, 0),
4573CSN_DESCR_END (PS_HandoverTo_UTRAN_Payload_t)
4574
4575
4576static const
Pau Espin Pedrol99eb3532020-03-26 18:50:00 +01004577CSN_DESCR_BEGIN(PS_HandoverTo_E_UTRAN_Payload_t)
4578 M_UINT (PS_HandoverTo_E_UTRAN_Payload_t, RRC_ContainerLength, 8),
4579 M_VAR_ARRAY (PS_HandoverTo_E_UTRAN_Payload_t, RRC_Container, RRC_ContainerLength, 0),
4580CSN_DESCR_END (PS_HandoverTo_E_UTRAN_Payload_t)
4581
4582static const
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004583CSN_DESCR_BEGIN(PHO_RadioResources_t)
4584 M_NEXT_EXIST (PHO_RadioResources_t, Exist_HandoverReference, 1),
4585 M_UINT (PHO_RadioResources_t, HandoverReference, 8),
4586
4587 M_UINT (PHO_RadioResources_t, ARFCN, 10),
4588 M_UINT (PHO_RadioResources_t, SI, 2),
Anders Broman8ea3cbe2020-01-28 17:36:33 +01004589 M_UINT (PHO_RadioResources_t, NCI, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004590 M_UINT (PHO_RadioResources_t, BSIC, 6),
4591 M_NEXT_EXIST (PHO_RadioResources_t, Exist_CCN_Active, 1),
Anders Broman8ea3cbe2020-01-28 17:36:33 +01004592 M_UINT (PHO_RadioResources_t, CCN_Active, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004593
4594 M_NEXT_EXIST (PHO_RadioResources_t, Exist_CCN_Active_3G, 1),
Anders Broman8ea3cbe2020-01-28 17:36:33 +01004595 M_UINT (PHO_RadioResources_t, CCN_Active_3G, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004596
4597 M_NEXT_EXIST (PHO_RadioResources_t, Exist_CCN_Support_Description, 1),
4598 M_TYPE (PHO_RadioResources_t, CCN_Support_Description, CCN_Support_Description_t),
4599
4600 M_TYPE (PHO_RadioResources_t, Frequency_Parameters, Frequency_Parameters_t),
4601 M_UINT (PHO_RadioResources_t, NetworkControlOrder, 2),
4602 M_NEXT_EXIST (PHO_RadioResources_t, Exist_PHO_TimingAdvance, 1),
4603 M_TYPE (PHO_RadioResources_t, PHO_TimingAdvance, PHO_TimingAdvance_t),
4604
Anders Broman8ea3cbe2020-01-28 17:36:33 +01004605 M_UINT (PHO_RadioResources_t, Extended_Dynamic_Allocation, 1),
4606 M_UINT (PHO_RadioResources_t, RLC_Reset, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004607 M_NEXT_EXIST (PHO_RadioResources_t, Exist_PO_PR, 2),
4608 M_UINT (PHO_RadioResources_t, PO, 4),
Anders Broman8ea3cbe2020-01-28 17:36:33 +01004609 M_UINT (PHO_RadioResources_t, PR_Mode, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004610
4611
4612 M_NEXT_EXIST (PHO_RadioResources_t, Exist_UplinkControlTimeslot, 1),
4613 M_UINT (PHO_RadioResources_t, UplinkControlTimeslot, 3),
4614
4615 M_UNION (PHO_RadioResources_t, 2),
4616 M_TYPE (PHO_RadioResources_t, u.PHO_GPRS_Mode, PHO_GPRS_t),
4617 M_TYPE (PHO_RadioResources_t, u.PHO_EGPRS_Mode, PHO_EGPRS_t),
4618CSN_DESCR_END (PHO_RadioResources_t)
4619
4620static const
4621CSN_DESCR_BEGIN(PS_HandoverTo_A_GB_ModePayload_t)
4622 M_FIXED (PS_HandoverTo_A_GB_ModePayload_t, 2, 0x00), /* For future extension to enum. */
4623 M_TYPE (PS_HandoverTo_A_GB_ModePayload_t, PHO_RadioResources, PHO_RadioResources_t),
4624
4625 M_NEXT_EXIST (PS_HandoverTo_A_GB_ModePayload_t, Exist_NAS_Container, 1),
Vincent Helfree525bf92020-01-28 18:14:30 +01004626 M_TYPE (PS_HandoverTo_A_GB_ModePayload_t, NAS_Container, NAS_Container_For_PS_HO_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004627CSN_DESCR_END (PS_HandoverTo_A_GB_ModePayload_t)
4628
4629static const
4630CSN_DESCR_BEGIN(Packet_Handover_Command_t)
4631 M_UINT (Packet_Handover_Command_t, MessageType, 6),
4632 M_UINT (Packet_Handover_Command_t, PageMode, 2),
4633
4634 M_FIXED (Packet_Handover_Command_t, 1, 0x00), /* 0 fixed */
4635 M_TYPE (Packet_Handover_Command_t, Global_TFI, Global_TFI_t),
4636
4637 M_UINT (Packet_Handover_Command_t, ContainerID, 2),
4638
4639 M_UNION (Packet_Handover_Command_t, 4),
4640 M_TYPE (Packet_Handover_Command_t, u.PS_HandoverTo_A_GB_ModePayload, PS_HandoverTo_A_GB_ModePayload_t),
4641 M_TYPE (Packet_Handover_Command_t, u.PS_HandoverTo_UTRAN_Payload, PS_HandoverTo_UTRAN_Payload_t),
Pau Espin Pedrol99eb3532020-03-26 18:50:00 +01004642 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 +03004643 CSN_ERROR (Packet_Handover_Command_t, "11 <extension> not implemented", CSN_ERROR_STREAM_NOT_SUPPORTED),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04004644
4645 M_PADDING_BITS(Packet_Handover_Command_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004646CSN_DESCR_END (Packet_Handover_Command_t)
4647
4648/*< End Packet Handover Command >*/
4649
4650/*< Packet Physical Information message content > */
4651
4652static const
4653CSN_DESCR_BEGIN(Packet_PhysicalInformation_t)
4654 M_UINT (Packet_PhysicalInformation_t, MessageType, 6),
4655 M_UINT (Packet_PhysicalInformation_t, PageMode, 2),
4656
4657 M_TYPE (Packet_PhysicalInformation_t, Global_TFI, Global_TFI_t),
4658
4659 M_UINT (Packet_PhysicalInformation_t, TimingAdvance, 8),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04004660 M_PADDING_BITS(Packet_PhysicalInformation_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004661CSN_DESCR_END (Packet_PhysicalInformation_t)
4662
4663/*< End Packet Physical Information > */
4664
4665
4666/*< ADDITIONAL MS RADIO ACCESS CAPABILITIES content > */
4667static const
4668CSN_ChoiceElement_t AdditionalMsRadAccessCapID[] =
4669{
Pau Espin Pedrol7cce8252020-01-24 16:41:14 +01004670 {1, 0, 0, M_TYPE(AdditionalMsRadAccessCapID_t, u.Global_TFI, Global_TFI_t)},
4671 {1, 0x01, 0, M_UINT(AdditionalMsRadAccessCapID_t, u.TLLI, 32)},
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004672};
4673
4674static const
4675CSN_DESCR_BEGIN(AdditionalMsRadAccessCapID_t)
4676 M_CHOICE (AdditionalMsRadAccessCapID_t, UnionType, AdditionalMsRadAccessCapID, ElementsOf(AdditionalMsRadAccessCapID)),
4677CSN_DESCR_END (AdditionalMsRadAccessCapID_t)
4678
4679
4680static const
4681CSN_DESCR_BEGIN (Additional_MS_Rad_Access_Cap_t)
4682 /* Mac header */
4683 M_UINT (Additional_MS_Rad_Access_Cap_t, PayloadType, 2),
4684 M_UINT (Additional_MS_Rad_Access_Cap_t, spare, 5),
4685 M_UINT (Additional_MS_Rad_Access_Cap_t, R, 1),
4686 M_UINT (Additional_MS_Rad_Access_Cap_t, MESSAGE_TYPE, 6),
4687 /* Mac header */
4688
4689 M_TYPE (Additional_MS_Rad_Access_Cap_t, ID, AdditionalMsRadAccessCapID_t),
Pau Espin Pedrolde635482020-03-25 20:26:02 +01004690 M_TYPE (Additional_MS_Rad_Access_Cap_t, MS_Radio_Access_capability2, MS_Radio_Access_capability2_t),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04004691 M_PADDING_BITS (Additional_MS_Rad_Access_Cap_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004692CSN_DESCR_END (Additional_MS_Rad_Access_Cap_t)
4693
4694
4695/*< End ADDITIONAL MS RADIO ACCESS CAPABILITIES > */
4696
4697
4698/*< Packet Pause content > */
4699
4700static const
4701CSN_DESCR_BEGIN (Packet_Pause_t)
4702 M_UINT (Packet_Pause_t, MESSAGE_TYPE, 2),
4703 M_UINT (Packet_Pause_t, TLLI, 32),
4704 M_BITMAP (Packet_Pause_t, RAI, 48),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04004705 M_PADDING_BITS (Packet_Pause_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004706CSN_DESCR_END (Packet_Pause_t)
4707
4708
4709/*< End Packet Pause > */
4710
4711
4712/*< Packet System Information Type 1 message content >*/
Pascal Quantin29248d62020-01-28 17:13:17 +01004713CSN_DESCR_BEGIN(PSI1_AdditionsR6_t)
4714 M_UINT (PSI1_AdditionsR6_t, LB_MS_TXPWR_MAX_CCH, 5),
4715CSN_DESCR_END (PSI1_AdditionsR6_t)
4716
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004717static const
Pascal Quantin29248d62020-01-28 17:13:17 +01004718CSN_DESCR_BEGIN (PSI1_AdditionsR99_t)
4719 M_UINT (PSI1_AdditionsR99_t, MSCR, 1),
4720 M_UINT (PSI1_AdditionsR99_t, SGSNR, 1),
4721 M_UINT (PSI1_AdditionsR99_t, BandIndicator, 1),
4722 M_NEXT_EXIST_OR_NULL (PSI1_AdditionsR99_t, Exist_AdditionsR6, 1),
4723 M_TYPE (PSI1_AdditionsR99_t, AdditionsR6, PSI1_AdditionsR6_t),
4724CSN_DESCR_END (PSI1_AdditionsR99_t)
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004725
4726static const
4727CSN_DESCR_BEGIN(PCCCH_Organization_t)
4728 M_UINT (PCCCH_Organization_t, BS_PCC_REL, 1),
4729 M_UINT (PCCCH_Organization_t, BS_PBCCH_BLKS, 2),
4730 M_UINT (PCCCH_Organization_t, BS_PAG_BLKS_RES, 4),
4731 M_UINT (PCCCH_Organization_t, BS_PRACH_BLKS, 4),
4732CSN_DESCR_END (PCCCH_Organization_t)
4733
4734
4735static const
4736CSN_DESCR_BEGIN(PSI1_t)
Pascal Quantin29248d62020-01-28 17:13:17 +01004737 M_UINT (PSI1_t, MESSAGE_TYPE, 6),
4738 M_UINT (PSI1_t, PAGE_MODE, 2),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004739
Pascal Quantin29248d62020-01-28 17:13:17 +01004740 M_UINT (PSI1_t, PBCCH_CHANGE_MARK, 3),
4741 M_UINT (PSI1_t, PSI_CHANGE_FIELD, 4),
4742 M_UINT (PSI1_t, PSI1_REPEAT_PERIOD, 4),
4743 M_UINT (PSI1_t, PSI_COUNT_LR, 6),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004744
Pascal Quantin29248d62020-01-28 17:13:17 +01004745 M_NEXT_EXIST (PSI1_t, Exist_PSI_COUNT_HR, 1),
4746 M_UINT (PSI1_t, PSI_COUNT_HR, 4),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004747
Pascal Quantin29248d62020-01-28 17:13:17 +01004748 M_UINT (PSI1_t, MEASUREMENT_ORDER, 1),
4749 M_TYPE (PSI1_t, GPRS_Cell_Options, GPRS_Cell_Options_t),
4750 M_TYPE (PSI1_t, PRACH_Control, PRACH_Control_t),
4751 M_TYPE (PSI1_t, PCCCH_Organization, PCCCH_Organization_t),
4752 M_TYPE (PSI1_t, Global_Power_Control_Parameters, Global_Power_Control_Parameters_t),
4753 M_UINT (PSI1_t, PSI_STATUS_IND, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004754
Pascal Quantin29248d62020-01-28 17:13:17 +01004755 M_NEXT_EXIST_OR_NULL (PSI1_t, Exist_AdditionsR99, 1),
4756 M_TYPE (PSI1_t, AdditionsR99, PSI1_AdditionsR99_t),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04004757
4758 M_PADDING_BITS(PSI1_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004759CSN_DESCR_END (PSI1_t)
4760/*< End Packet System Information Type 1 message content >*/
4761
4762
4763/*< Packet System Information Type 2 message content >*/
4764
4765static const
4766CSN_DESCR_BEGIN(LAI_t)
4767 M_TYPE (LAI_t, PLMN, PLMN_t),
4768 M_UINT (LAI_t, LAC, 16),
4769CSN_DESCR_END (LAI_t)
4770
4771static const
4772CSN_DESCR_BEGIN(Cell_Identification_t)
4773 M_TYPE (Cell_Identification_t, LAI, LAI_t),
4774 M_UINT (Cell_Identification_t, RAC, 8),
4775 M_UINT (Cell_Identification_t, Cell_Identity, 16),
4776CSN_DESCR_END (Cell_Identification_t)
4777
4778static const
4779CSN_DESCR_BEGIN(Non_GPRS_Cell_Options_t)
Anders Broman8ea3cbe2020-01-28 17:36:33 +01004780 M_UINT (Non_GPRS_Cell_Options_t, ATT, 1),
Pau Espin Pedrol034e32f2020-01-28 17:14:26 +01004781
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004782 M_NEXT_EXIST (Non_GPRS_Cell_Options_t, Exist_T3212, 1),
4783 M_UINT (Non_GPRS_Cell_Options_t, T3212, 8),
Pau Espin Pedrol034e32f2020-01-28 17:14:26 +01004784
Anders Broman8ea3cbe2020-01-28 17:36:33 +01004785 M_UINT (Non_GPRS_Cell_Options_t, NECI, 1),
4786 M_UINT (Non_GPRS_Cell_Options_t, PWRC, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004787 M_UINT (Non_GPRS_Cell_Options_t, DTX, 2),
4788 M_UINT (Non_GPRS_Cell_Options_t, RADIO_LINK_TIMEOUT, 4),
4789 M_UINT (Non_GPRS_Cell_Options_t, BS_AG_BLKS_RES, 3),
4790 M_UINT (Non_GPRS_Cell_Options_t, CCCH_CONF, 3),
4791 M_UINT (Non_GPRS_Cell_Options_t, BS_PA_MFRMS, 3),
4792 M_UINT (Non_GPRS_Cell_Options_t, MAX_RETRANS, 2),
4793 M_UINT (Non_GPRS_Cell_Options_t, TX_INTEGER, 4),
Anders Broman8ea3cbe2020-01-28 17:36:33 +01004794 M_UINT (Non_GPRS_Cell_Options_t, EC, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004795 M_UINT (Non_GPRS_Cell_Options_t, MS_TXPWR_MAX_CCCH, 5),
4796
4797 M_NEXT_EXIST (Non_GPRS_Cell_Options_t, Exist_Extension_Bits, 1),
4798 M_TYPE (Non_GPRS_Cell_Options_t, Extension_Bits, Extension_Bits_t),
4799CSN_DESCR_END (Non_GPRS_Cell_Options_t)
4800
4801static const
4802CSN_DESCR_BEGIN(Reference_Frequency_t)
4803 M_UINT(Reference_Frequency_t, NUMBER, 4),
4804 M_UINT_OFFSET(Reference_Frequency_t, Length, 4, 3),
4805 M_VAR_ARRAY (Reference_Frequency_t, Contents[0], Length, 0),
4806CSN_DESCR_END (Reference_Frequency_t)
4807
4808static const
4809CSN_DESCR_BEGIN(PSI2_MA_t)
4810 M_UINT(PSI2_MA_t, NUMBER, 4),
4811 M_TYPE(PSI2_MA_t, Mobile_Allocation, GPRS_Mobile_Allocation_t),
4812CSN_DESCR_END (PSI2_MA_t)
4813
4814static const
4815CSN_DESCR_BEGIN(Non_Hopping_PCCCH_Carriers_t)
4816 M_UINT(Non_Hopping_PCCCH_Carriers_t, ARFCN, 10),
4817 M_UINT(Non_Hopping_PCCCH_Carriers_t, TIMESLOT_ALLOCATION, 8),
4818CSN_DESCR_END (Non_Hopping_PCCCH_Carriers_t)
4819
4820static const
4821CSN_DESCR_BEGIN(NonHoppingPCCCH_t)
Pau Espin Pedrol81b40cb2020-03-23 15:23:51 +01004822 M_REC_TARRAY (NonHoppingPCCCH_t, Carriers, Non_Hopping_PCCCH_Carriers_t, Count_Carriers),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004823CSN_DESCR_END (NonHoppingPCCCH_t)
4824
4825static const
4826CSN_DESCR_BEGIN(Hopping_PCCCH_Carriers_t)
4827 M_UINT(Hopping_PCCCH_Carriers_t, MAIO, 6),
4828 M_UINT(Hopping_PCCCH_Carriers_t, TIMESLOT_ALLOCATION, 8),
4829CSN_DESCR_END (Hopping_PCCCH_Carriers_t)
4830
4831static const
4832CSN_DESCR_BEGIN(HoppingPCCCH_t)
4833 M_UINT(HoppingPCCCH_t, MA_NUMBER, 4),
Pau Espin Pedrol81b40cb2020-03-23 15:23:51 +01004834 M_REC_TARRAY (HoppingPCCCH_t, Carriers, Hopping_PCCCH_Carriers_t, Count_Carriers),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004835CSN_DESCR_END (HoppingPCCCH_t)
4836
4837static const
4838CSN_DESCR_BEGIN(PCCCH_Description_t)
4839 M_UINT(PCCCH_Description_t, TSC, 3),
4840 M_UNION (PCCCH_Description_t, 2),
4841 M_TYPE (PCCCH_Description_t, u.NonHopping, NonHoppingPCCCH_t),
4842 M_TYPE (PCCCH_Description_t, u.Hopping, HoppingPCCCH_t),
4843CSN_DESCR_END (PCCCH_Description_t)
4844
4845static const
4846CSN_DESCR_BEGIN(PSI2_t)
4847 M_UINT (PSI2_t, MESSAGE_TYPE, 6),
4848 M_UINT (PSI2_t, PAGE_MODE, 2),
4849
4850 M_UINT (PSI2_t, CHANGE_MARK, 2),
4851 M_UINT (PSI2_t, INDEX, 3),
4852 M_UINT (PSI2_t, COUNT, 3),
4853
4854 M_NEXT_EXIST (PSI2_t, Exist_Cell_Identification, 1),
4855 M_TYPE (PSI2_t, Cell_Identification, Cell_Identification_t),
4856
4857 M_NEXT_EXIST (PSI2_t, Exist_Non_GPRS_Cell_Options, 1),
4858 M_TYPE (PSI2_t, Non_GPRS_Cell_Options, Non_GPRS_Cell_Options_t),
4859
Pau Espin Pedrol81b40cb2020-03-23 15:23:51 +01004860 M_REC_TARRAY (PSI2_t, Reference_Frequency, Reference_Frequency_t, Count_Reference_Frequency),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004861 M_TYPE (PSI2_t, Cell_Allocation, Cell_Allocation_t),
Pau Espin Pedrol81b40cb2020-03-23 15:23:51 +01004862 M_REC_TARRAY (PSI2_t, GPRS_MA, PSI2_MA_t, Count_GPRS_MA),
4863 M_REC_TARRAY (PSI2_t, PCCCH_Description, PCCCH_Description_t, Count_PCCCH_Description),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04004864 M_PADDING_BITS(PSI2_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004865CSN_DESCR_END (PSI2_t)
4866/*< End Packet System Information Type 2 message content >*/
4867
4868
4869
4870/*< Packet System Information Type 3 message content >*/
4871static const
4872CSN_DESCR_BEGIN(Serving_Cell_params_t)
Anders Broman8ea3cbe2020-01-28 17:36:33 +01004873 M_UINT (Serving_Cell_params_t, CELL_BAR_ACCESS_2, 1),
4874 M_UINT (Serving_Cell_params_t, EXC_ACC, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004875 M_UINT (Serving_Cell_params_t, GPRS_RXLEV_ACCESS_MIN, 6),
4876 M_UINT (Serving_Cell_params_t, GPRS_MS_TXPWR_MAX_CCH, 5),
4877 M_NEXT_EXIST (Serving_Cell_params_t, Exist_HCS, 1),
4878 M_TYPE (Serving_Cell_params_t, HCS, HCS_t),
4879 M_UINT (Serving_Cell_params_t, MULTIBAND_REPORTING, 2),
4880CSN_DESCR_END (Serving_Cell_params_t)
4881
4882
4883static const
4884CSN_DESCR_BEGIN(Gen_Cell_Sel_t)
4885 M_UINT (Gen_Cell_Sel_t, GPRS_CELL_RESELECT_HYSTERESIS, 3),
Anders Broman8ea3cbe2020-01-28 17:36:33 +01004886 M_UINT (Gen_Cell_Sel_t, C31_HYST, 1),
4887 M_UINT (Gen_Cell_Sel_t, C32_QUAL, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004888 M_FIXED (Gen_Cell_Sel_t, 1, 0x01),
Pau Espin Pedrol034e32f2020-01-28 17:14:26 +01004889
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004890 M_NEXT_EXIST (Gen_Cell_Sel_t, Exist_T_RESEL, 1),
4891 M_UINT (Gen_Cell_Sel_t, T_RESEL, 3),
4892
4893 M_NEXT_EXIST (Gen_Cell_Sel_t, Exist_RA_RESELECT_HYSTERESIS, 1),
4894 M_UINT (Gen_Cell_Sel_t, RA_RESELECT_HYSTERESIS, 3),
4895CSN_DESCR_END (Gen_Cell_Sel_t)
4896
4897
4898static const
4899CSN_DESCR_BEGIN(COMPACT_Cell_Sel_t)
4900 M_UINT (COMPACT_Cell_Sel_t, bsic, 6),
Anders Broman8ea3cbe2020-01-28 17:36:33 +01004901 M_UINT (COMPACT_Cell_Sel_t, CELL_BAR_ACCESS_2, 1),
4902 M_UINT (COMPACT_Cell_Sel_t, EXC_ACC, 1),
4903 M_UINT (COMPACT_Cell_Sel_t, SAME_RA_AS_SERVING_CELL, 1),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004904 M_NEXT_EXIST (COMPACT_Cell_Sel_t, Exist_GPRS_RXLEV_ACCESS_MIN, 2),
4905 M_UINT (COMPACT_Cell_Sel_t, GPRS_RXLEV_ACCESS_MIN, 6),
4906 M_UINT (COMPACT_Cell_Sel_t, GPRS_MS_TXPWR_MAX_CCH, 5),
4907 M_NEXT_EXIST (COMPACT_Cell_Sel_t, Exist_GPRS_TEMPORARY_OFFSET, 2),
4908 M_UINT (COMPACT_Cell_Sel_t, GPRS_TEMPORARY_OFFSET, 3),
4909 M_UINT (COMPACT_Cell_Sel_t, GPRS_PENALTY_TIME, 5),
4910 M_NEXT_EXIST (COMPACT_Cell_Sel_t, Exist_GPRS_RESELECT_OFFSET, 1),
4911 M_UINT (COMPACT_Cell_Sel_t, GPRS_RESELECT_OFFSET, 5),
4912 M_NEXT_EXIST (COMPACT_Cell_Sel_t, Exist_Hcs_Parm, 1),
4913 M_TYPE (COMPACT_Cell_Sel_t, HCS_Param, HCS_t),
4914 M_NEXT_EXIST (COMPACT_Cell_Sel_t, Exist_TIME_GROUP, 1),
4915 M_UINT (COMPACT_Cell_Sel_t, TIME_GROUP, 2),
4916 M_NEXT_EXIST (COMPACT_Cell_Sel_t, Exist_GUAR_CONSTANT_PWR_BLKS, 1),
4917 M_UINT (COMPACT_Cell_Sel_t, GUAR_CONSTANT_PWR_BLKS, 2),
4918CSN_DESCR_END (COMPACT_Cell_Sel_t)
4919
4920static const
4921CSN_DESCR_BEGIN(COMPACT_Neighbour_Cell_Param_Remaining_t)
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004922 M_VAR_BITMAP (COMPACT_Neighbour_Cell_Param_Remaining_t, FREQUENCY_DIFF, FREQ_DIFF_LENGTH, 0),
4923 M_TYPE (COMPACT_Neighbour_Cell_Param_Remaining_t, COMPACT_Cell_Sel_Remain_Cells, COMPACT_Cell_Sel_t),
4924CSN_DESCR_END (COMPACT_Neighbour_Cell_Param_Remaining_t)
4925
Pau Espin Pedrolf3ac06b2020-03-26 18:13:19 +01004926CSN_CallBackStatus_t callback_init_COMP_Ncell_Param_FREQUENCY_DIFF(struct bitvec *vector, unsigned *readIndex, void* param1, void* param2)
4927{
4928 guint i;
4929 guint8 freq_diff_len = *(guint8*)param1;
4930 COMPACT_Neighbour_Cell_Param_Remaining_t *pCom_NCell_Param_rem = (COMPACT_Neighbour_Cell_Param_Remaining_t*)param2;
4931
4932 for( i=0; i<16; i++, pCom_NCell_Param_rem++ )
4933 {
4934 pCom_NCell_Param_rem->FREQ_DIFF_LENGTH = freq_diff_len;
4935 }
4936
4937 return 0;
4938}
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004939
4940static const
4941CSN_DESCR_BEGIN(COMPACT_Neighbour_Cell_Param_t)
4942 M_UINT (COMPACT_Neighbour_Cell_Param_t, START_FREQUENCY, 10),
4943 M_TYPE (COMPACT_Neighbour_Cell_Param_t, COMPACT_Cell_Sel, COMPACT_Cell_Sel_t),
4944 M_UINT (COMPACT_Neighbour_Cell_Param_t, NR_OF_REMAINING_CELLS, 4),
4945 M_UINT_OFFSET(COMPACT_Neighbour_Cell_Param_t, FREQ_DIFF_LENGTH, 3, 1),
Pau Espin Pedrolf3ac06b2020-03-26 18:13:19 +01004946 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 +03004947 M_VAR_TARRAY (COMPACT_Neighbour_Cell_Param_t, COMPACT_Neighbour_Cell_Param_Remaining, COMPACT_Neighbour_Cell_Param_Remaining_t, NR_OF_REMAINING_CELLS),
4948CSN_DESCR_END (COMPACT_Neighbour_Cell_Param_t)
4949
4950
4951static const
4952CSN_DESCR_BEGIN(COMPACT_Info_t)
4953 M_TYPE (COMPACT_Info_t, Cell_Identification, Cell_Identification_t),
4954 M_REC_TARRAY (COMPACT_Info_t, COMPACT_Neighbour_Cell_Param, COMPACT_Neighbour_Cell_Param_t, COMPACT_Neighbour_Cell_Param_Count),
4955CSN_DESCR_END (COMPACT_Info_t)
4956
4957
4958static const
4959CSN_DESCR_BEGIN(PSI3_AdditionR4_t)
4960 M_NEXT_EXIST (PSI3_AdditionR4_t, Exist_CCN_Support_Desc, 1),
4961 M_TYPE (PSI3_AdditionR4_t, CCN_Support_Desc, CCN_Support_Description_t),
4962CSN_DESCR_END (PSI3_AdditionR4_t)
4963
4964
4965static const
4966CSN_DESCR_BEGIN(PSI3_AdditionR99_t)
4967 M_FIXED (PSI3_AdditionR99_t, 2, 0x00),
4968 M_NEXT_EXIST (PSI3_AdditionR99_t, Exist_COMPACT_Info, 1),
4969 M_TYPE (PSI3_AdditionR99_t, COMPACT_Info, COMPACT_Info_t),
4970 M_FIXED (PSI3_AdditionR99_t, 1, 0x00),
4971 M_NEXT_EXIST (PSI3_AdditionR99_t, Exist_AdditionR4, 1),
4972 M_TYPE (PSI3_AdditionR99_t, AdditionR4, PSI3_AdditionR4_t),
4973CSN_DESCR_END (PSI3_AdditionR99_t)
4974
4975
4976static const
4977CSN_DESCR_BEGIN(PSI3_AdditionR98_t)
4978 M_TYPE (PSI3_AdditionR98_t, Scell_LSA_ID_Info, LSA_ID_Info_t),
4979
4980 M_NEXT_EXIST (PSI3_AdditionR98_t, Exist_LSA_Parameters, 1),
4981 M_TYPE (PSI3_AdditionR98_t, LSA_Parameters, LSA_Parameters_t),
4982
4983 M_NEXT_EXIST (PSI3_AdditionR98_t, Exist_AdditionR99, 1),
4984 M_TYPE (PSI3_AdditionR98_t, AdditionR99, PSI3_AdditionR99_t),
4985CSN_DESCR_END (PSI3_AdditionR98_t)
4986
4987
4988static const
4989CSN_DESCR_BEGIN(PSI3_t)
4990 M_UINT (PSI3_t, MESSAGE_TYPE, 6),
4991 M_UINT (PSI3_t, PAGE_MODE, 2),
4992 M_UINT (PSI3_t, CHANGE_MARK, 2),
4993 M_UINT (PSI3_t, BIS_COUNT, 4),
4994 M_TYPE (PSI3_t, Serving_Cell_params, Serving_Cell_params_t),
4995 M_TYPE (PSI3_t, General_Cell_Selection, Gen_Cell_Sel_t),
4996 M_TYPE (PSI3_t, NeighbourCellList, NeighbourCellList_t),
Pau Espin Pedrol034e32f2020-01-28 17:14:26 +01004997
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03004998 M_NEXT_EXIST (PSI3_t, Exist_AdditionR98, 1),
4999 M_TYPE (PSI3_t, AdditionR98, PSI3_AdditionR98_t),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04005000
5001 M_PADDING_BITS(PSI3_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005002CSN_DESCR_END (PSI3_t)
5003/*< End Packet System Information Type 3 message content >*/
5004
5005
5006/*< Packet System Information Type 5 message content >*/
5007static const
5008CSN_DESCR_BEGIN(MeasurementParams_t)
5009 M_NEXT_EXIST (MeasurementParams_t, Exist_MULTI_BAND_REPORTING, 1),
5010 M_UINT (MeasurementParams_t, MULTI_BAND_REPORTING, 2),
5011
5012 M_NEXT_EXIST (MeasurementParams_t, Exist_SERVING_BAND_REPORTING, 1),
5013 M_UINT (MeasurementParams_t, SERVING_BAND_REPORTING, 2),
5014
5015 M_NEXT_EXIST (MeasurementParams_t, Exist_SCALE_ORD, 1),
5016 M_UINT (MeasurementParams_t, SCALE_ORD, 2),
5017
5018 M_NEXT_EXIST (MeasurementParams_t, Exist_OffsetThreshold900, 1),
5019 M_TYPE (MeasurementParams_t, OffsetThreshold900, OffsetThreshold_t),
5020
5021 M_NEXT_EXIST (MeasurementParams_t, Exist_OffsetThreshold1800, 1),
5022 M_TYPE (MeasurementParams_t, OffsetThreshold1800, OffsetThreshold_t),
5023
5024 M_NEXT_EXIST (MeasurementParams_t, Exist_OffsetThreshold400, 1),
5025 M_TYPE (MeasurementParams_t, OffsetThreshold400, OffsetThreshold_t),
5026
5027 M_NEXT_EXIST (MeasurementParams_t, Exist_OffsetThreshold1900, 1),
5028 M_TYPE (MeasurementParams_t, OffsetThreshold1900, OffsetThreshold_t),
5029
5030 M_NEXT_EXIST (MeasurementParams_t, Exist_OffsetThreshold850, 1),
5031 M_TYPE (MeasurementParams_t, OffsetThreshold850, OffsetThreshold_t),
5032CSN_DESCR_END (MeasurementParams_t)
5033
5034static const
5035CSN_DESCR_BEGIN(GPRSMeasurementParams3G_PSI5_t)
5036 M_NEXT_EXIST (GPRSMeasurementParams3G_PSI5_t, existRepParamsFDD, 2),
5037 M_UINT (GPRSMeasurementParams3G_PSI5_t, RepQuantFDD, 1),
5038 M_UINT (GPRSMeasurementParams3G_PSI5_t, MultiratReportingFDD, 2),
Pau Espin Pedrol034e32f2020-01-28 17:14:26 +01005039
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005040 M_NEXT_EXIST (GPRSMeasurementParams3G_PSI5_t, existReportingParamsFDD, 2),
5041 M_UINT (GPRSMeasurementParams3G_PSI5_t, ReportingOffsetFDD, 3),
5042 M_UINT (GPRSMeasurementParams3G_PSI5_t, ReportingThresholdFDD, 3),
Pau Espin Pedrol034e32f2020-01-28 17:14:26 +01005043
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005044 M_NEXT_EXIST (GPRSMeasurementParams3G_PSI5_t, existMultiratReportingTDD, 1),
5045 M_UINT (GPRSMeasurementParams3G_PSI5_t, MultiratReportingTDD, 2),
Pau Espin Pedrol034e32f2020-01-28 17:14:26 +01005046
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005047 M_NEXT_EXIST (GPRSMeasurementParams3G_PSI5_t, existOffsetThresholdTDD, 2),
5048 M_UINT (GPRSMeasurementParams3G_PSI5_t, ReportingOffsetTDD, 3),
5049 M_UINT (GPRSMeasurementParams3G_PSI5_t, ReportingThresholdTDD, 3),
5050CSN_DESCR_END (GPRSMeasurementParams3G_PSI5_t)
5051
5052static const
5053CSN_DESCR_BEGIN(ENH_Reporting_Parameters_t)
5054 M_UINT (ENH_Reporting_Parameters_t, REPORT_TYPE, 1),
5055 M_UINT (ENH_Reporting_Parameters_t, REPORTING_RATE, 1),
5056 M_UINT (ENH_Reporting_Parameters_t, INVALID_BSIC_REPORTING, 1),
5057
5058 M_NEXT_EXIST (ENH_Reporting_Parameters_t, Exist_NCC_PERMITTED, 1),
5059 M_UINT (ENH_Reporting_Parameters_t, NCC_PERMITTED, 8),
Pau Espin Pedrol034e32f2020-01-28 17:14:26 +01005060
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005061 M_NEXT_EXIST (ENH_Reporting_Parameters_t, Exist_GPRSMeasurementParams, 1),
5062 M_TYPE (ENH_Reporting_Parameters_t, GPRSMeasurementParams, MeasurementParams_t),
Pau Espin Pedrol034e32f2020-01-28 17:14:26 +01005063
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005064 M_NEXT_EXIST (ENH_Reporting_Parameters_t, Exist_GPRSMeasurementParams3G, 1),
5065 M_TYPE (ENH_Reporting_Parameters_t, GPRSMeasurementParams3G, GPRSMeasurementParams3G_PSI5_t),
5066CSN_DESCR_END (ENH_Reporting_Parameters_t)
5067
5068static const
5069CSN_DESCR_BEGIN(PSI5_AdditionsR7)
5070 M_NEXT_EXIST (PSI5_AdditionsR7, Exist_OffsetThreshold_700, 1),
5071 M_TYPE (PSI5_AdditionsR7, OffsetThreshold_700, OffsetThreshold_t),
5072
5073 M_NEXT_EXIST (PSI5_AdditionsR7, Exist_OffsetThreshold_810, 1),
5074 M_TYPE (PSI5_AdditionsR7, OffsetThreshold_810, OffsetThreshold_t),
5075CSN_DESCR_END (PSI5_AdditionsR7)
5076
5077static const
5078CSN_DESCR_BEGIN(PSI5_AdditionsR5)
5079 M_NEXT_EXIST (PSI5_AdditionsR5, Exist_GPRS_AdditionalMeasurementParams3G, 1),
5080 M_TYPE (PSI5_AdditionsR5, GPRS_AdditionalMeasurementParams3G, GPRS_AdditionalMeasurementParams3G_t),
Pau Espin Pedrol034e32f2020-01-28 17:14:26 +01005081
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005082 M_NEXT_EXIST (PSI5_AdditionsR5, Exist_AdditionsR7, 1),
5083 M_TYPE (PSI5_AdditionsR5, AdditionsR7, PSI5_AdditionsR7),
5084CSN_DESCR_END (PSI5_AdditionsR5)
5085
5086static const
5087CSN_DESCR_BEGIN(PSI5_AdditionsR99)
5088 M_NEXT_EXIST (PSI5_AdditionsR99, Exist_ENH_Reporting_Param, 1),
5089 M_TYPE (PSI5_AdditionsR99, ENH_Reporting_Param, ENH_Reporting_Parameters_t),
5090
5091 M_NEXT_EXIST (PSI5_AdditionsR99, Exist_AdditionsR5, 1),
5092 M_TYPE (PSI5_AdditionsR99, AdditionisR5, PSI5_AdditionsR5),
5093CSN_DESCR_END (PSI5_AdditionsR99)
5094
5095static const
5096CSN_DESCR_BEGIN(PSI5_t)
5097 M_UINT (PSI5_t, MESSAGE_TYPE, 6),
5098 M_UINT (PSI5_t, PAGE_MODE, 2),
5099 M_UINT (PSI5_t, CHANGE_MARK, 2),
5100 M_UINT (PSI5_t, INDEX, 3),
5101 M_UINT (PSI5_t, COUNT, 3),
5102
5103 M_NEXT_EXIST (PSI5_t, Eixst_NC_Meas_Param, 1),
5104 M_TYPE (PSI5_t, NC_Meas_Param, NC_Measurement_Parameters_t),
5105
5106 M_FIXED (PSI5_t, 1, 0x00),
5107
5108 M_NEXT_EXIST (PSI5_t, Exist_AdditionsR99, 1),
5109 M_TYPE (PSI5_t, AdditionsR99, PSI5_AdditionsR99),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04005110
5111 M_PADDING_BITS(PSI5_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005112CSN_DESCR_END (PSI5_t)
5113/*< End Packet System Information Type 5 message content >*/
5114
5115
5116/*< Packet System Information Type 13 message content >*/
5117static const
5118CSN_DESCR_BEGIN(PSI13_AdditionsR6)
5119 M_NEXT_EXIST (PSI13_AdditionsR6, Exist_LB_MS_TXPWR_MAX_CCH, 1),
5120 M_UINT (PSI13_AdditionsR6, LB_MS_TXPWR_MAX_CCH, 5),
5121 M_UINT (PSI13_AdditionsR6, SI2n_SUPPORT, 2),
5122CSN_DESCR_END (PSI13_AdditionsR6)
5123
5124static const
5125CSN_DESCR_BEGIN(PSI13_AdditionsR4)
5126 M_UINT (PSI13_AdditionsR4, SI_STATUS_IND, 1),
5127 M_NEXT_EXIST (PSI13_AdditionsR4, Exist_AdditionsR6, 1),
5128 M_TYPE (PSI13_AdditionsR4, AdditionsR6, PSI13_AdditionsR6),
5129CSN_DESCR_END (PSI13_AdditionsR4)
5130
5131static const
5132CSN_DESCR_BEGIN(PSI13_AdditionR99)
5133 M_UINT (PSI13_AdditionR99, SGSNR, 1),
5134 M_NEXT_EXIST (PSI13_AdditionR99, Exist_AdditionsR4, 1),
5135 M_TYPE (PSI13_AdditionR99, AdditionsR4, PSI13_AdditionsR4),
5136CSN_DESCR_END (PSI13_AdditionR99)
5137
5138static const
5139CSN_DESCR_BEGIN(PSI13_t)
5140 M_UINT (PSI13_t, MESSAGE_TYPE, 6),
5141 M_UINT (PSI13_t, PAGE_MODE, 2),
5142 M_UINT (PSI13_t, BCCH_CHANGE_MARK, 3),
5143 M_UINT (PSI13_t, SI_CHANGE_FIELD, 4),
Pau Espin Pedrol034e32f2020-01-28 17:14:26 +01005144
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005145 M_NEXT_EXIST (PSI13_t, Exist_MA, 2),
5146 M_UINT (PSI13_t, SI13_CHANGE_MARK, 2),
5147 M_TYPE (PSI13_t, GPRS_Mobile_Allocation, GPRS_Mobile_Allocation_t),
5148
5149 M_UNION (PSI13_t, 2),
5150 M_TYPE (PSI13_t, u.PBCCH_Not_present, PBCCH_Not_present_t),
5151 M_TYPE (PSI13_t, u.PBCCH_present, PBCCH_present_t),
5152
5153 M_NEXT_EXIST (PSI13_t, Exist_AdditionsR99, 1),
5154 M_TYPE (PSI13_t, AdditionsR99, PSI13_AdditionR99),
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04005155
5156 M_PADDING_BITS(PSI13_t),
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005157CSN_DESCR_END (PSI13_t)
5158/*< End Packet System Information Type 13 message content >*/
5159
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005160/* SI1_RestOctet_t */
5161
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01005162#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005163static const
5164CSN_DESCR_BEGIN (SI1_RestOctet_t)
5165 M_NEXT_EXIST_LH(SI1_RestOctet_t, Exist_NCH_Position, 1),
5166 M_UINT (SI1_RestOctet_t, NCH_Position, 5),
5167
5168 M_UINT_LH (SI1_RestOctet_t, BandIndicator, 1),
5169CSN_DESCR_END (SI1_RestOctet_t)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01005170#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005171
5172/* SI3_Rest_Octet_t */
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01005173#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005174static const
5175CSN_DESCR_BEGIN(Selection_Parameters_t)
5176 M_UINT (Selection_Parameters_t, CBQ, 1),
5177 M_UINT (Selection_Parameters_t, CELL_RESELECT_OFFSET, 6),
5178 M_UINT (Selection_Parameters_t, TEMPORARY_OFFSET, 3),
5179 M_UINT (Selection_Parameters_t, PENALTY_TIME, 5),
5180CSN_DESCR_END (Selection_Parameters_t)
5181
5182static const
5183CSN_DESCR_BEGIN (SI3_Rest_Octet_t)
5184 M_NEXT_EXIST_LH(SI3_Rest_Octet_t, Exist_Selection_Parameters, 1),
5185 M_TYPE (SI3_Rest_Octet_t, Selection_Parameters, Selection_Parameters_t),
5186
5187 M_NEXT_EXIST_LH(SI3_Rest_Octet_t, Exist_Power_Offset, 1),
5188 M_UINT (SI3_Rest_Octet_t, Power_Offset, 2),
5189
5190 M_UINT_LH (SI3_Rest_Octet_t, System_Information_2ter_Indicator, 1),
5191 M_UINT_LH (SI3_Rest_Octet_t, Early_Classmark_Sending_Control, 1),
5192
5193 M_NEXT_EXIST_LH(SI3_Rest_Octet_t, Exist_WHERE, 1),
5194 M_UINT (SI3_Rest_Octet_t, WHERE, 3),
5195
5196 M_NEXT_EXIST_LH(SI3_Rest_Octet_t, Exist_GPRS_Indicator, 2),
5197 M_UINT (SI3_Rest_Octet_t, RA_COLOUR, 3),
5198 M_UINT (SI3_Rest_Octet_t, SI13_POSITION, 1),
5199
5200 M_UINT_LH (SI3_Rest_Octet_t, ECS_Restriction3G, 1),
5201
5202 M_NEXT_EXIST_LH(SI3_Rest_Octet_t, ExistSI2quaterIndicator, 1),
5203 M_UINT (SI3_Rest_Octet_t, SI2quaterIndicator, 1),
5204CSN_DESCR_END (SI3_Rest_Octet_t)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01005205#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005206
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01005207#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005208static const
5209CSN_DESCR_BEGIN (SI4_Rest_Octet_t)
5210 M_NEXT_EXIST_LH(SI4_Rest_Octet_t, Exist_Selection_Parameters, 1),
5211 M_TYPE (SI4_Rest_Octet_t, Selection_Parameters, Selection_Parameters_t),
5212
5213 M_NEXT_EXIST_LH(SI4_Rest_Octet_t, Exist_Power_Offset, 1),
5214 M_UINT (SI4_Rest_Octet_t, Power_Offset, 2),
5215
5216 M_NEXT_EXIST_LH(SI4_Rest_Octet_t, Exist_GPRS_Indicator, 2),
5217 M_UINT (SI4_Rest_Octet_t, RA_COLOUR, 3),
5218 M_UINT (SI4_Rest_Octet_t, SI13_POSITION, 1),
5219CSN_DESCR_END (SI4_Rest_Octet_t)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01005220#endif
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005221
5222/* SI6_RestOctet_t */
5223
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01005224#if 0
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005225static const
5226CSN_DESCR_BEGIN(PCH_and_NCH_Info_t)
5227 M_UINT (PCH_and_NCH_Info_t, PagingChannelRestructuring, 1),
5228 M_UINT (PCH_and_NCH_Info_t, NLN_SACCH, 2),
5229
5230 M_NEXT_EXIST (PCH_and_NCH_Info_t, Exist_CallPriority, 1),
5231 M_UINT (PCH_and_NCH_Info_t, CallPriority, 3),
5232
5233 M_UINT (PCH_and_NCH_Info_t, NLN_Status, 1),
5234CSN_DESCR_END (PCH_and_NCH_Info_t)
5235
5236static const
5237CSN_DESCR_BEGIN (SI6_RestOctet_t)
5238 M_NEXT_EXIST_LH(SI6_RestOctet_t, Exist_PCH_and_NCH_Info, 1),
5239 M_TYPE (SI6_RestOctet_t, PCH_and_NCH_Info, PCH_and_NCH_Info_t),
5240
5241 M_NEXT_EXIST_LH(SI6_RestOctet_t, Exist_VBS_VGCS_Options, 1),
5242 M_UINT (SI6_RestOctet_t, VBS_VGCS_Options, 2),
5243
5244 M_NEXT_EXIST_LH(SI6_RestOctet_t, Exist_DTM_Support, 2),
5245 M_UINT (SI6_RestOctet_t, RAC, 8),
5246 M_UINT (SI6_RestOctet_t, MAX_LAPDm, 3),
5247
5248 M_UINT_LH (SI6_RestOctet_t, BandIndicator, 1),
5249CSN_DESCR_END (SI6_RestOctet_t)
Pau Espin Pedrol799cf822020-03-26 15:31:59 +01005250#endif
Pau Espin Pedrol20848c32020-03-23 17:13:20 +01005251
Vadim Yanitskiya2d972a2020-04-04 03:44:35 +07005252/* EGPRS Packet Channel Request (see 3GPP TS 44.060, table 11.2.5a.2) */
5253static const
5254CSN_DESCR_BEGIN(PacketChannelRequest_MC5P2RB3_t)
5255 M_UINT (PacketChannelRequest_MC5P2RB3_t, MultislotClass, 5),
5256 M_UINT (PacketChannelRequest_MC5P2RB3_t, Priority, 2),
5257 M_UINT (PacketChannelRequest_MC5P2RB3_t, RandomBits, 3),
5258CSN_DESCR_END (PacketChannelRequest_MC5P2RB3_t)
5259
5260static const
5261CSN_DESCR_BEGIN(PacketChannelRequest_MCG3P2RB3_t)
5262 M_UINT (PacketChannelRequest_MCG3P2RB3_t, MultislotClassGroup, 3),
5263 M_UINT (PacketChannelRequest_MCG3P2RB3_t, Priority, 2),
5264 M_UINT (PacketChannelRequest_MCG3P2RB3_t, RandomBits, 3),
5265CSN_DESCR_END (PacketChannelRequest_MCG3P2RB3_t)
5266
5267static const
5268CSN_DESCR_BEGIN(PacketChannelRequest_NOB3P2RB3_t)
5269 M_UINT (PacketChannelRequest_NOB3P2RB3_t, NumberOfBlocks, 3),
5270 M_UINT (PacketChannelRequest_NOB3P2RB3_t, Priority, 2),
5271 M_UINT (PacketChannelRequest_NOB3P2RB3_t, RandomBits, 3),
5272CSN_DESCR_END (PacketChannelRequest_NOB3P2RB3_t)
5273
5274static const
5275CSN_DESCR_BEGIN(PacketChannelRequest_P2RB3_t)
5276 M_UINT (PacketChannelRequest_P2RB3_t, Priority, 2),
5277 M_UINT (PacketChannelRequest_P2RB3_t, RandomBits, 3),
5278CSN_DESCR_END (PacketChannelRequest_P2RB3_t)
5279
5280static const
5281CSN_DESCR_BEGIN(PacketChannelRequest_RB5_t)
5282 M_UINT (PacketChannelRequest_RB5_t, RandomBits, 5),
5283CSN_DESCR_END (PacketChannelRequest_RB5_t)
5284
5285static const
5286CSN_ChoiceElement_t EGPRS_PacketChannelRequest_Choice[] =
5287{
5288 {1, 0x00, 0, M_TYPE(EGPRS_PacketChannelRequest_t, Content, PacketChannelRequest_MC5P2RB3_t)},
5289 {3, 0x04, 0, M_TYPE(EGPRS_PacketChannelRequest_t, Content, PacketChannelRequest_NOB3P2RB3_t)},
5290 {3, 0x05, 0, M_TYPE(EGPRS_PacketChannelRequest_t, Content, PacketChannelRequest_MCG3P2RB3_t)},
5291 {6, 0x30, 0, M_TYPE(EGPRS_PacketChannelRequest_t, Content, PacketChannelRequest_P2RB3_t)},
5292 {6, 0x33, 0, M_TYPE(EGPRS_PacketChannelRequest_t, Content, PacketChannelRequest_RB5_t)},
5293 {6, 0x35, 0, M_TYPE(EGPRS_PacketChannelRequest_t, Content, PacketChannelRequest_RB5_t)},
5294 {6, 0x36, 0, M_TYPE(EGPRS_PacketChannelRequest_t, Content, PacketChannelRequest_RB5_t)},
5295 {6, 0x37, 0, M_TYPE(EGPRS_PacketChannelRequest_t, Content, PacketChannelRequest_RB5_t)},
5296 {6, 0x38, 0, M_TYPE(EGPRS_PacketChannelRequest_t, Content, PacketChannelRequest_P2RB3_t)},
5297 {6, 0x39, 0, M_TYPE(EGPRS_PacketChannelRequest_t, Content, PacketChannelRequest_RB5_t)},
5298};
5299
5300CSN_DESCR_BEGIN (EGPRS_PacketChannelRequest_t)
5301 M_CHOICE (EGPRS_PacketChannelRequest_t, Type,
5302 EGPRS_PacketChannelRequest_Choice, ElementsOf(EGPRS_PacketChannelRequest_Choice)),
5303CSN_DESCR_END (EGPRS_PacketChannelRequest_t)
5304
Pau Espin Pedrol20848c32020-03-23 17:13:20 +01005305// ----------------------------------------------------------------------------
5306// osmo-pcu RLCMAC APIs
5307// ----------------------------------------------------------------------------
5308static const struct value_string rlcmac_ul_msg_names[] = {
5309 { MT_PACKET_CELL_CHANGE_FAILURE, "Pkt Cell Change Failure" },
5310 { MT_PACKET_CONTROL_ACK, "Pkt Control Ack" },
5311 { MT_PACKET_DOWNLINK_ACK_NACK , "Pkt DL ACK/NACK" },
5312 { MT_PACKET_UPLINK_DUMMY_CONTROL_BLOCK, "Pkt UL Dummy Ctrl Block" },
5313 { MT_PACKET_MEASUREMENT_REPORT, "Pkt Meas Report" },
5314 { MT_PACKET_RESOURCE_REQUEST, "Pkt Resource Req" },
5315 { MT_PACKET_MOBILE_TBF_STATUS, "Pkt Mobile TBF Status" },
5316 { MT_PACKET_PSI_STATUS, "Pkt PSI Status" },
5317 { MT_EGPRS_PACKET_DOWNLINK_ACK_NACK, "EGPRS Pkt DL ACK/NACK" },
5318 { MT_PACKET_PAUSE, "Pkt Pause" },
5319 { MT_PACKET_ENHANCED_MEASUREMENT_REPORT,"Pkt Enchanced Meas Report" },
5320 { MT_ADDITIONAL_MS_RAC, "Additional MS RAC" },
Pau Espin Pedrol95e4a2b2020-12-11 19:51:38 +01005321 { MT_PACKET_CELL_CHANGE_NOTIFICATION, "Pkt Cell Change Notification" },
Pau Espin Pedrol20848c32020-03-23 17:13:20 +01005322 { MT_PACKET_SI_STATUS, "Pkt SI Status" },
5323 { MT_ENHANCED_MEASUREMENT_REPORT, "Enchanced Meas Report" },
5324 { 0, NULL }
5325};
5326
5327static const struct value_string rlcmac_dl_msg_names[] = {
5328 { MT_PACKET_CELL_CHANGE_ORDER, "Pkt Cell Change Order" },
5329 { MT_PACKET_DOWNLINK_ASSIGNMENT, "Pkt DL ASS" },
5330 { MT_PACKET_MEASUREMENT_ORDER, "Pkt Meas Order" },
5331 { MT_PACKET_POLLING_REQ, "Pkt Polling Req" },
5332 { MT_PACKET_POWER_CONTROL_TIMING_ADVANCE, "Pkt PWR CTRL TA" },
5333 { MT_PACKET_QUEUEING_NOTIFICATION, "Pkt Queueing Notification" },
5334 { MT_PACKET_TIMESLOT_RECONFIGURE, "Pkt TS Reconf" },
5335 { MT_PACKET_TBF_RELEASE, "Pkt TBF Release" },
5336 { MT_PACKET_UPLINK_ACK_NACK, "Pkt UL ACK/NACK" },
5337 { MT_PACKET_UPLINK_ASSIGNMENT, "Pkt UL ASS" },
5338 { MT_PACKET_CELL_CHANGE_CONTINUE, "Pkt Cell Change Continue" },
5339 { MT_PACKET_NEIGHBOUR_CELL_DATA, "Pkt Neightbour Cell Data" },
5340 { MT_PACKET_SERVING_CELL_DATA, "Pkt Serving Cell Data" },
5341 { MT_PACKET_HANDOVER_COMMAND, "Pkt Handover Cmd" },
5342 { MT_PACKET_PHYSICAL_INFORMATION, "Pkt Physical Info" },
5343 { MT_PACKET_ACCESS_REJECT, "Pkt Access Reject" },
5344 { MT_PACKET_PAGING_REQUEST, "Pkt Paging Request" },
5345 { MT_PACKET_PDCH_RELEASE, "Pkt PDCH Release" },
5346 { MT_PACKET_PRACH_PARAMETERS, "Pkt PRACH Params" },
5347 { MT_PACKET_DOWNLINK_DUMMY_CONTROL_BLOCK, "Pkt DL Dummy Ctrl Block" },
5348 { MT_PACKET_SYSTEM_INFO_6, "Pkt SI 6" },
5349 { MT_PACKET_SYSTEM_INFO_1, "Pkt SI 1" },
5350 { MT_PACKET_SYSTEM_INFO_2, "Pkt SI 2" },
5351 { MT_PACKET_SYSTEM_INFO_3, "Pkt SI 3" },
5352 { MT_PACKET_SYSTEM_INFO_3_BIS, "Pkt SI 3bis" },
5353 { MT_PACKET_SYSTEM_INFO_4, "Pkt SI 4" },
5354 { MT_PACKET_SYSTEM_INFO_5, "Pkt SI 5" },
5355 { MT_PACKET_SYSTEM_INFO_13, "Pkt SI 13" },
5356 { MT_PACKET_SYSTEM_INFO_7, "Pkt SI 7" },
5357 { MT_PACKET_SYSTEM_INFO_8, "Pkt SI 8" },
5358 { MT_PACKET_SYSTEM_INFO_14, "Pkt SI 14" },
5359 { MT_PACKET_SYSTEM_INFO_3_TER, "Pkt SI 3ter" },
5360 { MT_PACKET_SYSTEM_INFO_3_QUATER, "Pkt SI 3quater" },
5361 { MT_PACKET_SYSTEM_INFO_15, "Pkt SI 15" },
5362 { 0, NULL }
5363};
5364
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01005365/* Returns 0 on success, negative on error. */
Pau Espin Pedrol007056e2020-03-26 15:03:33 +01005366int decode_gsm_rlcmac_uplink(struct bitvec *vector, RlcMacUplink_t * data)
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005367{
5368 csnStream_t ar;
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01005369 int ret;
Ivan Kluchnikov9b06ff02012-06-15 10:13:30 +04005370 unsigned readIndex = 0;
Alexander Couzensccde5c92017-02-04 03:10:08 +01005371 guint8 payload_type = bitvec_read_field(vector, &readIndex, 2);
Pau Espin Pedrol20848c32020-03-23 17:13:20 +01005372 const char *msg_type_name;
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005373
5374 if (payload_type == PAYLOAD_TYPE_DATA)
5375 {
Pau Espin Pedrolea9de4a2020-02-03 18:57:21 +01005376 LOGP(DRLCMACDATA, LOGL_NOTICE, "Payload Type: DATA (0), not implemented\n");
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01005377 return CSN_ERROR_GENERAL;
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005378 }
5379 else if (payload_type == PAYLOAD_TYPE_RESERVED)
5380 {
Pau Espin Pedrolea9de4a2020-02-03 18:57:21 +01005381 LOGP(DRLCMACDATA, LOGL_NOTICE, "Payload Type: RESERVED (3)\n");
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01005382 return CSN_ERROR_GENERAL;
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005383 }
Pau Espin Pedrolac2b8662020-02-03 18:58:24 +01005384
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04005385 data->NrOfBits = 23 * 8;
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005386 csnStreamInit(&ar, 0, data->NrOfBits);
5387 readIndex += 6;
Alexander Couzensccde5c92017-02-04 03:10:08 +01005388 data->u.MESSAGE_TYPE = bitvec_read_field(vector, &readIndex, 6);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005389 readIndex = 0;
Pau Espin Pedrolac2b8662020-02-03 18:58:24 +01005390
5391 /* recursive csnStreamDecoder call uses LOGPC everywhere, so we need to start the log somewhere... */
Pau Espin Pedrol20848c32020-03-23 17:13:20 +01005392 msg_type_name = get_value_string(rlcmac_ul_msg_names, data->u.MESSAGE_TYPE);
5393 LOGP(DCSN1, LOGL_INFO, "csnStreamDecoder (type: %s (%d)): ",
5394 msg_type_name, data->u.MESSAGE_TYPE);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005395 switch (data->u.MESSAGE_TYPE)
5396 {
5397 case MT_PACKET_CELL_CHANGE_FAILURE:
5398 {
5399 /*
5400 * data is the pointer to the unpack struct that hold the unpack value
5401 * CSNDESCR is an array that holds the different element types
5402 * ar is the csn context holding the bitcount, offset and output
5403 */
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005404 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_Cell_Change_Failure_t), vector, &readIndex, &data->u.Packet_Cell_Change_Failure);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005405 break;
5406 }
5407 case MT_PACKET_CONTROL_ACK:
5408 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005409 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_Control_Acknowledgement_t), vector, &readIndex, &data->u.Packet_Control_Acknowledgement);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005410 break;
5411 }
5412 case MT_PACKET_DOWNLINK_ACK_NACK:
5413 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005414 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_Downlink_Ack_Nack_t), vector, &readIndex, &data->u.Packet_Downlink_Ack_Nack);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005415 break;
5416 }
5417 case MT_PACKET_UPLINK_DUMMY_CONTROL_BLOCK:
5418 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005419 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 +03005420 break;
5421 }
5422 case MT_PACKET_MEASUREMENT_REPORT:
5423 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005424 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_Measurement_Report_t), vector, &readIndex, &data->u.Packet_Measurement_Report);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005425 break;
5426 }
5427 case MT_PACKET_RESOURCE_REQUEST:
5428 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005429 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_Resource_Request_t), vector, &readIndex, &data->u.Packet_Resource_Request);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005430 break;
5431 }
5432
5433 case MT_PACKET_MOBILE_TBF_STATUS:
5434 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005435 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_Mobile_TBF_Status_t), vector, &readIndex, &data->u.Packet_Mobile_TBF_Status);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005436 break;
5437 }
5438 case MT_PACKET_PSI_STATUS:
5439 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005440 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_PSI_Status_t), vector, &readIndex, &data->u.Packet_PSI_Status);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005441 break;
5442 }
5443 case MT_EGPRS_PACKET_DOWNLINK_ACK_NACK:
5444 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005445 ret = csnStreamDecoder(&ar, CSNDESCR(EGPRS_PD_AckNack_t), vector, &readIndex, &data->u.Egprs_Packet_Downlink_Ack_Nack);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005446 break;
5447 }
5448 case MT_PACKET_PAUSE:
5449 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005450 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_Pause_t), vector, &readIndex, &data->u.Packet_Pause);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005451 break;
5452 }
5453 case MT_PACKET_ENHANCED_MEASUREMENT_REPORT:
5454 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005455 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_Enh_Measurement_Report_t), vector, &readIndex, &data->u.Packet_Enh_Measurement_Report);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005456 break;
5457 }
5458 case MT_ADDITIONAL_MS_RAC:
5459 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005460 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 +03005461 break;
5462 }
5463 case MT_PACKET_CELL_CHANGE_NOTIFICATION:
5464 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005465 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_Cell_Change_Notification_t), vector, &readIndex, &data->u.Packet_Cell_Change_Notification);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005466 break;
5467 }
5468 case MT_PACKET_SI_STATUS:
5469 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005470 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_SI_Status_t), vector, &readIndex, &data->u.Packet_SI_Status);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005471 break;
5472 }
5473 default:
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01005474 ret = -1;
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005475 break;
5476 }
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01005477
Pau Espin Pedrolac2b8662020-02-03 18:58:24 +01005478 /* recursive csnStreamDecoder call uses LOGPC everywhere without trailing
5479 newline, so as a caller we are responisble for submitting it */
5480 LOGPC(DCSN1, LOGL_INFO, "\n");
5481
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01005482 if (ret > 0) {
Pau Espin Pedrol20848c32020-03-23 17:13:20 +01005483 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 +01005484 ret = 0;
5485 }
5486
5487 return ret;
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005488}
5489
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01005490/* Returns 0 on success, negative on error. */
Pau Espin Pedrol007056e2020-03-26 15:03:33 +01005491int decode_gsm_rlcmac_downlink(struct bitvec *vector, RlcMacDownlink_t * data)
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005492{
5493 csnStream_t ar;
5494 /* See RLC/MAC downlink control block structure in TS 44.060 / 10.3.1 */
5495 gint bit_offset = 0;
5496 gint bit_length;
Ivan Kluchnikov9b06ff02012-06-15 10:13:30 +04005497 unsigned readIndex = 0;
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01005498 int ret;
Pau Espin Pedrol20848c32020-03-23 17:13:20 +01005499 const char *msg_type_name;
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01005500
Alexander Couzensccde5c92017-02-04 03:10:08 +01005501 data->PAYLOAD_TYPE = bitvec_read_field(vector, &readIndex, 2);
5502 data->RRBP = bitvec_read_field(vector, &readIndex, 2);
5503 data->SP = bitvec_read_field(vector, &readIndex, 1);
5504 data->USF = bitvec_read_field(vector, &readIndex, 3);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005505
5506 if (data->PAYLOAD_TYPE == PAYLOAD_TYPE_DATA)
5507 {
Pau Espin Pedrolea9de4a2020-02-03 18:57:21 +01005508 LOGP(DRLCMACDATA, LOGL_NOTICE, "Payload Type: DATA (0), not implemented\n");
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01005509 return CSN_ERROR_GENERAL;
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005510 }
5511 else if (data->PAYLOAD_TYPE == PAYLOAD_TYPE_RESERVED)
5512 {
Pau Espin Pedrolea9de4a2020-02-03 18:57:21 +01005513 LOGP(DRLCMACDATA, LOGL_NOTICE, "Payload Type: RESERVED (3)\n");
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01005514 return CSN_ERROR_GENERAL;
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005515 }
5516 /* We can decode the message */
5517 else
5518 {
5519 /* First print the message type and create a tree item */
5520 bit_offset = 8;
5521 if (data->PAYLOAD_TYPE == PAYLOAD_TYPE_CTRL_OPT_OCTET)
5522 {
Alexander Couzensccde5c92017-02-04 03:10:08 +01005523 data->RBSN = bitvec_read_field(vector, &readIndex, 1);
5524 data->RTI = bitvec_read_field(vector, &readIndex, 5);
5525 data->FS = bitvec_read_field(vector, &readIndex, 1);
5526 data->AC = bitvec_read_field(vector, &readIndex, 1);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005527 bit_offset += 8;
5528 if (data->AC == 1)
5529 {
Alexander Couzensccde5c92017-02-04 03:10:08 +01005530 data->PR = bitvec_read_field(vector, &readIndex, 2);
5531 data->TFI = bitvec_read_field(vector, &readIndex, 5);
5532 data->D = bitvec_read_field(vector, &readIndex, 1);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005533 bit_offset += 8;
5534 }
5535 if ((data->RBSN == 1) && (data->FS == 0))
5536 {
Alexander Couzensccde5c92017-02-04 03:10:08 +01005537 data->RBSNe = bitvec_read_field(vector, &readIndex, 3);
5538 data->FSe = bitvec_read_field(vector, &readIndex, 1);
5539 data->spare = bitvec_read_field(vector, &readIndex, 4);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005540 bit_offset += 8;
5541 }
5542 }
Alexander Couzensccde5c92017-02-04 03:10:08 +01005543 data->u.MESSAGE_TYPE = bitvec_read_field(vector, &readIndex, 6);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005544 }
5545
5546 /* Initialize the contexts */
5547 bit_length = 23*8 - bit_offset;
5548 data->NrOfBits = bit_length;
5549 readIndex = bit_offset;
5550
5551 csnStreamInit(&ar, bit_offset, bit_length);
5552
Pau Espin Pedrolac2b8662020-02-03 18:58:24 +01005553 /* recursive csnStreamDecoder call uses LOGPC everywhere, so we need to start the log somewhere... */
Pau Espin Pedrol20848c32020-03-23 17:13:20 +01005554 msg_type_name = get_value_string(rlcmac_dl_msg_names, data->u.MESSAGE_TYPE);
5555 LOGP(DCSN1, LOGL_INFO, "csnStreamDecoder (type: %s (%d): ",
5556 msg_type_name, data->u.MESSAGE_TYPE);
Pau Espin Pedrolac2b8662020-02-03 18:58:24 +01005557
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005558 switch (data->u.MESSAGE_TYPE)
5559 {
5560 case MT_PACKET_ACCESS_REJECT:
5561 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005562 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_Access_Reject_t), vector, &readIndex, &data->u.Packet_Access_Reject);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005563 break;
5564 }
5565 case MT_PACKET_CELL_CHANGE_ORDER:
5566 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005567 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_Cell_Change_Order_t), vector, &readIndex, &data->u.Packet_Cell_Change_Order);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005568 break;
5569 }
5570 case MT_PACKET_CELL_CHANGE_CONTINUE:
5571 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005572 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_Cell_Change_Continue_t), vector, &readIndex, &data->u.Packet_Cell_Change_Continue);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005573 break;
5574 }
5575 case MT_PACKET_DOWNLINK_ASSIGNMENT:
5576 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005577 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_Downlink_Assignment_t), vector, &readIndex, &data->u.Packet_Downlink_Assignment);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005578 break;
5579 }
5580 case MT_PACKET_MEASUREMENT_ORDER:
5581 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005582 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_Measurement_Order_t), vector, &readIndex, &data->u.Packet_Measurement_Order);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005583 break;
5584 }
5585 case MT_PACKET_NEIGHBOUR_CELL_DATA:
5586 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005587 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_Neighbour_Cell_Data_t), vector, &readIndex, &data->u.Packet_Neighbour_Cell_Data);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005588 break;
5589 }
5590 case MT_PACKET_SERVING_CELL_DATA:
5591 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005592 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_Serving_Cell_Data_t), vector, &readIndex, &data->u.Packet_Serving_Cell_Data);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005593 break;
5594 }
5595 case MT_PACKET_PAGING_REQUEST:
5596 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005597 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_Paging_Request_t), vector, &readIndex, &data->u.Packet_Paging_Request);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005598 break;
5599 }
5600 case MT_PACKET_PDCH_RELEASE:
5601 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005602 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_PDCH_Release_t), vector, &readIndex, &data->u.Packet_PDCH_Release);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005603 break;
5604 }
5605 case MT_PACKET_POLLING_REQ:
5606 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005607 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_Polling_Request_t), vector, &readIndex, &data->u.Packet_Polling_Request);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005608 break;
5609 }
5610 case MT_PACKET_POWER_CONTROL_TIMING_ADVANCE:
5611 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005612 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 +03005613 break;
5614 }
5615 case MT_PACKET_PRACH_PARAMETERS:
5616 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005617 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_PRACH_Parameters_t), vector, &readIndex, &data->u.Packet_PRACH_Parameters);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005618 break;
5619 }
5620 case MT_PACKET_QUEUEING_NOTIFICATION:
5621 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005622 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_Queueing_Notification_t), vector, &readIndex, &data->u.Packet_Queueing_Notification);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005623 break;
5624 }
5625 case MT_PACKET_TIMESLOT_RECONFIGURE:
5626 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005627 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_Timeslot_Reconfigure_t), vector, &readIndex, &data->u.Packet_Timeslot_Reconfigure);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005628 break;
5629 }
5630 case MT_PACKET_TBF_RELEASE:
5631 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005632 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_TBF_Release_t), vector, &readIndex, &data->u.Packet_TBF_Release);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005633 break;
5634 }
5635 case MT_PACKET_UPLINK_ACK_NACK:
5636 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005637 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_Uplink_Ack_Nack_t), vector, &readIndex, &data->u.Packet_Uplink_Ack_Nack);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005638 break;
5639 }
5640 case MT_PACKET_UPLINK_ASSIGNMENT:
5641 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005642 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_Uplink_Assignment_t), vector, &readIndex, &data->u.Packet_Uplink_Assignment);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005643 break;
5644 }
5645 case MT_PACKET_HANDOVER_COMMAND:
5646 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005647 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_Handover_Command_t), vector, &readIndex, &data->u.Packet_Handover_Command);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005648 break;
5649 }
5650 case MT_PACKET_PHYSICAL_INFORMATION:
5651 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005652 ret = csnStreamDecoder(&ar, CSNDESCR(Packet_PhysicalInformation_t), vector, &readIndex, &data->u.Packet_Handover_Command);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005653 break;
5654 }
5655 case MT_PACKET_DOWNLINK_DUMMY_CONTROL_BLOCK:
5656 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005657 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 +03005658 break;
5659 }
5660 case MT_PACKET_SYSTEM_INFO_1:
5661 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005662 ret = csnStreamDecoder(&ar, CSNDESCR(PSI1_t), vector, &readIndex, &data->u.PSI1);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005663 break;
5664 }
5665 case MT_PACKET_SYSTEM_INFO_2:
5666 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005667 ret = csnStreamDecoder(&ar, CSNDESCR(PSI2_t), vector, &readIndex, &data->u.PSI2);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005668 break;
5669 }
5670 case MT_PACKET_SYSTEM_INFO_3:
5671 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005672 ret = csnStreamDecoder(&ar, CSNDESCR(PSI3_t), vector, &readIndex, &data->u.PSI3);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005673 break;
5674 }
5675 case MT_PACKET_SYSTEM_INFO_5:
5676 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005677 ret = csnStreamDecoder(&ar, CSNDESCR(PSI5_t), vector, &readIndex, &data->u.PSI5);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005678 break;
5679 }
5680 case MT_PACKET_SYSTEM_INFO_13:
5681 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005682 ret = csnStreamDecoder(&ar, CSNDESCR(PSI13_t), vector, &readIndex, &data->u.PSI13);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005683 break;
5684 }
5685 default:
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01005686 ret = CSN_ERROR_GENERAL;
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005687 break;
5688 }
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01005689
Pau Espin Pedrolac2b8662020-02-03 18:58:24 +01005690 /* recursive csnStreamDecoder call uses LOGPC everywhere without trailing
5691 newline, so as a caller we are responisble for submitting it */
5692 LOGPC(DCSN1, LOGL_INFO, "\n");
5693
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01005694 if (ret > 0) {
Pau Espin Pedrol20848c32020-03-23 17:13:20 +01005695 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 +01005696 ret = 0;
5697 }
5698
5699 return ret;
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005700}
5701
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01005702/* Returns 0 on success, negative on error. */
Pau Espin Pedrol007056e2020-03-26 15:03:33 +01005703int encode_gsm_rlcmac_uplink(struct bitvec *vector, RlcMacUplink_t * data)
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005704{
5705 csnStream_t ar;
Ivan Kluchnikov9b06ff02012-06-15 10:13:30 +04005706 unsigned writeIndex = 0;
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01005707 int ret;
Pau Espin Pedrol20848c32020-03-23 17:13:20 +01005708 const char *msg_type_name;
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01005709
Ivan Kluchnikov701d9f82012-10-10 19:43:37 +04005710 data->NrOfBits = 23 * 8;
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005711 csnStreamInit(&ar, 0, data->NrOfBits);
5712 writeIndex = 0;
Pau Espin Pedrolac2b8662020-02-03 18:58:24 +01005713
5714 /* recursive csnStreamEncoder call uses LOGPC everywhere, so we need to start the log somewhere... */
Pau Espin Pedrol20848c32020-03-23 17:13:20 +01005715 msg_type_name = get_value_string(rlcmac_ul_msg_names, data->u.MESSAGE_TYPE);
5716 LOGP(DCSN1, LOGL_INFO, "csnStreamEncoder (type: %s (%d)): ",
5717 msg_type_name, data->u.MESSAGE_TYPE);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005718 switch (data->u.MESSAGE_TYPE)
5719 {
5720 case MT_PACKET_CELL_CHANGE_FAILURE:
5721 {
5722 /*
5723 * data is the pointer to the unpack struct that hold the unpack value
5724 * CSNDESCR is an array that holds the different element types
5725 * ar is the csn context holding the bitcount, offset and output
5726 */
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005727 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_Cell_Change_Failure_t), vector, &writeIndex, &data->u.Packet_Cell_Change_Failure);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005728 break;
5729 }
5730 case MT_PACKET_CONTROL_ACK:
5731 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005732 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_Control_Acknowledgement_t), vector, &writeIndex, &data->u.Packet_Control_Acknowledgement);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005733 break;
5734 }
5735 case MT_PACKET_DOWNLINK_ACK_NACK:
5736 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005737 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_Downlink_Ack_Nack_t), vector, &writeIndex, &data->u.Packet_Downlink_Ack_Nack);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005738 break;
5739 }
5740 case MT_PACKET_UPLINK_DUMMY_CONTROL_BLOCK:
5741 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005742 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 +03005743 break;
5744 }
5745 case MT_PACKET_MEASUREMENT_REPORT:
5746 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005747 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_Measurement_Report_t), vector, &writeIndex, &data->u.Packet_Measurement_Report);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005748 break;
5749 }
5750 case MT_PACKET_RESOURCE_REQUEST:
5751 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005752 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_Resource_Request_t), vector, &writeIndex, &data->u.Packet_Resource_Request);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005753 break;
5754 }
5755
5756 case MT_PACKET_MOBILE_TBF_STATUS:
5757 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005758 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_Mobile_TBF_Status_t), vector, &writeIndex, &data->u.Packet_Mobile_TBF_Status);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005759 break;
5760 }
5761 case MT_PACKET_PSI_STATUS:
5762 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005763 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_PSI_Status_t), vector, &writeIndex, &data->u.Packet_PSI_Status);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005764 break;
5765 }
5766 case MT_EGPRS_PACKET_DOWNLINK_ACK_NACK:
5767 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005768 ret = csnStreamEncoder(&ar, CSNDESCR(EGPRS_PD_AckNack_t), vector, &writeIndex, &data->u.Egprs_Packet_Downlink_Ack_Nack);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005769 break;
5770 }
5771 case MT_PACKET_PAUSE:
5772 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005773 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_Pause_t), vector, &writeIndex, &data->u.Packet_Pause);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005774 break;
5775 }
5776 case MT_PACKET_ENHANCED_MEASUREMENT_REPORT:
5777 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005778 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_Enh_Measurement_Report_t), vector, &writeIndex, &data->u.Packet_Enh_Measurement_Report);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005779 break;
5780 }
5781 case MT_ADDITIONAL_MS_RAC:
5782 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005783 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 +03005784 break;
5785 }
5786 case MT_PACKET_CELL_CHANGE_NOTIFICATION:
5787 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005788 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_Cell_Change_Notification_t), vector, &writeIndex, &data->u.Packet_Cell_Change_Notification);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005789 break;
5790 }
5791 case MT_PACKET_SI_STATUS:
5792 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005793 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_SI_Status_t), vector, &writeIndex, &data->u.Packet_SI_Status);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005794 break;
5795 }
5796 default:
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01005797 ret = CSN_ERROR_GENERAL;
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005798 break;
5799 }
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01005800
Pau Espin Pedrolac2b8662020-02-03 18:58:24 +01005801 /* recursive csnStreamDecoder call uses LOGPC everywhere without trailing
5802 newline, so as a caller we are responisble for submitting it */
5803 LOGPC(DCSN1, LOGL_INFO, "\n");
5804
Vadim Yanitskiy773cb742020-03-06 08:26:16 +07005805 if (ret > 0 || ret == CSN_ERROR_NEED_MORE_BITS_TO_UNPACK) {
5806 LOGP(DRLCMACDATA, LOGL_ERROR, "Failed to encode an Uplink block: not enough bits "
5807 "in the output buffer (rc=%d)\n", ret);
5808 ret = CSN_ERROR_NEED_MORE_BITS_TO_UNPACK;
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01005809 }
5810
5811 return ret;
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005812}
5813
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01005814/* Returns 0 on success, negative on error. */
Pau Espin Pedrol007056e2020-03-26 15:03:33 +01005815int encode_gsm_rlcmac_downlink(struct bitvec *vector, RlcMacDownlink_t * data)
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005816{
5817 csnStream_t ar;
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01005818 int ret;
Pau Espin Pedrol20848c32020-03-23 17:13:20 +01005819 const char *msg_type_name;
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005820 /* See RLC/MAC downlink control block structure in TS 44.060 / 10.3.1 */
5821 gint bit_offset = 0;
5822 gint bit_length;
Ivan Kluchnikov9b06ff02012-06-15 10:13:30 +04005823 unsigned writeIndex = 0;
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005824
5825 if (data->PAYLOAD_TYPE == PAYLOAD_TYPE_DATA)
5826 {
Pau Espin Pedrolea9de4a2020-02-03 18:57:21 +01005827 LOGP(DRLCMACDATA, LOGL_NOTICE, "Payload Type: DATA (0), not implemented\n");
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01005828 return CSN_ERROR_GENERAL;
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005829 }
5830 else if (data->PAYLOAD_TYPE == PAYLOAD_TYPE_RESERVED)
5831 {
Pau Espin Pedrolea9de4a2020-02-03 18:57:21 +01005832 LOGP(DRLCMACDATA, LOGL_NOTICE, "Payload Type: RESERVED (3)\n");
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01005833 return CSN_ERROR_GENERAL;
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005834 }
Pau Espin Pedrolabba1022021-02-08 18:35:09 +01005835 /* We can encode the message */
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005836 else
5837 {
5838 /* First print the message type and create a tree item */
Alexander Couzensccde5c92017-02-04 03:10:08 +01005839 bitvec_write_field(vector, &writeIndex, data->PAYLOAD_TYPE, 2);
5840 bitvec_write_field(vector, &writeIndex, data->RRBP, 2);
5841 bitvec_write_field(vector, &writeIndex, data->SP, 1);
5842 bitvec_write_field(vector, &writeIndex, data->USF, 3);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005843 bit_offset = 8;
5844 if (data->PAYLOAD_TYPE == PAYLOAD_TYPE_CTRL_OPT_OCTET)
5845 {
Alexander Couzensccde5c92017-02-04 03:10:08 +01005846 bitvec_write_field(vector, &writeIndex, data->RBSN, 1);
5847 bitvec_write_field(vector, &writeIndex, data->RTI, 5);
5848 bitvec_write_field(vector, &writeIndex, data->FS, 1);
5849 bitvec_write_field(vector, &writeIndex, data->AC, 1);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005850 bit_offset += 8;
5851 if (data->AC == 1)
5852 {
Alexander Couzensccde5c92017-02-04 03:10:08 +01005853 bitvec_write_field(vector, &writeIndex, data->PR, 2);
5854 bitvec_write_field(vector, &writeIndex, data->TFI, 5);
5855 bitvec_write_field(vector, &writeIndex, data->D, 1);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005856 bit_offset += 8;
5857 }
5858 if ((data->RBSN == 1) && (data->FS == 0))
5859 {
Alexander Couzensccde5c92017-02-04 03:10:08 +01005860 bitvec_write_field(vector, &writeIndex, data->RBSNe, 3);
5861 bitvec_write_field(vector, &writeIndex, data->FSe, 1);
5862 bitvec_write_field(vector, &writeIndex, data->spare, 4);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005863 bit_offset += 8;
5864 }
5865 }
5866 }
5867
5868 /* Initialize the contexts */
5869 bit_length = 23*8 - bit_offset;
5870 data->NrOfBits = bit_length;
5871
5872 csnStreamInit(&ar, bit_offset, bit_length);
5873
Pau Espin Pedrolac2b8662020-02-03 18:58:24 +01005874
5875 /* recursive csnStreamEncoder call uses LOGPC everywhere, so we need to start the log somewhere... */
Pau Espin Pedrol20848c32020-03-23 17:13:20 +01005876 msg_type_name = get_value_string(rlcmac_dl_msg_names, data->u.MESSAGE_TYPE);
5877 LOGP(DCSN1, LOGL_INFO, "csnStreamEncoder (type: %s (%d)): ",
5878 msg_type_name, data->u.MESSAGE_TYPE);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005879 switch (data->u.MESSAGE_TYPE)
5880 {
5881 case MT_PACKET_ACCESS_REJECT:
5882 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005883 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_Access_Reject_t), vector, &writeIndex, &data->u.Packet_Access_Reject);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005884 break;
5885 }
5886 case MT_PACKET_CELL_CHANGE_ORDER:
5887 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005888 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_Cell_Change_Order_t), vector, &writeIndex, &data->u.Packet_Cell_Change_Order);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005889 break;
5890 }
5891 case MT_PACKET_CELL_CHANGE_CONTINUE:
5892 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005893 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_Cell_Change_Continue_t), vector, &writeIndex, &data->u.Packet_Cell_Change_Continue);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005894 break;
5895 }
5896 case MT_PACKET_DOWNLINK_ASSIGNMENT:
5897 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005898 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_Downlink_Assignment_t), vector, &writeIndex, &data->u.Packet_Downlink_Assignment);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005899 break;
5900 }
5901 case MT_PACKET_MEASUREMENT_ORDER:
5902 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005903 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_Measurement_Order_t), vector, &writeIndex, &data->u.Packet_Measurement_Order);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005904 break;
5905 }
5906 case MT_PACKET_NEIGHBOUR_CELL_DATA:
5907 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005908 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_Neighbour_Cell_Data_t), vector, &writeIndex, &data->u.Packet_Neighbour_Cell_Data);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005909 break;
5910 }
5911 case MT_PACKET_SERVING_CELL_DATA:
5912 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005913 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_Serving_Cell_Data_t), vector, &writeIndex, &data->u.Packet_Serving_Cell_Data);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005914 break;
5915 }
5916 case MT_PACKET_PAGING_REQUEST:
5917 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005918 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_Paging_Request_t), vector, &writeIndex, &data->u.Packet_Paging_Request);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005919 break;
5920 }
5921 case MT_PACKET_PDCH_RELEASE:
5922 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005923 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_PDCH_Release_t), vector, &writeIndex, &data->u.Packet_PDCH_Release);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005924 break;
5925 }
5926 case MT_PACKET_POLLING_REQ:
5927 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005928 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_Polling_Request_t), vector, &writeIndex, &data->u.Packet_Polling_Request);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005929 break;
5930 }
5931 case MT_PACKET_POWER_CONTROL_TIMING_ADVANCE:
5932 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005933 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 +03005934 break;
5935 }
5936 case MT_PACKET_PRACH_PARAMETERS:
5937 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005938 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_PRACH_Parameters_t), vector, &writeIndex, &data->u.Packet_PRACH_Parameters);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005939 break;
5940 }
5941 case MT_PACKET_QUEUEING_NOTIFICATION:
5942 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005943 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_Queueing_Notification_t), vector, &writeIndex, &data->u.Packet_Queueing_Notification);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005944 break;
5945 }
5946 case MT_PACKET_TIMESLOT_RECONFIGURE:
5947 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005948 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_Timeslot_Reconfigure_t), vector, &writeIndex, &data->u.Packet_Timeslot_Reconfigure);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005949 break;
5950 }
5951 case MT_PACKET_TBF_RELEASE:
5952 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005953 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_TBF_Release_t), vector, &writeIndex, &data->u.Packet_TBF_Release);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005954 break;
5955 }
5956 case MT_PACKET_UPLINK_ACK_NACK:
5957 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005958 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_Uplink_Ack_Nack_t), vector, &writeIndex, &data->u.Packet_Uplink_Ack_Nack);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005959 break;
5960 }
5961 case MT_PACKET_UPLINK_ASSIGNMENT:
5962 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005963 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_Uplink_Assignment_t), vector, &writeIndex, &data->u.Packet_Uplink_Assignment);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005964 break;
5965 }
5966 case MT_PACKET_HANDOVER_COMMAND:
5967 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005968 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_Handover_Command_t), vector, &writeIndex, &data->u.Packet_Handover_Command);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005969 break;
5970 }
5971 case MT_PACKET_PHYSICAL_INFORMATION:
5972 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005973 ret = csnStreamEncoder(&ar, CSNDESCR(Packet_PhysicalInformation_t), vector, &writeIndex, &data->u.Packet_Handover_Command);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005974 break;
5975 }
5976 case MT_PACKET_DOWNLINK_DUMMY_CONTROL_BLOCK:
5977 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005978 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 +03005979 break;
5980 }
5981 case MT_PACKET_SYSTEM_INFO_1:
5982 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005983 ret = csnStreamEncoder(&ar, CSNDESCR(PSI1_t), vector, &writeIndex, &data->u.PSI1);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005984 break;
5985 }
5986 case MT_PACKET_SYSTEM_INFO_2:
5987 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005988 ret = csnStreamEncoder(&ar, CSNDESCR(PSI2_t), vector, &writeIndex, &data->u.PSI2);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005989 break;
5990 }
5991 case MT_PACKET_SYSTEM_INFO_3:
5992 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005993 ret = csnStreamEncoder(&ar, CSNDESCR(PSI3_t), vector, &writeIndex, &data->u.PSI3);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005994 break;
5995 }
5996 case MT_PACKET_SYSTEM_INFO_5:
5997 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07005998 ret = csnStreamEncoder(&ar, CSNDESCR(PSI5_t), vector, &writeIndex, &data->u.PSI5);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03005999 break;
6000 }
6001 case MT_PACKET_SYSTEM_INFO_13:
6002 {
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07006003 ret = csnStreamEncoder(&ar, CSNDESCR(PSI13_t), vector, &writeIndex, &data->u.PSI13);
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03006004 break;
6005 }
6006 default:
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01006007 ret = -1;
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03006008 break;
6009 }
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01006010
Pau Espin Pedrolac2b8662020-02-03 18:58:24 +01006011 /* recursive csnStreamDecoder call uses LOGPC everywhere without trailing
6012 newline, so as a caller we are responisble for submitting it */
6013 LOGPC(DCSN1, LOGL_INFO, "\n");
6014
Vadim Yanitskiy773cb742020-03-06 08:26:16 +07006015 if (ret > 0 || ret == CSN_ERROR_NEED_MORE_BITS_TO_UNPACK) {
6016 LOGP(DRLCMACDATA, LOGL_ERROR, "Failed to encode a Downlink block: not enough bits "
6017 "in the output buffer (rc=%d)\n", ret);
6018 ret = CSN_ERROR_NEED_MORE_BITS_TO_UNPACK;
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01006019 }
6020
6021 return ret;
Ivan Kluchnikov487a1412011-12-21 13:17:53 +03006022}
Ivan Kluchnikovd5f01332012-02-05 01:41:25 +04006023
Pau Espin Pedrol007056e2020-03-26 15:03:33 +01006024void decode_gsm_rlcmac_uplink_data(struct bitvec *vector, RlcMacUplinkDataBlock_t * data)
Ivan Kluchnikovd5f01332012-02-05 01:41:25 +04006025{
Pau Espin Pedrol24fa2742020-03-26 15:11:59 +01006026 unsigned i;
Ivan Kluchnikov9b06ff02012-06-15 10:13:30 +04006027 unsigned readIndex = 0;
Ivan Kluchnikovd5f01332012-02-05 01:41:25 +04006028 //unsigned dataLen = 0;
Alexander Couzensccde5c92017-02-04 03:10:08 +01006029 guint8 payload_type = bitvec_read_field(vector, &readIndex, 2);
Ivan Kluchnikovd5f01332012-02-05 01:41:25 +04006030 if (payload_type == PAYLOAD_TYPE_DATA)
6031 {
6032 readIndex = 0;
6033 // MAC header
Alexander Couzensccde5c92017-02-04 03:10:08 +01006034 data->PAYLOAD_TYPE = bitvec_read_field(vector, &readIndex, 2);
6035 data->CV = bitvec_read_field(vector, &readIndex, 4);
6036 data->SI = bitvec_read_field(vector, &readIndex, 1);
6037 data->R = bitvec_read_field(vector, &readIndex, 1);
Ivan Kluchnikova9f1ff22012-05-24 22:25:06 +04006038 LOGPC(DRLCMACDATA, LOGL_NOTICE, "PAYLOAD_TYPE = %u ", (unsigned)(data->PAYLOAD_TYPE));
6039 LOGPC(DRLCMACDATA, LOGL_NOTICE, "CV = %u ", (unsigned)(data->CV));
6040 LOGPC(DRLCMACDATA, LOGL_NOTICE, "SI = %u ", (unsigned)(data->SI));
6041 LOGPC(DRLCMACDATA, LOGL_NOTICE, "R = %u ", (unsigned)(data->R));
Ivan Kluchnikovd5f01332012-02-05 01:41:25 +04006042 // Octet 1
Alexander Couzensccde5c92017-02-04 03:10:08 +01006043 data->spare = bitvec_read_field(vector, &readIndex, 1);
6044 data->PI = bitvec_read_field(vector, &readIndex, 1);
6045 data->TFI = bitvec_read_field(vector, &readIndex, 5);
6046 data->TI = bitvec_read_field(vector, &readIndex, 1);
Ivan Kluchnikova9f1ff22012-05-24 22:25:06 +04006047 LOGPC(DRLCMACDATA, LOGL_NOTICE, "spare = %u ", (unsigned)(data->spare));
6048 LOGPC(DRLCMACDATA, LOGL_NOTICE, "PI = %u ", (unsigned)(data->PI));
6049 LOGPC(DRLCMACDATA, LOGL_NOTICE, "TFI = %u ", (unsigned)(data->TFI));
6050 LOGPC(DRLCMACDATA, LOGL_NOTICE, "TI = %u ", (unsigned)(data->TI));
Ivan Kluchnikovd5f01332012-02-05 01:41:25 +04006051
6052 // Octet 2
Alexander Couzensccde5c92017-02-04 03:10:08 +01006053 data->BSN = bitvec_read_field(vector, &readIndex, 7);
6054 data->E_1 = bitvec_read_field(vector, &readIndex, 1);
Ivan Kluchnikova9f1ff22012-05-24 22:25:06 +04006055 LOGPC(DRLCMACDATA, LOGL_NOTICE, "BSN = %u ", (unsigned)(data->BSN));
6056 LOGPC(DRLCMACDATA, LOGL_NOTICE, "E_1 = %u ", (unsigned)(data->E_1));
6057
Ivan Kluchnikovd5f01332012-02-05 01:41:25 +04006058
Pau Espin Pedrol16705a42020-10-27 10:24:57 +01006059 if (data->E_1 == 0) // Extension octet follows immediately
Ivan Kluchnikovd5f01332012-02-05 01:41:25 +04006060 {
6061 // Octet 3 (optional)
Pau Espin Pedrol24fa2742020-03-26 15:11:59 +01006062 i = 0;
Ivan Kluchnikovd5f01332012-02-05 01:41:25 +04006063 do
6064 {
Alexander Couzensccde5c92017-02-04 03:10:08 +01006065 data->LENGTH_INDICATOR[i] = bitvec_read_field(vector, &readIndex, 6);
6066 data->M[i] = bitvec_read_field(vector, &readIndex, 1);
6067 data->E[i] = bitvec_read_field(vector, &readIndex, 1);
Ivan Kluchnikova9f1ff22012-05-24 22:25:06 +04006068 LOGPC(DRLCMACDATA, LOGL_NOTICE, "LENGTH_INDICATOR[%u] = %u ", i, (unsigned)(data->LENGTH_INDICATOR[i]));
6069 LOGPC(DRLCMACDATA, LOGL_NOTICE, "M[%u] = %u ", i, (unsigned)(data->M[i]));
6070 LOGPC(DRLCMACDATA, LOGL_NOTICE, "E[%u] = %u ", i, (unsigned)(data->E[i]));
Ivan Kluchnikovd5f01332012-02-05 01:41:25 +04006071 i++;
6072 } while((data->M[i-1] == 1)&&(data->E[i-1] == 0));
6073 }
Pau Espin Pedrol16705a42020-10-27 10:24:57 +01006074 if (data->TI == 1) // TLLI field is present
Ivan Kluchnikovd5f01332012-02-05 01:41:25 +04006075 {
Alexander Couzensccde5c92017-02-04 03:10:08 +01006076 data->TLLI = bitvec_read_field(vector, &readIndex, 32);
Ivan Kluchnikova9f1ff22012-05-24 22:25:06 +04006077 LOGPC(DRLCMACDATA, LOGL_NOTICE, "TLLI = %08x ", data->TLLI);
Ivan Kluchnikovd5f01332012-02-05 01:41:25 +04006078 if (data->PI == 1) // PFI is present if TI field indicates presence of TLLI
6079 {
Alexander Couzensccde5c92017-02-04 03:10:08 +01006080 data->PFI = bitvec_read_field(vector, &readIndex, 7);
6081 data->E_2 = bitvec_read_field(vector, &readIndex, 1);
Ivan Kluchnikova9f1ff22012-05-24 22:25:06 +04006082 LOGPC(DRLCMACDATA, LOGL_NOTICE, "PFI = %u ", (unsigned)(data->PFI));
6083 LOGPC(DRLCMACDATA, LOGL_NOTICE, "E_2 = %u ", (unsigned)(data->E_2));
Ivan Kluchnikovd5f01332012-02-05 01:41:25 +04006084 }
6085 }
6086 unsigned dataLen = 23 - readIndex/8;
Ivan Kluchnikova9f1ff22012-05-24 22:25:06 +04006087 LOGPC(DRLCMACDATA, LOGL_NOTICE, "DATA[%u] = ", dataLen);
Ivan Kluchnikov1b517342013-12-30 14:26:06 +04006088 assert(dataLen <= 20);
Pau Espin Pedrol24fa2742020-03-26 15:11:59 +01006089 for (i = 0; i < dataLen; i++)
Ivan Kluchnikovd5f01332012-02-05 01:41:25 +04006090 {
Alexander Couzensccde5c92017-02-04 03:10:08 +01006091 data->RLC_DATA[i] = bitvec_read_field(vector, &readIndex, 8);
Ivan Kluchnikova9f1ff22012-05-24 22:25:06 +04006092 LOGPC(DRLCMACDATA, LOGL_NOTICE, "%02x", (unsigned)(data->RLC_DATA[i]));
Ivan Kluchnikovd5f01332012-02-05 01:41:25 +04006093 }
Ivan Kluchnikova9f1ff22012-05-24 22:25:06 +04006094 LOGPC(DRLCMACDATA, LOGL_NOTICE, "\n");
Ivan Kluchnikovd5f01332012-02-05 01:41:25 +04006095 }
6096 else
6097 {
Pau Espin Pedrolea9de4a2020-02-03 18:57:21 +01006098 LOGP(DRLCMACDATA, LOGL_NOTICE, "Payload Type: RESERVED (3)\n");
Ivan Kluchnikovd5f01332012-02-05 01:41:25 +04006099 return;
6100 }
6101}
Ivan Kluchnikov92ac6372012-02-20 15:04:25 +04006102
Pau Espin Pedrol007056e2020-03-26 15:03:33 +01006103void encode_gsm_rlcmac_downlink_data(struct bitvec *vector, RlcMacDownlinkDataBlock_t * data)
Ivan Kluchnikov92ac6372012-02-20 15:04:25 +04006104{
Pau Espin Pedrol24fa2742020-03-26 15:11:59 +01006105 unsigned i;
Ivan Kluchnikov9b06ff02012-06-15 10:13:30 +04006106 unsigned writeIndex = 0;
Ivan Kluchnikov92ac6372012-02-20 15:04:25 +04006107
6108 if (data->PAYLOAD_TYPE == PAYLOAD_TYPE_DATA)
6109 {
6110 // MAC header
Alexander Couzensccde5c92017-02-04 03:10:08 +01006111 bitvec_write_field(vector, &writeIndex, data->PAYLOAD_TYPE, 2);
6112 bitvec_write_field(vector, &writeIndex, data->RRBP, 2);
6113 bitvec_write_field(vector, &writeIndex, data->SP, 1);
6114 bitvec_write_field(vector, &writeIndex, data->USF, 3);
Ivan Kluchnikova9f1ff22012-05-24 22:25:06 +04006115 LOGPC(DRLCMACDATA, LOGL_NOTICE, "PAYLOAD_TYPE = %u ", (unsigned)(data->PAYLOAD_TYPE));
6116 LOGPC(DRLCMACDATA, LOGL_NOTICE, "RRBP = %u ", (unsigned)(data->RRBP));
6117 LOGPC(DRLCMACDATA, LOGL_NOTICE, "SP = %u ", (unsigned)(data->SP));
6118 LOGPC(DRLCMACDATA, LOGL_NOTICE, "USF = %u ", (unsigned)(data->USF));
Pau Espin Pedrol034e32f2020-01-28 17:14:26 +01006119
Ivan Kluchnikov92ac6372012-02-20 15:04:25 +04006120 // Octet 1
Alexander Couzensccde5c92017-02-04 03:10:08 +01006121 bitvec_write_field(vector, &writeIndex, data->PR, 2);
6122 bitvec_write_field(vector, &writeIndex, data->TFI, 5);
6123 bitvec_write_field(vector, &writeIndex, data->FBI, 1);
Ivan Kluchnikova9f1ff22012-05-24 22:25:06 +04006124 LOGPC(DRLCMACDATA, LOGL_NOTICE, "PR = %u ", (unsigned)(data->PR));
6125 LOGPC(DRLCMACDATA, LOGL_NOTICE, "TFI = %u ", (unsigned)(data->TFI));
6126 LOGPC(DRLCMACDATA, LOGL_NOTICE, "FBI = %u ", (unsigned)(data->FBI));
6127
Ivan Kluchnikov92ac6372012-02-20 15:04:25 +04006128 // Octet 2
Alexander Couzensccde5c92017-02-04 03:10:08 +01006129 bitvec_write_field(vector, &writeIndex, data->BSN, 7);
6130 bitvec_write_field(vector, &writeIndex, data->E_1, 1);
Ivan Kluchnikova9f1ff22012-05-24 22:25:06 +04006131 LOGPC(DRLCMACDATA, LOGL_NOTICE, "BSN = %u ", (unsigned)(data->BSN));
6132 LOGPC(DRLCMACDATA, LOGL_NOTICE, "E_1 = %u ", (unsigned)(data->E_1));
6133
Ivan Kluchnikov92ac6372012-02-20 15:04:25 +04006134 // Octet 3 (optional)
Pau Espin Pedrol16705a42020-10-27 10:24:57 +01006135 if (data->E_1 == 0)
Ivan Kluchnikov92ac6372012-02-20 15:04:25 +04006136 {
Pau Espin Pedrol24fa2742020-03-26 15:11:59 +01006137 i = 0;
Ivan Kluchnikov92ac6372012-02-20 15:04:25 +04006138 do
6139 {
Alexander Couzensccde5c92017-02-04 03:10:08 +01006140 bitvec_write_field(vector, &writeIndex, data->LENGTH_INDICATOR[i], 6);
6141 bitvec_write_field(vector, &writeIndex, data->M[i], 1);
6142 bitvec_write_field(vector, &writeIndex, data->E[i], 1);
Ivan Kluchnikova9f1ff22012-05-24 22:25:06 +04006143 LOGPC(DRLCMACDATA, LOGL_NOTICE, "LENGTH_INDICATOR[%u] = %u ", i, (unsigned)(data->LENGTH_INDICATOR[i]));
6144 LOGPC(DRLCMACDATA, LOGL_NOTICE, "M[%u] = %u ", i, (unsigned)(data->M[i]));
6145 LOGPC(DRLCMACDATA, LOGL_NOTICE, "E[%u] = %u ", i, (unsigned)(data->E[i]));
Ivan Kluchnikov92ac6372012-02-20 15:04:25 +04006146 i++;
6147 }
6148 while ((data->M[i-1] == 1) && (data->E[i-1] == 0));
6149 }
6150 unsigned dataNumOctets = 23 - writeIndex/8;
Ivan Kluchnikova9f1ff22012-05-24 22:25:06 +04006151 LOGPC(DRLCMACDATA, LOGL_NOTICE, "DATA[%u] = ", dataNumOctets);
Ivan Kluchnikov1b517342013-12-30 14:26:06 +04006152 assert(dataNumOctets <= 20);
Pau Espin Pedrol24fa2742020-03-26 15:11:59 +01006153 for (i = 0; i < dataNumOctets; i++)
Ivan Kluchnikov92ac6372012-02-20 15:04:25 +04006154 {
Alexander Couzensccde5c92017-02-04 03:10:08 +01006155 bitvec_write_field(vector, &writeIndex, data->RLC_DATA[i], 8);
Ivan Kluchnikova9f1ff22012-05-24 22:25:06 +04006156 LOGPC(DRLCMACDATA, LOGL_NOTICE, "%02x", (unsigned)(data->RLC_DATA[i]));
Ivan Kluchnikov92ac6372012-02-20 15:04:25 +04006157 }
Ivan Kluchnikova9f1ff22012-05-24 22:25:06 +04006158 LOGPC(DRLCMACDATA, LOGL_NOTICE, "\n");
Ivan Kluchnikov92ac6372012-02-20 15:04:25 +04006159 }
6160}
Jacob Erlbeck0df80be2016-01-20 12:14:55 +01006161
Pau Espin Pedrol007056e2020-03-26 15:03:33 +01006162int decode_gsm_ra_cap(struct bitvec *vector, MS_Radio_Access_capability_t *data)
Jacob Erlbeck0df80be2016-01-20 12:14:55 +01006163{
6164 csnStream_t ar;
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01006165 int ret;
Jacob Erlbeck0df80be2016-01-20 12:14:55 +01006166 unsigned readIndex = 0;
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01006167
Jacob Erlbeck0df80be2016-01-20 12:14:55 +01006168 csnStreamInit(&ar, 0, 8 * vector->data_len);
Pau Espin Pedrolac2b8662020-02-03 18:58:24 +01006169
6170 /* recursive csnStreamEncoder call uses LOGPC everywhere, so we need to start the log somewhere... */
Vadim Yanitskiye60d9c72020-02-18 05:30:57 +07006171 LOGP(DCSN1, LOGL_INFO, "csnStreamDecoder (RAcap): ");
Vadim Yanitskiy39a65052020-01-25 01:24:59 +07006172 ret = csnStreamDecoder(&ar, CSNDESCR(MS_Radio_Access_capability_t), vector, &readIndex, data);
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01006173
Pau Espin Pedrolac2b8662020-02-03 18:58:24 +01006174 /* recursive csnStreamDecoder call uses LOGPC everywhere without trailing
6175 newline, so as a caller we are responisble for submitting it */
6176 LOGPC(DCSN1, LOGL_INFO, "\n");
6177
Pau Espin Pedrol47de2322020-02-03 16:35:03 +01006178 if (ret > 0) {
Pau Espin Pedrol20848c32020-03-23 17:13:20 +01006179 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 +01006180 ret = 0;
6181 }
6182 return ret;
Jacob Erlbeck0df80be2016-01-20 12:14:55 +01006183}
Vadim Yanitskiyb47e53b2020-02-20 04:33:50 +07006184
6185/* This function is not actually used by osmo-pcu itself, and only needed for
6186 * the RLCMAC unit test. Having it here is better than making the internal
6187 * CSN.1 definitions (in particular, MS_Radio_Access_capability_t) non-static. */
Pau Espin Pedrol007056e2020-03-26 15:03:33 +01006188int encode_gsm_ra_cap(struct bitvec *vector, MS_Radio_Access_capability_t *data)
Vadim Yanitskiyb47e53b2020-02-20 04:33:50 +07006189{
6190 unsigned writeIndex = 0;
6191 csnStream_t ar;
6192 int ret;
6193
6194 csnStreamInit(&ar, 0, vector->data_len * 8);
6195
6196 /* recursive csnStreamEncoder call uses LOGPC everywhere, so we need to start the log somewhere... */
6197 LOGP(DCSN1, LOGL_INFO, "csnStreamEncoder (RAcap): ");
6198 ret = csnStreamEncoder(&ar, CSNDESCR(MS_Radio_Access_capability_t), vector, &writeIndex, data);
6199 LOGPC(DCSN1, LOGL_INFO, "\n");
6200
Vadim Yanitskiy773cb742020-03-06 08:26:16 +07006201 if (ret > 0 || ret == CSN_ERROR_NEED_MORE_BITS_TO_UNPACK) {
6202 LOGP(DRLCMACDATA, LOGL_ERROR, "Failed to encode MS RA Capability IE: not enough bits "
6203 "in the output buffer (rc=%d)\n", ret);
6204 ret = CSN_ERROR_NEED_MORE_BITS_TO_UNPACK;
Vadim Yanitskiyb47e53b2020-02-20 04:33:50 +07006205 }
6206
6207 return ret;
6208}
Vadim Yanitskiya2d972a2020-04-04 03:44:35 +07006209
6210struct value_string egprs_pkt_ch_req_type_names[] = {
6211 { EGPRS_PKT_CHAN_REQ_ONE_PHASE, "One Phase Access" },
6212 { EGPRS_PKT_CHAN_REQ_SHORT, "Short Access" },
6213 { EGPRS_PKT_CHAN_REQ_ONE_PHASE_RED_LATENCY, "One Phase Access (Reduced Latency MS)" },
6214 { EGPRS_PKT_CHAN_REQ_TWO_PHASE, "Two Phase Access" },
6215 { EGPRS_PKT_CHAN_REQ_SIGNALLING, "Signalling" },
6216 { EGPRS_PKT_CHAN_REQ_ONE_PHASE_UNACK, "One Phase Access (RLC unack mode)" },
6217 { EGPRS_PKT_CHAN_REQ_DEDICATED_CHANNEL, "Dedicated Channel Request" },
6218 { EGPRS_PKT_CHAN_REQ_EMERGENCY_CALL, "Emergency call" },
6219 { EGPRS_PKT_CHAN_REQ_TWO_PHASE_IPA, "Two Phase Access (by IPA capable MS)" },
6220 { EGPRS_PKT_CHAN_REQ_SIGNALLING_IPA, "Signalling (by IPA capable MS)" },
6221 { 0, NULL }
6222};
6223
6224int decode_egprs_pkt_ch_req(guint16 ra, EGPRS_PacketChannelRequest_t *req)
6225{
6226 unsigned readIndex = 0;
6227 guint8 bv_data[2];
6228 csnStream_t ar;
6229 int ret;
6230
6231 /* Allocate a bitvector on stack */
6232 struct bitvec bv = {
6233 .cur_bit = 0,
6234 .data_len = 2,
6235 .data = bv_data,
6236 };
6237
6238 /* Unpack the bits: xxxxxxxx xxx..... */
6239 bv_data[0] = (guint8) (ra >> 3);
6240 bv_data[1] = (guint8) ((ra & 0x07) << 5);
6241
6242 csnStreamInit(&ar, 0, 11);
6243
6244 /* Recursive csnStreamDecoder call uses LOGPC everywhere, so we need to start the log somewhere... */
6245 LOGP(DCSN1, LOGL_DEBUG, "csnStreamDecoder (EGPRS Packet Channel Request): ");
6246 ret = csnStreamDecoder(&ar, CSNDESCR(EGPRS_PacketChannelRequest_t),
6247 &bv, &readIndex, (void *) req);
6248 LOGPC(DCSN1, LOGL_DEBUG, "\n");
6249
6250 return ret;
6251}