1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
|
/* packet-umts_fp.h
*
* Martin Mathieson
* Wireshark - Network traffic analyzer
* By Gerald Combs <gerald@wireshark.org>
* Copyright 1998 Gerald Combs
*
* SPDX-License-Identifier: GPL-2.0-or-later
*/
#include <epan/conversation.h>
/* Channel types */
#define CHANNEL_UNKNOWN 0
#define CHANNEL_RACH_FDD 1
#define CHANNEL_RACH_TDD 2
#define CHANNEL_FACH_FDD 3
#define CHANNEL_FACH_TDD 4
#define CHANNEL_DSCH_FDD 5 /* DSCH Downlink Shared Channel */
#define CHANNEL_DSCH_TDD 6
#define CHANNEL_USCH_TDD_384 8
#define CHANNEL_USCH_TDD_128 24
#define CHANNEL_PCH 9
#define CHANNEL_CPCH 10
#define CHANNEL_BCH 11
#define CHANNEL_DCH 12 /* DCH Dedicated Transport Channel */
#define CHANNEL_HSDSCH 13 /* HS-DSCH - High Speed Downlink Shared Channel */
#define CHANNEL_IUR_CPCHF 14
#define CHANNEL_IUR_FACH 15
#define CHANNEL_IUR_DSCH 16
#define CHANNEL_EDCH 17 /* E-DCH Enhanced DCH */
#define CHANNEL_RACH_TDD_128 18
#define CHANNEL_HSDSCH_COMMON 19 /* HS-DSCH - High Speed Downlink Shared Channel */
#define CHANNEL_HSDSCH_COMMON_T3 20
#define CHANNEL_EDCH_COMMON 21
/* Constants */
#define MAX_FP_CHANS 64
#define MAX_EDCH_DDIS 16
#define MAX_NUM_HSDHSCH_MACDFLOW 8
#define FP_maxNrOfDCHs 128 /* From NBAP-Constants.asn */
enum fp_interface_type
{
IuB_Interface,
IuR_Interface
};
enum division_type
{
Division_FDD = 1,
Division_TDD_384 = 2,
Division_TDD_128 = 3,
Division_TDD_768 = 4
};
enum fp_hsdsch_entity
{
entity_not_specified = 0,
hs = 1,
ehs = 2
};
enum fp_link_type
{
FP_Link_Unknown,
FP_Link_ATM,
FP_Link_Ethernet
};
enum fp_rlc_mode {
FP_RLC_MODE_UNKNOWN,
FP_RLC_TM,
FP_RLC_UM,
FP_RLC_AM
};
typedef struct
{
int num_ul_chans;
int ul_chan_tf_size[MAX_FP_CHANS];
int ul_chan_num_tbs[MAX_FP_CHANS];
int num_dl_chans;
int dl_chan_tf_size[MAX_FP_CHANS];
int dl_chan_num_tbs[MAX_FP_CHANS];
} fp_dch_channel_info_t;
/****************************************/
/* Channel Specific Information Structs */
/****************/
/* FACH Structs */
typedef struct fp_crnti_allocation_info_t
{
uint32_t alloc_frame_number; /* Frame where C-RNTI was allocated */
uint32_t urnti; /* The U-RNTI to which the C-RNTI was allocated*/
uint32_t global_retrieval_count; /* How many times this alloc info was retrieved for FACH channels*/
} fp_crnti_allocation_info_t;
/* Used in the 'channel_specific_info' field for FACH channels */
typedef struct fp_fach_channel_info_t
{
/* Key: (uint32_t) C-RNTI */
/* Value: (fp_crnti_allocation_info_t) U-RNTI allocation info */
wmem_tree_t* crnti_to_urnti_map; /* Mapping between C-RNTIs and U-RNTIs using them in this FACH */
} fp_fach_channel_info_t;
/****************/
/* RACH Structs */
/* Used in the 'channel_specific_info' field for RACH channels */
typedef struct fp_rach_channel_info_t
{
/* Key: (uint32_t) C-RNTI */
/* Value: (fp_crnti_allocation_info_t) U-RNTI allocation info */
wmem_tree_t* crnti_to_urnti_map; /* Mapping between C-RNTIs and U-RNTIs using them in this RACH */
} fp_rach_channel_info_t;
/****************/
/* PCH Structs */
/* Information about the Paging Indication Bitmap seen in a specific PCH frame*/
typedef struct paging_indications_info_t
{
uint32_t frame_number;
uint8_t* paging_indications_bitmap;
} paging_indications_info_t;
/* Used in the 'channel_specific_info' field for PCH channels */
typedef struct fp_pch_channel_info_t
{
/*Size of the Paging Indication field in this PCH*/
int paging_indications;
/* Information from the previous frame in this field which contained the paging indication field*/
paging_indications_info_t* last_paging_indication_info;
} fp_pch_channel_info_t;
/*****************/
/* E-DCH Structs */
/* Used in the 'channel_specific_info' field for E-DCH channels */
typedef struct fp_edch_channel_info_t
{
int no_ddi_entries;
uint8_t edch_ddi[MAX_EDCH_DDIS];
unsigned edch_macd_pdu_size[MAX_EDCH_DDIS];
uint8_t edch_lchId[MAX_EDCH_DDIS];
uint8_t edch_type; /* 1 means T2 */
} fp_edch_channel_info_t;
/*******************/
/* HS-DSCH Structs */
/* Used in the 'channel_specific_info' field for HS-DSCH channels */
typedef struct fp_hsdsch_channel_info_t
{
enum fp_hsdsch_entity hsdsch_entity;
uint8_t common_macdflow_id;
uint8_t hsdsch_macdflow_id;
unsigned hrnti; /*Used for tracking a HS-DSCH flow*/
} fp_hsdsch_channel_info_t;
/************************/
/* FP Conversation Data */
typedef struct
{
enum fp_interface_type iface_type;
enum division_type division;
int channel; /* see Channel types definitions above */
enum fp_rlc_mode rlc_mode;
uint32_t dl_frame_number; /* the frame where this conversation is started from CRNC */
uint32_t ul_frame_number; /* the frame where this conversation is started from Node B */
address crnc_address;
uint16_t crnc_port;
unsigned urnti; /* Identifies a single UE in the UTRAN. Used for tracking it's RLC session across different transport channels */
int com_context_id; /* Identifies a single UE in all NBAP messages */
uint32_t scrambling_code; /* Identifies a single UE's radio transmissions in the UTRAN */
void* channel_specific_info; /* Extended channel info based on the channel type */
/* DCH's in this flow */
int num_dch_in_flow;
int dch_ids_in_flow_list[FP_maxNrOfDCHs];
/* DCH type channel data */
fp_dch_channel_info_t fp_dch_channel_info[FP_maxNrOfDCHs];
uint8_t dch_crc_present; /* 0=No, 1=Yes, 2=Unknown */
bool reset_frag; /*Used to indicate that a stream has been reconfigured, hence we need to reset the fragtable*/
uint32_t cfn;
uint32_t cfn_index;
} umts_fp_conversation_info_t;
/********************************/
/* FP Packet Data */
/* (attached to each FP packet) */
typedef struct fp_info
{
enum fp_interface_type iface_type;
enum division_type division;
uint8_t release; /* e.g. 99, 4, 5, 6, 7 */
uint16_t release_year; /* e.g. 2001 */
uint8_t release_month; /* e.g. 12 for December */
bool is_uplink;
int channel; /* see Channel types definitions above */
uint8_t dch_crc_present; /* 0=No, 1=Yes, 2=Unknown */
int num_chans;
int chan_tf_size[MAX_FP_CHANS];
int chan_num_tbs[MAX_FP_CHANS];
int no_ddi_entries;
uint8_t edch_ddi[MAX_EDCH_DDIS];
unsigned edch_macd_pdu_size[MAX_EDCH_DDIS];
unsigned edch_lchId[MAX_EDCH_DDIS]; /* Logical Channel Id for E-DCH*/
uint8_t edch_type; /* 1 means T2 */
int cur_tb; /* current transport block (required for dissecting of single TBs */
int cur_chan; /* current channel, required to retrieve the correct channel configuration for UMTS MAC */
int com_context_id; /* Identifies a single UE in the network */
uint16_t srcport, destport;
/* PCH Related data*/
int paging_indications;
paging_indications_info_t* relevant_paging_indications; /* Info from previous frame */
/* Info from the current frame. Used to carry information from this frame to the conversation info */
paging_indications_info_t* current_paging_indications;
/* HSDSCH Related data */
enum fp_hsdsch_entity hsdsch_entity;
int hsdsch_macflowd_id;
bool hsdhsch_macfdlow_is_mux[MAX_NUM_HSDHSCH_MACDFLOW];
enum fp_rlc_mode hsdsch_rlc_mode;
enum fp_link_type link_type;
unsigned urnti; /*Used for tracking a "sequence" over different transport channels*/
bool reset_frag; /*Used to indicate that a stream has been reconfigured, hence we need to reset the fragtable*/
} fp_info;
void set_umts_fp_conv_data(conversation_t *conversation, umts_fp_conversation_info_t *umts_fp_conversation_info);
/*
* Editor modelines - https://www.wireshark.org/tools/modelines.html
*
* Local variables:
* c-basic-offset: 4
* tab-width: 8
* indent-tabs-mode: nil
* End:
*
* vi: set shiftwidth=4 tabstop=8 expandtab:
* :indentSize=4:tabSize=8:noTabs=true:
*/
|