aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-umts_fp.h
blob: 7718b7b99666f046b35a439a1ac53a9611b05df7 (plain)
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
268
269
270
271
272
273
274
275
276
277
278
/* packet-umts_fp.h
 *
 * Martin Mathieson
 * Wireshark - Network traffic analyzer
 * By Gerald Combs <gerald@wireshark.org>
 * Copyright 1998 Gerald Combs
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version 2
 * of the License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 */


#include <glib.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_maxNrOfTFs 32 /* From NBAC-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
{
    gint num_ul_chans;
    gint ul_chan_tf_size[MAX_FP_CHANS];
    gint ul_chan_num_tbs[MAX_FP_CHANS];
    gint num_dl_chans;
    gint dl_chan_tf_size[MAX_FP_CHANS];
    gint 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
{
    guint32 alloc_frame_number; /* Frame where C-RNTI was allocated */
    guint32 urnti; /* The U-RNTI to which the C-RNTI was allocated*/
} fp_crnti_allocation_info_t;

/* Used in the 'channel_specific_info' field for FACH channels */
typedef struct fp_fach_channel_info_t
{
    /* Key: (guint32) 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: (guint32) 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
{
    guint32 frame_number;
    guint8* 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*/
    gint 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
{
    gint   no_ddi_entries;
    guint8 edch_ddi[MAX_EDCH_DDIS];
    guint  edch_macd_pdu_size[MAX_EDCH_DDIS];
    guint8 edch_lchId[MAX_EDCH_DDIS];
    guint8 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;
    guint8 common_macdflow_id;
    guint8 hsdsch_macdflow_id;
    guint 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;
    gint channel;               /* see Channel types definitions above */
    enum fp_rlc_mode rlc_mode;
    guint32 dl_frame_number;    /* the frame where this conversation is started from CRNC */
    guint32 ul_frame_number;    /* the frame where this conversation is started from Node B */
    address crnc_address;
    guint16 crnc_port;

    guint urnti;                /* Identifies a single UE in the UTRAN. Used for tracking it's RLC session across different transport channels */
    gint com_context_id;        /* Identifies a single UE in all NBAP messages */
    guint32 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 */
    gint num_dch_in_flow;
    gint dch_ids_in_flow_list[FP_maxNrOfTFs];
    /* DCH type channel data */
    fp_dch_channel_info_t fp_dch_channel_info[FP_maxNrOfTFs];
    guint8 dch_crc_present;    /* 0=No, 1=Yes, 2=Unknown */

    gboolean reset_frag;  /*Used to indicate that a stream has been reconfigured, hence we need to reset the fragtable*/
    guint32 cfn;
    guint32 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;
    guint8  release;                     /* e.g. 99, 4, 5, 6, 7 */
    guint16 release_year;                /* e.g. 2001 */
    guint8  release_month;               /* e.g. 12 for December */
    gboolean is_uplink;
    gint channel;                       /* see Channel types definitions above */
    guint8  dch_crc_present;            /* 0=No, 1=Yes, 2=Unknown */
    gint num_chans;
    gint chan_tf_size[MAX_FP_CHANS];
    gint chan_num_tbs[MAX_FP_CHANS];

    gint   no_ddi_entries;
    guint8 edch_ddi[MAX_EDCH_DDIS];
    guint  edch_macd_pdu_size[MAX_EDCH_DDIS];

    guint  edch_lchId[MAX_EDCH_DDIS];   /* Logical Channel Id for E-DCH*/

    guint8 edch_type;       /* 1 means T2 */

    gint cur_tb;            /* current transport block (required for dissecting of single TBs */
    gint cur_chan;          /* current channel, required to retrieve the correct channel configuration for UMTS MAC */
    gint com_context_id;    /* Identifies a single UE in the network */
    guint16 srcport, destport;

    /* PCH Related data*/
    gint 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 converstaion info */
    paging_indications_info_t* current_paging_indications;

    /* HSDSCH Related data */
    enum   fp_hsdsch_entity hsdsch_entity;
    gint        hsdsch_macflowd_id;
    gboolean hsdhsch_macfdlow_is_mux[MAX_NUM_HSDHSCH_MACDFLOW];
    enum   fp_link_type link_type;
    guint urnti;         /*Used for tracking a "sequence" over diffrent transport channels*/

    gboolean 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  -  http://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:
 */