Revert "TODO epan/dissectors/asn1/kerberos/packet-kerberos-template.c new GSS flags"
[wireshark-sm.git] / epan / dissectors / packet-uma.c
blob7df3cbd53603ce244ec3863766f0f863e37ef6ba
1 /* packet-uma.c
2 * Routines for Unlicensed Mobile Access(UMA) dissection
3 * Copyright 2005-2006,2009, Anders Broman <anders.broman[at]ericsson.com>
5 * Wireshark - Network traffic analyzer
6 * By Gerald Combs <gerald@wireshark.org>
7 * Copyright 1998 Gerald Combs
9 * SPDX-License-Identifier: GPL-2.0-or-later
11 * References:
12 * http://www.umatechnology.org/
13 * UMA Protocols (Stage 3) R1.0.4 (5/16/2005)
15 * 3GPP TS 44.318 version 8.4.0 Release 8
17 * https://www.3gpp.org/specifications/specification-numbering
18 * 3GPP TS 24.008 V6.2.0 (2003-09)
19 * Technical Specification
20 * 3rd Generation Partnership Project;
21 * Technical Specification Group Core Network;
22 * Mobile radio interface Layer 3 specification;
23 * Core network protocols; Stage 3
24 * (Release 6)
26 * 3GPP TS 44.018 V6.11.0 (2005-01)
27 * 3rd Generation Partnership Project;
28 * Technical Specification Group GSM/EDGE Radio Access Network;
29 * Mobile radio interface layer 3 specification;
30 * Radio Resource Control (RRC) protocol
31 * (Release 6)
33 * 3GPP TS 45.009 V6.1.0 (2004-02)
34 * 3rd Generation Partnership Project;
35 * Technical Specification Group GSM/EDGE
36 * Radio Access Network;
37 * Link adaptation
38 * (Release 6)
42 #include "config.h"
44 #include <epan/packet.h>
45 #include <epan/expert.h>
46 #include <epan/prefs.h>
47 #include <epan/asn1.h>
48 #include "packet-bssap.h"
49 #include "packet-gsm_a_common.h"
50 #include "packet-rtp.h"
51 #include "packet-rtcp.h"
52 #include "packet-e212.h"
53 #include "packet-tcp.h"
54 #include "packet-rrc.h"
56 void proto_register_uma(void);
57 void proto_reg_handoff_uma(void);
59 /* Length field is 2 bytes and comes first */
60 #define UMA_HEADER_SIZE 2
61 static bool uma_desegment = true;
63 static dissector_handle_t uma_tcp_handle;
64 static dissector_handle_t uma_udp_handle;
65 static dissector_table_t bssap_pdu_type_table;
66 static dissector_handle_t rtcp_handle;
67 static dissector_handle_t llc_handle;
69 /* Initialize the protocol and registered fields */
70 static int proto_uma;
71 static int hf_uma_length_indicator;
72 static int hf_uma_pd;
73 static int hf_uma_skip_ind;
74 static int hf_uma_urr_msg_type;
75 static int hf_uma_urlc_msg_type;
76 static int hf_uma_urlc_TLLI;
77 static int hf_uma_urlc_seq_nr;
78 static int hf_uma_urr_IE;
79 static int hf_uma_urr_IE_len;
80 static int hf_uma_urr_uri;
81 static int hf_uma_urr_radio_type_of_id;
82 static int hf_uma_urr_radio_id;
83 static int hf_uma_urr_cell_id;
84 static int hf_uma_urr_lac;
85 static int hf_uma_urr_gci;
86 static int hf_uma_urr_tura;
87 static int hf_uma_urr_gc;
88 static int hf_uma_urr_uc;
89 static int hf_uma_urr_rrs;
90 static int hf_uma_urr_gmsi;
91 static int hf_uma_urr_psho;
92 static int hf_uma_urr_IP_Address_type;
93 static int hf_uma_urr_FQDN;
94 static int hf_uma_urr_sgw_ipv4;
95 static int hf_uma_urr_redirection_counter;
96 static int hf_uma_urr_dis_rej_cau;
97 static int hf_uma_urr_MSCR;
98 static int hf_uma_urr_ATT;
99 static int hf_uma_urr_DTM;
100 static int hf_uma_urr_GPRS;
101 static int hf_uma_urr_NMO;
102 static int hf_uma_urr_ECMC;
103 static int hf_uma_urr_T3212_timer;
104 static int hf_uma_urr_RAC;
105 static int hf_uma_urr_ap_location;
106 static int hf_uma_urr_SGSNR;
107 static int hf_uma_urr_ECMP;
108 static int hf_uma_urr_RE;
109 static int hf_uma_urr_PFCFM;
110 static int hf_uma_urr_3GECS;
111 static int hf_uma_urr_TU3907_timer;
112 static int hf_uma_urr_GSM_RR_state;
113 static int hf_uma_urr_gan_band;
114 static int hf_uma_urr_URR_state;
115 static int hf_uma_urr_register_reject_cause;
116 static int hf_uma_urr_TU3906_timer;
117 static int hf_uma_urr_TU3910_timer;
118 static int hf_uma_urr_TU3902_timer;
119 static int hf_uma_urr_communication_port;
120 static int hf_uma_urr_L3_Message;
121 static int hf_uma_urr_L3_protocol_discriminator;
122 static int hf_uma_urr_GPRS_resumption;
123 static int hf_uma_urr_ULQI;
124 static int hf_uma_urr_TU3920_timer;
125 static int hf_uma_urr_peak_tpt_cls;
126 static int hf_uma_urr_radio_pri;
127 static int hf_uma_urr_rlc_mode;
128 static int hf_uma_urr_ga_psr_cause;
129 static int hf_uma_urr_udr;
130 static int hf_uma_urr_TU4001_timer;
131 static int hf_uma_urr_LS;
132 static int hf_uma_urr_cipher_res;
133 static int hf_uma_urr_rand_val;
134 static int hf_uma_urr_ciphering_command_mac;
135 static int hf_uma_urr_ciphering_key_seq_num;
136 static int hf_uma_urr_sapi_id;
137 static int hf_uma_urr_establishment_cause;
138 static int hf_uma_urr_channel;
139 static int hf_uma_urr_PDU_in_error;
140 static int hf_uma_urr_sample_size;
141 static int hf_uma_urr_payload_type;
142 static int hf_uma_urr_LLC_PDU;
143 static int hf_uma_urr_LBLI;
144 static int hf_uma_urr_RI;
145 static int hf_uma_urr_TU4003_timer;
146 static int hf_uma_urr_ap_service_name_type;
147 static int hf_uma_urr_ap_Service_name_value;
148 static int hf_uma_urr_uma_service_zone_icon_ind;
149 static int hf_uma_urr_uma_service_zone_str_len;
150 static int hf_uma_urr_window_size;
151 static int hf_uma_urr_uma_codec_mode;
152 static int hf_uma_urr_UTRAN_cell_id_disc;
153 static int hf_uma_urr_ms_radio_id;
154 static int hf_uma_urr_uma_service_zone_str;
155 static int hf_uma_urr_suti;
156 static int hf_uma_urr_uma_mps;
157 static int hf_uma_urr_num_of_plms;
158 static int hf_uma_urr_cbs;
159 static int hf_uma_urr_num_of_cbs_frms;
160 static int hf_uma_urr_unc_ipv4;
161 static int hf_uma_unc_FQDN;
162 static int hf_uma_urr_GPRS_user_data_transport_ipv4;
163 static int hf_uma_urr_GPRS_port;
164 static int hf_uma_urr_UNC_tcp_port;
165 static int hf_uma_urr_RTP_port;
166 static int hf_uma_urr_RTCP_port;
167 static int hf_uma_urr_RXLEV_NCELL;
168 /* Generated from convert_proto_tree_add_text.pl */
169 static int hf_uma_access_control_class_n;
170 static int hf_uma_data;
172 /* Initialize the subtree pointers */
173 static int ett_uma;
174 static int ett_uma_toc;
175 static int ett_urr_ie;
177 /* Generated from convert_proto_tree_add_text.pl */
178 static expert_field ei_uma_fqdn_not_present;
179 static expert_field ei_uma_wrong_message_type;
180 static expert_field ei_uma_unknown_protocol;
181 static expert_field ei_uma_skip_this_message;
182 static expert_field ei_uma_cbs_frames;
183 static expert_field ei_uma_unknown_format;
185 /* The dynamic payload type which will be dissected as uma */
186 #define DEFAULT_UMA_PORT_RANGE "14001" /* Not IANA registered */
188 /* Global variables */
189 static uint32_t unc_ipv4_address;
190 /** static uint32_t rtp_ipv4_address; **/
191 static uint32_t rtcp_ipv4_address;
192 static uint32_t GPRS_user_data_ipv4_address;
195 * Protocol Discriminator (PD)
197 static const value_string uma_pd_vals[] = {
198 { 0, "URR_C"},
199 { 1, "URR"},
200 { 2, "URLC"},
201 { 0, NULL }
204 * Message types for Unlicensed Radio Resources management
206 static const value_string uma_urr_msg_type_vals[] = {
207 { 1, "GA-RC DISCOVERY REQUEST"},
208 { 2, "GA-RC DISCOVERY ACCEPT"},
209 { 3, "GA-RC DISCOVERY REJECT"},
210 { 16, "GA-RC REGISTER REQUEST"},
211 { 17, "GA-RC REGISTER ACCEPT"},
212 { 18, "GA-RC REGISTER REDIRECT"},
213 { 19, "GA-RC REGISTER REJECT"},
214 { 20, "GA-RC DEREGISTER"},
215 { 21, "GA-RC REGISTER UPDATE UPLINK"},
216 { 22, "GA-RC REGISTER UPDATE DOWNLINK"},
217 { 23, "GA-RC CELL BROADCAST INFO"},
218 { 32, "GA-CSR CIPHERING MODE COMMAND"},
219 { 33, "GA-CSR CIPHERING MODE COMPLETE"},
220 { 48, "GA-CSR ACTIVATE CHANNEL"},
221 { 49, "GA-CSR ACTIVATE CHANNEL ACK"},
222 { 50, "GA-CSR ACTIVATE CHANNEL COMPLETE"},
223 { 51, "GA-CSR ACTIVATE CHANNEL FAILURE"},
224 { 52, "GA-CSR CHANNEL MODE MODIFY"},
225 { 53, "GA-CSR CHANNEL MODE MODIFY ACKNOWLEDGE"},
226 { 64, "GA-CSR RELEASE"},
227 { 65, "GA-CSR RELEASE COMPLETE"},
228 { 66, "GA-CSR CLEAR REQUEST"},
229 { 80, "GA-CSR HANDOVER ACCESS"},
230 { 81, "GA-CSR HANDOVER COMPLETE"},
231 { 82, "GA-CSR UPLINK QUALITY INDICATION"},
232 { 83, "GA-CSR HANDOVER INFORMATION"},
233 { 84, "GA-CSR HANDOVER COMMAND"},
234 { 85, "GA-CSR HANDOVER FAILURE"},
235 { 96, "GA-CSR PAGING REQUEST"},
236 { 97, "GA-CSR PAGING RESPONSE"},
237 { 112, "GA-CSR UPLINK DIRECT TRANSFER"},
238 { 113, "URR INITIAL DIRECT TRANSFER"},
239 { 114, "GA-CSR DOWNLINK DIRECT TRANSFER"},
240 { 115, "GA-CSR STATUS"},
241 { 116, "GA-RC KEEP ALIVE"},
242 { 117, "GA-CSR CLASSMARK ENQUIRY"},
243 { 118, "GA-CSR CLASSMARK CHANGE"},
244 { 119, "GA-CSR GPRS SUSPENSION REQUEST"},
245 { 120, "GA-RC SYNCHRONIZATION INFORMATION"},
246 { 121, "GA-CSR UTRAN CLASSMARK CHANGE"},
247 { 128, "GA-CSR REQUEST"},
248 { 129, "GA-CSR REQUEST ACCEPT"},
249 { 130, "GA-CSR REQUEST REJECT"},
250 { 0, NULL }
252 static value_string_ext uma_urr_msg_type_vals_ext = VALUE_STRING_EXT_INIT(uma_urr_msg_type_vals);
254 * Message types for URLC signaling
256 static const value_string uma_urlc_msg_type_vals[] = {
257 { 1, "GA-PSR-DATA"},
258 { 2, "URLC UNITDATA"},
259 { 3, "GA-PSR-PS-PAGE"},
260 { 4, "Unknown"},
261 { 5, "Unknown"},
262 { 6, "URLC-UFC-REQ"},
263 { 7, "URLC-DFC-REQ"},
264 { 8, "GA-PSR-ACTIVATE-UTC-REQ"},
265 { 9, "GA-PSR-ACTIVATE-UTC-ACK"},
266 { 10, "GA-PSR-DEACTIVATE-UTC-REQ"},
267 { 11, "GA-PSR-DEACTIVATE-UTC-ACK"},
268 { 12, "GA-PSR STATUS"},
269 { 13, "GA-PSR HANDOVER COMPLETE"},
270 { 14, "GA-PSR UPLINK QUALITY INDICATION"},
271 { 15, "GA-PSR HANDOVER INFORMATION"},
272 { 16, "GA-PSR HANDOVER COMMAND"},
273 { 17, "GA-PSR HANDOVER CONTINUE"},
274 { 18, "GA-PSR HANDOVER FAILURE"},
275 { 0, NULL }
277 static value_string_ext uma_urlc_msg_type_vals_ext = VALUE_STRING_EXT_INIT(uma_urlc_msg_type_vals);
280 * IE type and identifiers for Unlicensed Radio Resources management
282 static const value_string uma_urr_IE_type_vals[] = {
283 { 1, "Mobile Identity"},
284 { 2, "GAN Release Indicator"},
285 { 3, "Radio Identity"},
286 { 4, "GERAN Cell Identity"},
287 { 5, "Location Area Identification"},
288 { 6, "GERAN/UTRAN Coverage Indicator"},
289 { 7, "GAN Classmark"},
290 { 8, "Geographical Location"},
291 { 9, "GANC-SEGW IP Address"},
292 { 10, "GANC-SEGW Fully Qualified Domain/Host Name"},
293 { 11, "Redirection Counter"},
294 { 12, "Discovery Reject Cause"},
295 { 13, "GAN Cell Description"},
296 { 14, "GAN Control Channel Description"},
297 { 15, "Cell Identifier List"},
298 { 16, "TU3907 Timer"},
299 { 17, "GSM RR/UTRAN RRC State"},
300 { 18, "Routing Area Identification"},
301 { 19, "GAN Band"},
302 { 20, "GA-RC/GA-CSR/GA-PSR State"},
303 { 21, "Register Reject Cause"},
304 { 22, "TU3906 Timer"},
305 { 23, "TU3910 Timer"},
306 { 24, "TU3902 Timer"},
307 { 25, "Communication Port Identity"},
308 { 26, "L3 Message"},
309 { 27, "Channel Mode"},
310 { 28, "Mobile Station Classmark 2"},
311 { 29, "RR Cause"},
312 { 30, "Cipher Mode Setting"},
313 { 31, "GPRS Resumption"},
314 { 32, "Handover From GAN Command"},
315 { 33, "UL Quality Indication"},
316 { 34, "TLLI"},
317 { 35, "Packet Flow Identifier"},
318 { 36, "Suspension Cause"},
319 { 37, "TU3920 Timer"},
320 { 38, "QoS"},
321 { 39, "GA-PSR Cause"},
322 { 40, "User Data Rate"},
323 { 41, "Routing Area Code"},
324 { 42, "AP Location"},
325 { 43, "TU4001 Timer"},
326 { 44, "Location Status"},
327 { 45, "Cipher Response"},
328 { 46, "Ciphering Command RAND"},
329 { 47, "Ciphering Command MAC"},
330 { 48, "Ciphering Key Sequence Number"},
331 { 49, "SAPI ID"},
332 { 50, "Establishment Cause"},
333 { 51, "Channel Needed"},
334 { 52, "PDU in Error"},
335 { 53, "Sample Size"},
336 { 54, "Payload Type"},
337 { 55, "Multi-rate Configuration"},
338 { 56, "Mobile Station Classmark 3"},
339 { 57, "LLC-PDU"},
340 { 58, "Location Black List indicator"},
341 { 59, "Reset Indicator"},
342 { 60, "TU4003 Timer"},
343 { 61, "AP Service Name"},
344 { 62, "GAN Service Zone Information"},
345 { 63, "RTP Redundancy Configuration"},
346 { 64, "UTRAN Classmark"},
347 { 65, "Classmark Enquiry Mask"},
348 { 66, "UTRAN Cell Identifier List"},
349 { 67, "Serving UNC table indicator"},
350 { 68, "Registration indicators"},
351 { 69, "GAN PLMN List"},
352 { 70, "Received Signal Level List"},
353 { 71, "Required GAN Services"},
354 { 72, "Broadcast Container"},
355 { 73, "3G Cell Identity"},
356 { 74, "3G Security Capability"}, /* 11.2.108 */
357 { 75, "NAS Synchronisation Indicator"}, /* 11.2.109 */
358 { 76, "GANC TEID"}, /* 11.2.110 */
359 { 77, "MS TEID"}, /* 11.2.110 */
360 { 78, "UTRAN RRC Message"}, /* 11.2.111 */
361 { 79, "GAN Mode Indicator"}, /* 11.2.79 */
362 { 80, "CN Domain Identity"}, /* 11.2.80 */
363 { 81, "GAN Iu Mode Cell Description"}, /* 11.2.81 */
364 { 82, "3G UARFCN"}, /* 11.2.82 */
365 { 83, "RAB ID"}, /* 11.2.83 */
366 { 84, "RAB ID List"}, /* 11.2.84 */
367 { 85, "GA-RRC Establishment Cause"}, /* 11.2.85 */
368 { 86, "GA-RRC Cause"}, /* 11.2.86 */
369 { 87, "GA-RRC Paging Cause"}, /* 11.2.87 */
370 { 88, "Intra Domain NAS Node Selector"}, /* 11.2.88 */
371 { 89, "CTC Activation List"}, /* 11.2.89 */
372 { 90, "CTC Description"}, /* 11.2.90 */
373 { 91, "CTC Activation Ack List"}, /* 11.2.91 */
374 { 92, "CTC Activation Ack Description"}, /* 11.2.92 */
375 { 93, "CTC Modification List"}, /* 11.2.93 */
376 { 94, "CTC Modification Ack List"}, /* 11.2.94 */
377 { 95, "CTC Modification Ack Description"}, /* 11.2.95 */
378 { 96, "MS Radio Identity"},
379 { 97, "GANC IP Address"},
380 { 98, "GANC Fully Qualified Domain/Host Name"},
381 { 99, "IP address for GPRS user data transport"},
382 { 100, "UDP Port for GPRS user data transport"},
383 { 101, "Unknown"},
384 { 102, "Unknown"},
385 { 103, "GANC TCP port"},
386 { 104, "RTP UDP port"},
387 { 105, "RTCP UDP port"},
388 { 106, "GERAN Received Signal Level List"},
389 { 107, "UTRAN Received Signal Level List"},
390 { 108, "PS Handover to GERAN Command"}, /* 11.2.74 */
391 { 109, "PS Handover to UTRAN Command"}, /* 11.2.75 */
392 { 110, "PS Handover to GERAN PSI"}, /* 11.2.76 */
393 { 111, "PS Handover to GERAN SI"}, /* 11.2.77 */
394 { 112, "TU4004 Timer"}, /* 11.2.78 */
395 { 113, "Unknown"},
396 { 114, "Unknown"},
397 { 115, "PTC Activation List"}, /* 11.2.96 */
398 { 116, "PTC Description"}, /* 11.2.97 */
399 { 117, "PTC Activation Ack List"}, /* 11.2.98 */
400 { 118, "PTC Activation Ack Description"}, /* 11.2.99 */
401 { 119, "PTC Modification List"}, /* 11.2.100 */
402 { 120, "PTC Modification Ack List"}, /* 11.2.101 */
403 { 121, "PTC Modification Ack Description"}, /* 11.2.102 */
404 { 122, "RAB Configuration"}, /* 11.2.103 */
405 { 123, "Multi-rate Configuration 2"}, /* 11.2.104 */
406 { 124, "Selected Integrity Protection Algorithm"}, /* 11.2.105 */
407 { 125, "Selected Encryption Algorithm"}, /* 11.2.106 */
408 { 126, "CN Domains to Handover"}, /* 11.2.107 */
409 { 127, "SRNS Relocation Info"}, /* 11.2.107 */
410 { 128, "MS Radio Access Capability"}, /* 11.2.107 */
411 { 129, "Handover Reporting Control"}, /* 11.2.107 */
412 { 0, NULL }
414 static value_string_ext uma_urr_IE_type_vals_ext = VALUE_STRING_EXT_INIT(uma_urr_IE_type_vals);
416 static const value_string uma_urr_gan_rel_ind_vals[] = {
417 { 1, "Release 1 (i.e. 3GPP Release-6)"},
418 { 2, "Release 2 (i.e. 3GPP Release-7)"},
419 { 3, "Release 3 (i.e. 3GPP Release-8)"},
420 { 0, NULL }
423 static const value_string radio_type_of_id_vals[] = {
424 { 0, "IEEE MAC-address format"},
425 { 0, NULL }
428 /* GCI, GSM Coverage Indicator (octet 3) */
429 static const value_string uma_gci_vals[] = {
430 { 0, "Normal Service in the GERAN"},
431 { 1, "Limited Service in the GERAN"},
432 { 2, "MS has not found GSM coverage (LAI information taken from SIM, if available)"},
433 { 3, "MS has found GSM coverage, service state unknown"},
434 { 0, NULL }
436 /* TURA, Type of Unlicensed Radio (octet 3) */
437 static const value_string uma_tura_vals[] = {
438 { 0, "No radio"},
439 { 1, "Bluetooth"},
440 { 2, "WLAN 802.11"},
441 { 15, "Unspecified"},
442 { 0, NULL }
444 /* GC, GERAN Capable (octet 3) */
445 static const value_string uma_gc_vals[] = {
446 { 0, "The MS is not GERAN capable."},
447 { 1, "The MS is GERAN capable."},
448 { 0, NULL }
450 /* UC, UTRAN Capable (octet 3) */
451 static const value_string uma_uc_vals[] = {
452 { 0, "The MS is not UTRAN capable."},
453 { 1, "The MS is UTRAN capable."},
454 { 0, NULL }
456 /*RRS, RTP Redundancy Support (octet 4)*/
457 static const value_string uma_rrs_vals[] = {
458 { 0, "RTP Redundancy not supported"},
459 { 1, "RTP Redundancy supported"},
460 { 0, NULL }
463 * PS HO, PS Handover Capable (octet 4) Bit 2
465 static const value_string uma_ps_ho_vals[] = {
466 { 0, "The MS does not support PS handover to/from GAN A/Gb mode"},
467 { 1, "The MS supports PS handover to/from GAN A/Gb mode"},
468 { 0, NULL }
471 * GMSI, GAN Mode Support Indicator (octet 4)v Bits 4 3
474 static const value_string uma_gmsi_vals[] = {
475 { 0, "Unspecified"},
476 { 1, "The MS supports GAN A/Gb mode only"},
477 { 2, "The MS supports GAN Iu mode only"},
478 { 3, "The MS supports GAN A/Gb mode and GAN Iu mode"},
479 { 0, NULL }
482 /*IP address type number value (octet 3)*/
483 static const value_string IP_address_type_vals[] = {
484 { 0x21, "IPv4 address"},
485 { 0x57, "IPv6 address"},
486 { 0, NULL }
489 /*Discovery Reject Cause (octet 3) */
490 static const value_string uma_discovery_reject_cause_vals[] = {
491 { 0, "Network Congestion"},
492 { 1, "Unspecified"},
493 { 2, "IMSI not allowed"},
494 { 0, NULL }
496 /*EC Emergency Call allowed (octet 3)*/
497 static const value_string EC_vals[] _U_ = {
498 { 0, "Emergency call allowed in the cell to all MSs"},
499 { 1, "Emergency call not allowed in the cell except for the MSs that belong to one of the classes between 11 to 15."},
500 { 0, NULL }
502 /*ECMC, Early Classmark Sending Control (octet 3)*/
503 static const value_string ECMC_vals[] = {
504 { 0, "Early Classmark Sending is allowed"},
505 { 1, "Early Classmark Sending is forbidden"},
506 { 0, NULL }
508 /*NMO, Network Mode of Operation (octet 3)*/
509 static const value_string NMO_vals[] = {
510 { 0, "Network Mode of Operation I"},
511 { 1, "Network Mode of Operation II"},
512 { 2, "Network Mode of Operation III"},
513 { 3, "Reserved"},
514 { 0, NULL }
516 /*GPRS, GPRS Availability (octet 3)*/
517 static const value_string GPRS_avail_vals[] = {
518 { 0, "GPRS available"},
519 { 1, "GPRS not available"},
520 { 0, NULL }
522 /*DTM, Dual Transfer Mode of Operation by network (octet 3)*/
523 static const value_string DTM_vals[] = {
524 { 0, "Network does not support dual transfer mode"},
525 { 1, "Network supports dual transfer mode"},
526 { 0, NULL }
528 /*ATT, Attach-detach allowed (octet 3)*/
529 static const value_string ATT_vals[] = {
530 { 0, "MSs in the cell are not allowed to apply IMSI attach and detach procedure."},
531 { 1, "MSs in the cell shall apply IMSI attach and detach procedure."},
532 { 0, NULL }
534 /*MSCR, MSC Release (octet 3)*/
535 static const value_string MSCR_vals[] = {
536 { 0, "MSC is Release '98 or older"},
537 { 1, "MSC is Release '99 onwards"},
538 { 0, NULL }
541 /* SGSNR, SGSN Release (octet 6)*/
542 static const value_string SGSNR_vals[] = {
543 { 0, "SGSN is Release '98 or older"},
544 { 1, "SGSN is Release '99 onwards"},
545 { 0, NULL }
547 /* ECMP, Emergency Call Mode Preference (octet 6)*/
549 static const value_string ECMP_vals[] = {
550 { 0, "GSM GERAN is preferred for Emergency calls"},
551 { 1, "UMAN is preferred for Emergency calls"},
552 { 0, NULL }
554 /* RE, Call reestablishment allowed (octet 6) */
555 static const value_string RE_vals[] = {
556 { 0, "Call Reestablishment allowed in the cell"},
557 { 1, "Call Reestablishment not allowed in the cell"},
558 { 0, NULL }
560 /* PFCFM, PFC_FEATURE_MODE (octet 6) */
561 static const value_string PFCFM_vals[] = {
562 { 0, "The network does not support packet flow context procedures"},
563 { 1, "The network supports packet flow context procedures"},
564 { 0, NULL }
567 /* 3GECS, 3G Early Classmark Sending Restriction (octet 6) */
568 static const value_string Three_GECS_vals[] = {
569 { 0, "UTRAN classmark change message shall be sent with the Early classmark sending"},
570 { 1, "The sending of UTRAN Classmark Sending messages is controlled by the Early Classmark Sending Control parameter"},
571 { 0, NULL }
574 /*GRS, GSM RR State (octet 3)*/
575 static const value_string uma_GRS_GSM_RR_State_vals[] = {
576 { 0, "GSM RR is in IDLE state"},
577 { 1, "GSM RR is in DEDICATED state"},
578 { 2, "UTRAN RRC is in IDLE STATE"},
579 { 3, "UTRAN RRC is in CELL_DCH STATE"},
580 { 4, "UTRAN RRC is in CELL_FACH STATE"},
581 { 5, "UTRAN RRC is in CELL_PCH STATE"},
582 { 6, "UTRAN RRC is in URA_PCH STATE"},
583 { 7, "Unknown"},
584 { 0, NULL }
586 static value_string_ext uma_GRS_GSM_RR_State_vals_ext = VALUE_STRING_EXT_INIT(uma_GRS_GSM_RR_State_vals);
588 /* UMA Band (4 bit field) */
589 static const value_string uma_gan_band_vals[] = {
590 { 0, "E-GSM is supported"},
591 { 1, "P-GSM is supported"},
592 { 2, "GSM 1800 is supported"},
593 { 3, "GSM 450 is supported"},
594 { 4, "GSM 480 is supported"},
595 { 5, "GSM 850 is supported"},
596 { 6, "GSM 1900 is supported"},
597 { 7, "GSM 700 is supported"},
598 { 0, NULL }
600 static value_string_ext uma_gan_band_vals_ext = VALUE_STRING_EXT_INIT(uma_gan_band_vals);
602 /*URS, URR State (octet 3) */
603 static const value_string URR_state_vals[] = {
604 { 0, "GA-CSR is in GA-CSR-IDLE state"},
605 { 1, "GA-CSR is in GA-CSR-DEDICATED state"},
606 { 2, "GA-RC is in GA-RC-REGISTERED state while in GERAN/UTRAN mode"},
607 { 0, NULL }
610 UPS, GA-PSR State (octet 3)
613 0 GA-PSR is in GA-PSR-STANDBY state.
614 1 GA-PSR is in GA-PSR-ACTIVE state.
615 GA-RRC-CS, GA-RRC (CS) State (octet 3)
618 0 GA-RRC (CS) is in GA-RRC-IDLE state.
619 1 GA-RRC (CS) is in GA-RRC-CONNECTED
620 state.
621 GA-RRC-PS, GA-RRC (PS) State (octet 3)
624 0 GA-RRC (PS) is in GA-RRC-IDLE state.
625 1 GA-RRC (PS) is in GA-RRC-CONNECTED
626 state.
629 /* Register Reject Cause (octet 3) */
630 static const value_string register_reject_cause_vals[] = {
631 { 0, "Network Congestion"},
632 { 1, "AP not allowed"},
633 { 2, "Location not allowed"},
634 { 3, "Invalid GANC"},
635 { 4, "Geo Location not known"},
636 { 5, "IMSI not allowed"},
637 { 6, "Unspecified"},
638 { 7, "GANC-SEGW certificate not valid"},
639 { 8, "EAP_SIM authentication failed"},
640 { 9, "TCP establishment failed"},
641 { 10, "Redirection"},
642 { 11, "EAP-AKA authentication failed"},
643 /* 12 to 255 Reserved for future use. */
644 { 0, NULL }
646 static value_string_ext register_reject_cause_vals_ext = VALUE_STRING_EXT_INIT(register_reject_cause_vals);
648 /* L3 Protocol discriminator values according to TS 24 007 (640) */
649 #if 0 /** See packet-gms_a-dtap.c **/
650 static const value_string protocol_discriminator_vals[] = {
651 {0x0, "Group call control"},
652 {0x1, "Broadcast call control"},
653 {0x2, "Reserved: was allocated in earlier phases of the protocol"},
654 {0x3, "Call Control; call related SS messages"},
655 {0x4, "GPRS Transparent Transport Protocol (GTTP)"},
656 {0x5, "Mobility Management messages"},
657 {0x6, "Radio Resources Management messages"},
658 {0x7, "Unknown"},
659 {0x8, "GPRS mobility management messages"},
660 {0x9, "SMS messages"},
661 {0xa, "GPRS session management messages"},
662 {0xb, "Non call related SS messages"},
663 {0xc, "Location services specified in 3GPP TS 44.071 [8a]"},
664 {0xd, "Unknown"},
665 {0xe, "Reserved for extension of the PD to one octet length "},
666 {0xf, "Reserved for tests procedures described in 3GPP TS 44.014 [5a] and 3GPP TS 34.109 [17a]."},
667 { 0, NULL }
669 #endif
671 /* GPRS Resumption */
672 static const value_string GPRS_resumption_vals[] = {
673 { 0, "Resumption of GPRS services not successfully acknowledged"},
674 { 1, "Resumption of GPRS services successfully acknowledged"},
675 { 0, NULL }
678 /* ULQI, UL Quality Indication (octet 3) */
679 static const value_string uma_ulqi_vals[] = {
680 { 0, "Quality ok"},
681 { 1, "Radio problem"},
682 { 2, "Network problem"},
683 { 4, "Undetermined problem"},
684 { 0, NULL }
687 static const value_string radio_pri_vals[] = {
688 { 0, "Radio priority 1"},
689 { 1, "Radio priority 2"},
690 { 2, "Radio priority 3"},
691 { 3, "Radio priority 4"},
692 { 0, NULL }
695 static const value_string rlc_mode_vals[] = {
696 { 0, "RLC acknowledged mode"},
697 { 1, "RLC unacknowledged mode"},
698 { 0, NULL }
701 /*URLC Cause (octet 3) */
702 static const value_string uma_ga_psr_cause_vals[] = {
703 { 0, "success"},
704 { 1, "future use"},
705 { 2, "no available resources"},
706 { 3, "GANC failure"},
707 { 4, "not authorized for data service"},
708 { 5, "message type non existent or not implemented"},
709 { 6, "message type not compatible with the protocol state"},
710 { 7, "invalid mandatory information"},
711 { 8, "syntactically incorrect message"},
712 { 9, "GPRS suspended"},
713 { 10, "normal deactivation"},
714 { 11, "future use"},
715 { 12, "conditional IE error"},
716 { 13, "semantically incorrect message"},
717 { 14, "PS handover failure - incorrect handover command"},
718 { 15, "PS handover failure - target RAT access failure"},
719 { 16, "PS handover failure - missing SI/PSI information"},
720 { 17, "PS handover failure - no uplink TBF allocation"},
721 { 0, NULL }
723 static value_string_ext uma_ga_psr_cause_vals_ext = VALUE_STRING_EXT_INIT(uma_ga_psr_cause_vals);
725 /* LS, Location Status (octet 3) */
726 static const value_string LS_vals[] = {
727 { 0, "MS location known"},
728 { 1, "MS location unknown"},
729 { 0, NULL }
732 /* CR Cipher Response (octet 1) */
733 static const value_string CR_vals[] = {
734 { 0, "IMEISV shall not be included"},
735 { 1, "IMEISV shall be included"},
736 { 0, NULL }
739 /* SAPI ID, SAPI Identifier (octet 3) */
740 static const value_string sapi_id_vals[] = {
741 { 0, "SAPI 0 (all other except SMS)"},
742 { 3, "SAPI 3 (SMS)"},
743 { 0, NULL }
745 /* Sample Size (octet 3)*/
746 static const value_string sample_size_vals[] = {
747 { 20, "20 ms of CS payload included in each RTP/UDP packet"},
748 { 40, "40 ms of CS payload included in each RTP/UDP packet"},
749 { 60, "60 ms of CS payload included in each RTP/UDP packet"},
750 { 80, "80 ms of CS payload included in each RTP/UDP packet"},
751 { 0, NULL }
755 /* MPS, Manual PLMN Selection indicator (octet 3) */
756 static const value_string mps_vals[] = {
757 { 0, "The MS is in Automatic PLMN selection mode."},
758 { 1, "The MS is in Manual PLMN selection mode and request the list of PLMN identities that may provide UMAN service in the current location."},
759 { 2, "The MS is in Manual PLMN selection mode and tries to register; no PLMN list is needed."},
760 { 0, NULL }
763 /* CBS Cell Broadcast Service (octet 3) */
764 static const value_string cbs_vals[] = {
765 { 0, "CBS is not required by the Mobile station"},
766 { 1, "CBS is required by the mobile station"},
767 { 0, NULL }
770 /* LBLI, Location Black List indicator (octet 3) */
771 static const value_string LBLI_vals[] = {
772 { 0, "MCC"},
773 { 1, "MCC and MNC"},
774 { 2, "MCC, MNC and LAC"},
775 { 0, NULL }
777 /* AP Service Name type */
778 static const value_string ap_service_name_type_vals[] = {
779 { 0, "SSID"},
780 { 1, "PAN Service Name"},
781 { 0, NULL }
784 /* UMA Service Zone Icon Indicator, octet 3 */
785 static const value_string uma_service_zone_icon_ind_vals[] = {
786 { 1, "Unlimited Calls"},
787 { 0, NULL }
789 /*Establishment Cause (octet 3)*/
790 static const value_string uma_establishment_cause_val[] = {
791 { 0x00, "Location Update"},
792 { 0x10, "Other SDCCH procedures including IMSI Detach, SMS, SS, paging response"},
793 /* note: Paging response for SDCCH needed is using codepoint 0001 0000 */
794 { 0x20, "Paging response (TCH/F needed)"},
795 { 0x30, "Paging response (TCH/F or TCH/H needed)"},
796 { 0x40, "Originating speech call from dual-rate mobile station when TCH/H is sufficient"},
797 { 0x50, "Originating data call from dual-rate mobile station when TCH/H is sufficient"},
798 { 0x80, "Paging response (any channel needed)"},
799 { 0xa0, "Emergency"},
800 { 0xc0, "Call re-establishment"},
801 { 0xe0, "Originating speech call and TCH/F is needed"},
802 { 0xf0, "Originating data call and TCH/F is needed"},
803 { 0, NULL }
805 static value_string_ext uma_establishment_cause_val_ext = VALUE_STRING_EXT_INIT(uma_establishment_cause_val);
807 /*CHANNEL (octet 3) */
808 static const value_string channel_vals[] = {
809 { 0, "Any channel"},
810 { 1, "SDCCH"},
811 { 2, "TCH/F (Full rate)"},
812 { 3, "TCH/H or TCH/F (Dual rate)"},
813 { 0, NULL }
816 /*RI, Reset Indicator (octet 3)*/
817 /*CHANNEL (octet 3) */
818 static const value_string RI_vals[] = {
819 { 0, "The flow control condition continues to exist"},
820 { 1, "The flow control condition no longer exists"},
821 { 0, NULL }
824 /* Window Size (octet 3 to octet n) */
826 static const value_string window_size_vals[] = {
827 { 0, "Window size 1, No redundancy"},
828 { 1, "Window size 2 (single redundancy)"},
829 { 2, "Window size 3 (double redundancy)"},
830 { 0, NULL }
833 static const value_string UTRAN_cell_id_disc_vals[] = {
834 { 0, "PLMN-ID, LAC and a 28-bit Cell Id are used to identify the target UTRAN cell."},
835 { 0, NULL }
838 /* SUTI, Serving UNC table indicator indicator (octet 3) */
840 static const value_string suti_vals[] = {
841 { 0, "The MS is not allowed to store information in the stored Serving UNC table."},
842 { 1, "The MS is allowed to store information in the stored Serving UNC table."},
843 { 0, NULL }
845 /* Code to actually dissect the packets */
847 static int
848 dissect_uma_IE(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset)
850 tvbuff_t *l3_tvb;
851 tvbuff_t *llc_tvb;
852 tvbuff_t *new_tvb;
853 int ie_offset;
854 uint8_t ie_value;
855 uint16_t ie_len = 0;
856 uint8_t octet;
857 proto_item *urr_ie_item;
858 proto_tree *urr_ie_tree;
859 const uint8_t *string;
860 uint16_t GPRS_user_data_transport_UDP_port,UNC_tcp_port,RTP_UDP_port,RTCP_UDP_port;
861 uint32_t udr;
862 conversation_t *conversation;
863 address dst_addr, null_addr;
864 uint8_t str_len;
865 address src_addr;
867 ie_value = tvb_get_uint8(tvb,offset);
868 urr_ie_tree = proto_tree_add_subtree(tree,tvb,offset,-1, ett_urr_ie, &urr_ie_item,
869 val_to_str_ext(ie_value, &uma_urr_IE_type_vals_ext, "Unknown IE (%u)"));
871 proto_tree_add_item(urr_ie_tree, hf_uma_urr_IE, tvb, offset, 1, ENC_BIG_ENDIAN);
872 offset++;
873 /* Some IE:s might have a length field of 2 octets */
874 ie_len = tvb_get_uint8(tvb,offset);
875 if ( (ie_len & 0x80) == 0x80 ){
876 offset++;
877 ie_len = (ie_len & 0x7f) << 8;
878 ie_len = ie_len | (tvb_get_uint8(tvb,offset));
879 proto_item_set_len(urr_ie_item, ie_len + 3);
880 proto_tree_add_uint(urr_ie_tree, hf_uma_urr_IE_len , tvb, offset-1, 2, ie_len );
881 ie_offset = offset +1;
882 }else{
883 proto_item_set_len(urr_ie_item, ie_len + 2);
884 proto_tree_add_item(urr_ie_tree, hf_uma_urr_IE_len, tvb, offset, 1, ENC_BIG_ENDIAN);
885 ie_offset = offset +1;
888 switch(ie_value){
889 /* 11.2.1 Mobile Identity */
890 case 1:
891 /* Mobile Identity
892 * The rest of the IE is coded as in [TS 24.008] not including IEI and
893 * length, if present.(10.5.1.4)
895 de_mid(tvb, urr_ie_tree, pinfo, ie_offset, ie_len, NULL, 0);
896 break;
898 case 2:
899 /* UMA Release Indicator */
900 proto_tree_add_item(urr_ie_tree, hf_uma_urr_uri, tvb, ie_offset, 1, ENC_BIG_ENDIAN);
901 break;
902 case 3: /* Radio Identity */
903 proto_tree_add_item(urr_ie_tree, hf_uma_urr_radio_type_of_id, tvb, ie_offset, 1, ENC_BIG_ENDIAN);
904 octet = tvb_get_uint8(tvb,ie_offset);
905 if (( octet & 0xf) == 0){ /* IEEE MAC-address format */
906 ie_offset++;
907 proto_tree_add_item(urr_ie_tree, hf_uma_urr_radio_id, tvb, ie_offset, ie_len-1, ENC_NA);
908 }else{
909 proto_tree_add_expert(urr_ie_tree, pinfo, &ei_uma_unknown_format, tvb, ie_offset, ie_len);
911 break;
912 case 4:
913 /* Cell Identity
914 * The rest of the IE is coded as in [TS 24.008] not including IEI and length, if present.
916 proto_tree_add_item(urr_ie_tree, hf_uma_urr_cell_id, tvb, ie_offset, 2, ENC_BIG_ENDIAN);
917 break;
918 case 5:
919 /* Location Area Identification
920 * The rest of the IE is coded as in [TS 24.008] not including IEI and
921 * length, if present.
923 de_lai(tvb, urr_ie_tree, pinfo, ie_offset, ie_len, NULL, 0);
924 break;
925 case 6:
926 /* GSM Coverage Indicator */
927 proto_tree_add_item(urr_ie_tree, hf_uma_urr_gci, tvb, ie_offset, 1, ENC_BIG_ENDIAN);
928 break;
929 case 7:
930 /* 11.2.7 GAN Classmark */
931 proto_tree_add_item(urr_ie_tree, hf_uma_urr_tura, tvb, ie_offset, 1, ENC_BIG_ENDIAN);
932 proto_tree_add_item(urr_ie_tree, hf_uma_urr_gc, tvb, ie_offset, 1, ENC_BIG_ENDIAN);
933 proto_tree_add_item(urr_ie_tree, hf_uma_urr_uc, tvb, ie_offset, 1, ENC_BIG_ENDIAN);
934 /* UMA Protocols (Stage 3) R1.0.3 */
935 if(ie_len>1){
936 ie_offset++;
937 proto_tree_add_item(urr_ie_tree, hf_uma_urr_gmsi, tvb, ie_offset, 1, ENC_BIG_ENDIAN);
938 proto_tree_add_item(urr_ie_tree, hf_uma_urr_psho, tvb, ie_offset, 1, ENC_BIG_ENDIAN);
939 proto_tree_add_item(urr_ie_tree, hf_uma_urr_rrs, tvb, ie_offset, 1, ENC_BIG_ENDIAN);
941 break;
942 case 8:
943 /* Geographical Location
944 * The Location Estimate field is composed of 1 or more octets with an internal structure
945 * according to section 7 in [23.032].
947 new_tvb = tvb_new_subset_length(tvb, ie_offset, ie_len );
948 dissect_geographical_description(new_tvb, pinfo, urr_ie_tree);
949 break;
950 case 9:
951 /* UNC SGW IP Address
952 * IP Address type
954 octet = tvb_get_uint8(tvb,ie_offset);
955 proto_tree_add_item(urr_ie_tree, hf_uma_urr_IP_Address_type, tvb, ie_offset, 1, ENC_BIG_ENDIAN);
956 ie_offset++;
957 if ( octet == 0x57 ){ /* IPv6 */
959 }else{ /* All other values shall be interpreted as Ipv4 address in this version of the protocol.*/
960 proto_tree_add_item(urr_ie_tree, hf_uma_urr_sgw_ipv4, tvb, ie_offset, 4, ENC_BIG_ENDIAN);
963 break;
964 case 10: /* UNC SGW Fully Qualified Domain/Host Name */
965 if ( ie_len > 0){
966 proto_tree_add_item(urr_ie_tree, hf_uma_urr_FQDN, tvb, ie_offset, ie_len, ENC_ASCII);
967 }else{
968 proto_tree_add_expert(urr_ie_tree, pinfo, &ei_uma_fqdn_not_present, tvb, offset, 1);
970 break;
971 case 11: /* Redirection Counter */
972 proto_tree_add_item(urr_ie_tree, hf_uma_urr_redirection_counter, tvb, ie_offset, 1, ENC_BIG_ENDIAN);
973 break;
974 case 12: /* 11.2.12 Discovery Reject Cause */
975 proto_tree_add_item(urr_ie_tree, hf_uma_urr_dis_rej_cau, tvb, ie_offset, 1, ENC_BIG_ENDIAN);
976 break;
977 case 13:
978 /* 11.2.13 GAN Cell Description
979 * The rest of the IE is coded as in [TS 44.018], Cell Description IE, not including IEI and length, if present
981 de_rr_cell_dsc(tvb, urr_ie_tree, pinfo, ie_offset, ie_len, NULL, 0);
982 break;
983 case 14:
985 * 11.2.14 GAN Control Channel Description
987 proto_tree_add_item(urr_ie_tree, hf_uma_urr_ECMC, tvb, ie_offset, 1, ENC_BIG_ENDIAN);
988 proto_tree_add_item(urr_ie_tree, hf_uma_urr_NMO, tvb, ie_offset, 1, ENC_BIG_ENDIAN);
989 proto_tree_add_item(urr_ie_tree, hf_uma_urr_GPRS, tvb, ie_offset, 1, ENC_BIG_ENDIAN);
990 proto_tree_add_item(urr_ie_tree, hf_uma_urr_DTM, tvb, ie_offset, 1, ENC_BIG_ENDIAN);
991 proto_tree_add_item(urr_ie_tree, hf_uma_urr_ATT, tvb, ie_offset, 1, ENC_BIG_ENDIAN);
992 proto_tree_add_item(urr_ie_tree, hf_uma_urr_MSCR, tvb, ie_offset, 1, ENC_BIG_ENDIAN);
993 /* T3212 timeout value */
994 ie_offset++;
995 proto_tree_add_item(urr_ie_tree, hf_uma_urr_T3212_timer, tvb, ie_offset, 1, ENC_BIG_ENDIAN);
996 /* RAC, Routing Area Code (octet 5) */
997 ie_offset++;
998 proto_tree_add_item(urr_ie_tree, hf_uma_urr_RAC, tvb, ie_offset, 1, ENC_BIG_ENDIAN);
999 ie_offset++;
1000 /* SGSNR, SGSN Release (octet 6) B1*/
1001 proto_tree_add_item(urr_ie_tree, hf_uma_urr_SGSNR, tvb, ie_offset, 1, ENC_BIG_ENDIAN);
1002 proto_tree_add_item(urr_ie_tree, hf_uma_urr_ECMP, tvb, ie_offset, 1, ENC_BIG_ENDIAN);
1003 proto_tree_add_item(urr_ie_tree, hf_uma_urr_RE, tvb, ie_offset, 1, ENC_BIG_ENDIAN);
1004 proto_tree_add_item(urr_ie_tree, hf_uma_urr_PFCFM, tvb, ie_offset, 1, ENC_BIG_ENDIAN);
1005 proto_tree_add_item(urr_ie_tree, hf_uma_urr_3GECS, tvb, ie_offset, 1, ENC_BIG_ENDIAN);
1006 /* PS HO, PS Handover indicator (octet 6) Bit 6 */
1008 ie_offset++;
1009 proto_tree_add_item(urr_ie_tree, hf_uma_access_control_class_n, tvb, ie_offset, 2, ENC_NA);
1010 /* These fields are specified and described in 3GPP TS 44.018 and 3GPP TS 22.011. */
1011 break;
1012 case 15:
1013 /* 11.2.15 Cell Identifier List
1014 * The rest of the IE is coded as in [TS 48.008], not including IEI and length, if present
1016 be_cell_id_list(tvb, urr_ie_tree, pinfo, ie_offset, ie_len, NULL, 0);
1017 break;
1018 case 16: /* TU3907 Timer */
1019 proto_tree_add_item(urr_ie_tree, hf_uma_urr_TU3907_timer, tvb, ie_offset, 2, ENC_BIG_ENDIAN);
1020 break;
1021 case 17: /* 11.2.17 GSM RR/UTRAN RRC State */
1022 proto_tree_add_item(urr_ie_tree, hf_uma_urr_GSM_RR_state, tvb, ie_offset, 1, ENC_BIG_ENDIAN);
1023 break;
1024 case 18: /* 11.2.18 Routing Area Identification */
1025 /* The rest of the IE is coded as in [TS 24.008] not including IEI and length, if present.*/
1026 de_gmm_rai(tvb, urr_ie_tree, pinfo, ie_offset, ie_len, NULL, 0);
1027 break;
1028 case 19: /* 11.2.19 GAN Band */
1029 proto_tree_add_item(urr_ie_tree, hf_uma_urr_gan_band, tvb, ie_offset, 1, ENC_BIG_ENDIAN);
1030 break;
1031 case 20: /* 11.2.20 GAN State */
1032 /* URS, GA-RC/GA-CSR State (octet 3) Bits 2-1 */
1033 proto_tree_add_item(urr_ie_tree, hf_uma_urr_URR_state, tvb, ie_offset, 1, ENC_BIG_ENDIAN);
1034 /* UPS, GA-PSR State (octet 3) Bit 3 */
1035 /* GA-RRC-CS, GA-RRC (CS) State (octet 3) Bit 4 */
1036 /* GA-RRC-PS, GA-RRC (PS) State (octet 3) Bit 5 */
1037 break;
1038 case 21: /* 11.2.21 Register Reject Cause */
1039 proto_tree_add_item(urr_ie_tree, hf_uma_urr_register_reject_cause, tvb, ie_offset, 1, ENC_BIG_ENDIAN);
1040 break;
1041 case 22: /* 11.2.22 TU3906 Timer */
1042 proto_tree_add_item(urr_ie_tree, hf_uma_urr_TU3906_timer, tvb, ie_offset, 2, ENC_BIG_ENDIAN);
1043 break;
1044 case 23: /* 11.2.23 TU3910 Timer */
1045 proto_tree_add_item(urr_ie_tree, hf_uma_urr_TU3910_timer, tvb, ie_offset, 2, ENC_BIG_ENDIAN);
1046 break;
1047 case 24: /* 11.2.24 TU3902 Timer */
1048 proto_tree_add_item(urr_ie_tree, hf_uma_urr_TU3902_timer, tvb, ie_offset, 2, ENC_BIG_ENDIAN);
1049 break;
1050 case 25:
1051 /* 11.2.25 Communication Port Identity */
1052 proto_tree_add_item(urr_ie_tree, hf_uma_urr_communication_port, tvb, ie_offset, 2, ENC_BIG_ENDIAN);
1053 break;
1055 case 26:
1056 /* 11.2.26 L3 Message
1057 * The L3 Message information element contains the upper layer message to be transported
1058 * using the GA-CSR protocol or the GA-RRC protocol between the MS and the core network.
1060 proto_tree_add_item(urr_ie_tree, hf_uma_urr_L3_protocol_discriminator, tvb, ie_offset, 1, ENC_BIG_ENDIAN);
1061 proto_tree_add_item(urr_ie_tree, hf_uma_urr_L3_Message, tvb, ie_offset, ie_len, ENC_NA);
1062 l3_tvb = tvb_new_subset_length(tvb, ie_offset, ie_len );
1063 if (!dissector_try_uint(bssap_pdu_type_table,BSSAP_PDU_TYPE_DTAP, l3_tvb, pinfo, urr_ie_tree))
1064 call_data_dissector(l3_tvb, pinfo, urr_ie_tree);
1065 break;
1066 case 27:
1067 /* 11.2.27 Channel Mode
1068 * The rest of the IE is coded as in [TS 44.018], not including IEI and length, if present
1070 de_rr_ch_mode(tvb, urr_ie_tree, pinfo, ie_offset, ie_len, NULL, 0);
1071 break;
1072 case 28:
1073 /* 11.2.28 Mobile Station Classmark 2
1074 * The rest of the IE is coded as in [TS 24.008], not including IEI and length, if present
1076 de_ms_cm_2(tvb, urr_ie_tree, pinfo, ie_offset, ie_len, NULL, 0);
1077 break;
1078 case 29:
1079 /* 11.2.29 RR Cause
1080 * The rest of the IE is coded as in [TS 44.018], not including IEI and length, if present
1082 de_rr_cause(tvb, urr_ie_tree, pinfo, ie_offset, 1, NULL, 0);
1083 break;
1084 case 30:
1085 /* 11.2.30 Cipher Mode Setting
1086 * Note: The coding of fields SC and algorithm identifier is defined in [44.018]
1087 * as part of the Cipher Mode Setting IE.
1089 de_rr_cip_mode_set(tvb, urr_ie_tree, pinfo, ie_offset, ie_len, NULL, 0);
1090 break;
1091 case 31:
1092 /* 11.2.31 GPRS Resumption
1093 * The rest of the IE is coded as in [TS 44.018], not including IEI and length, if present
1095 proto_tree_add_item(urr_ie_tree, hf_uma_urr_GPRS_resumption, tvb, ie_offset, 1, ENC_BIG_ENDIAN);
1096 break;
1097 case 32:
1098 /* 11.2.32 Handover From GAN Command
1099 * If the target RAT is GERAN, the rest of the IE is coded as HANDOVER COMMAND message in [TS 44.018]
1100 * If the target RAT is UTRAN, the rest of the IE is coded as
1101 * HANDOVER TO UTRAN COMMAND message in [TS 25.331].
1103 proto_tree_add_item(urr_ie_tree, hf_uma_urr_L3_protocol_discriminator, tvb, ie_offset, 1, ENC_BIG_ENDIAN);
1104 proto_tree_add_item(urr_ie_tree, hf_uma_urr_L3_Message, tvb, ie_offset, ie_len, ENC_NA);
1105 /* XXX the dissector to call should depend on the RAT type ??? */
1106 l3_tvb = tvb_new_subset_length(tvb, ie_offset, ie_len );
1107 if (!dissector_try_uint(bssap_pdu_type_table,BSSAP_PDU_TYPE_DTAP, l3_tvb, pinfo, urr_ie_tree))
1108 call_data_dissector(l3_tvb, pinfo, urr_ie_tree);
1109 break;
1110 case 33:
1111 /* 11.2.33 UL Quality Indication */
1112 proto_tree_add_item(urr_ie_tree, hf_uma_urr_ULQI, tvb, ie_offset, 1, ENC_BIG_ENDIAN);
1113 break;
1114 case 34:
1115 /* 11.2.34 TLLI
1116 * The rest of the IE is coded as in [TS 44.018], not including IEI and length, if present.
1117 * [TS 44.018]:10.5.2.41a
1118 * The TLLI is encoded as a binary number with a length of 4 octets. TLLI is defined in 3GPP TS 23.003
1120 de_rr_tlli(tvb, urr_ie_tree, pinfo, ie_offset, ie_len, NULL, 0);
1121 break;
1122 case 35:
1123 /* 11.2.35 Packet Flow Identifier
1124 * The rest of the IE is coded as in [TS 24.008], not including IEI and length, if present.
1126 de_sm_pflow_id(tvb, urr_ie_tree, pinfo, ie_offset, ie_len, NULL, 0);
1127 break;
1128 case 36:
1129 /* 11.2.36 Suspension Cause
1130 * The rest of the IE is coded as in [TS 44.018], not including IEI and length, if present.
1132 de_rr_sus_cau(tvb, urr_ie_tree, pinfo, ie_offset, ie_len, NULL, 0);
1133 break;
1134 case 37: /* 11.2.37 TU3920 Timer */
1135 proto_tree_add_item(urr_ie_tree, hf_uma_urr_TU3920_timer, tvb, ie_offset, 2, ENC_BIG_ENDIAN);
1136 break;
1137 /* 11.2.38 QoS */
1138 case 38:
1139 /* QoS
1140 * PEAK_THROUGHPUT_CLASS (octet 3, bits 1-4)
1141 * This field is coded as PEAK_THROUGHPUT_CLASS field in
1142 * the Channel Request Description information
1143 * element specified in [TS 44.060]
1145 proto_tree_add_item(urr_ie_tree, hf_uma_urr_peak_tpt_cls, tvb, ie_offset, 1, ENC_BIG_ENDIAN);
1146 /* RADIO_PRIORITY (octet 3, bits 5-6) */
1147 proto_tree_add_item(urr_ie_tree, hf_uma_urr_radio_pri, tvb, ie_offset, 1, ENC_BIG_ENDIAN);
1148 /* RLC_MODE (octet 3, bit 7) */
1149 proto_tree_add_item(urr_ie_tree, hf_uma_urr_rlc_mode, tvb, ie_offset, 1, ENC_BIG_ENDIAN);
1150 /* PEAK_THROUGHPUT_CLASS (octet 3, bits 1-4)*/
1151 break;
1152 case 39: /* 11.2.39 GA-PSR Cause */
1153 proto_tree_add_item(urr_ie_tree, hf_uma_urr_ga_psr_cause, tvb, ie_offset, 1, ENC_BIG_ENDIAN);
1154 break;
1155 case 40: /* 11.2.40 User Data Rate */
1156 /* The R field is the binary encoding of the rate information expressed in 100 bits/sec
1157 * increments, starting from 0 x 100 bits/sec until 16777215 x 100 bits/sec (1.6 Gbps).
1159 udr = tvb_get_ntoh24(tvb, ie_offset) * 100;
1160 proto_tree_add_uint(urr_ie_tree, hf_uma_urr_udr , tvb, ie_offset, 3, udr );
1161 break;
1162 case 41:
1163 /* 11.2.41 Routing Area Code
1164 * The rest of the IE is coded as in [TS 23.003] not including IEI and length, if present.
1166 proto_tree_add_item(urr_ie_tree, hf_uma_urr_RAC, tvb, ie_offset, 1, ENC_BIG_ENDIAN);
1167 break;
1168 case 42:
1169 /* 11.2.42 AP Location
1170 * The rest of the IE is coded as in [GEOPRIV], not including IEI and length, if present
1171 * https://tools.ietf.org/html/draft-ietf-geopriv-dhcp-civil-05
1173 proto_tree_add_item(urr_ie_tree, hf_uma_urr_ap_location, tvb, ie_offset, ie_len, ENC_NA);
1174 break;
1175 case 43: /* 11.2.43 TU4001 Timer */
1176 proto_tree_add_item(urr_ie_tree, hf_uma_urr_TU4001_timer, tvb, ie_offset, 2, ENC_BIG_ENDIAN);
1177 break;
1178 case 44: /* 11.2.44 Location Status */
1179 proto_tree_add_item(urr_ie_tree, hf_uma_urr_LS, tvb, ie_offset, 1, ENC_BIG_ENDIAN);
1180 break;
1181 case 45: /* Cipher Response */
1182 proto_tree_add_item(urr_ie_tree, hf_uma_urr_cipher_res, tvb, ie_offset, 1, ENC_BIG_ENDIAN);
1183 break;
1184 case 46: /* Ciphering Command RAND */
1185 proto_tree_add_item(urr_ie_tree, hf_uma_urr_rand_val, tvb, ie_offset, ie_len, ENC_NA);
1186 break;
1187 case 47: /* Ciphering Command MAC (Message Authentication Code)*/
1188 proto_tree_add_item(urr_ie_tree, hf_uma_urr_ciphering_command_mac, tvb, ie_offset, ie_len, ENC_NA);
1189 break;
1190 case 48: /* Ciphering Key Sequence Number */
1191 proto_tree_add_item(urr_ie_tree, hf_uma_urr_ciphering_key_seq_num, tvb, ie_offset, 1, ENC_BIG_ENDIAN);
1192 break;
1193 case 49: /* SAPI ID */
1194 proto_tree_add_item(urr_ie_tree, hf_uma_urr_sapi_id, tvb, ie_offset, 1, ENC_BIG_ENDIAN);
1195 break;
1196 case 50: /* 11.2.50 Establishment Cause */
1197 proto_tree_add_item(urr_ie_tree, hf_uma_urr_establishment_cause, tvb, ie_offset, 1, ENC_BIG_ENDIAN);
1198 break;
1199 case 51: /* Channel Needed */
1200 proto_tree_add_item(urr_ie_tree, hf_uma_urr_channel, tvb, ie_offset, 1, ENC_BIG_ENDIAN);
1201 break;
1202 case 52: /* PDU in Error */
1203 proto_tree_add_item(urr_ie_tree, hf_uma_urr_PDU_in_error, tvb, ie_offset, ie_len, ENC_NA);
1204 break;
1205 case 53:
1206 /* Sample Size
1208 proto_tree_add_item(urr_ie_tree, hf_uma_urr_sample_size, tvb, ie_offset, 1, ENC_BIG_ENDIAN);
1209 break;
1210 case 54:
1211 /* 11.2.54 Payload Type
1212 * Payload Type (octet 3) Allowed values are between 96 and 127.
1214 proto_tree_add_item(urr_ie_tree, hf_uma_urr_payload_type, tvb, ie_offset, 1, ENC_BIG_ENDIAN);
1215 break;
1216 /* 11.2.55 Multirate Configuration */
1217 case 55:
1218 /* Multi-rate Configuration
1219 * The rest of the IE is coded as in [TS 44.018], not including IEI and length, if present
1221 de_rr_multirate_conf(tvb, urr_ie_tree, pinfo, ie_offset, ie_len, NULL, 0);
1222 break;
1223 case 56:
1224 /* 11.2.56 Mobile Station Classmark 3
1225 * The rest of the IE is coded as in [TS 24.008], not including IEI and length, if present
1227 de_ms_cm_3(tvb, urr_ie_tree, pinfo, offset, ie_len, NULL, 0);
1228 break;
1229 case 57:
1230 /* 11.2.57 LLC-PDU
1231 * The rest of the IE is coded as in [TS 48.018], not including IEI and length, if present
1233 proto_tree_add_item(urr_ie_tree, hf_uma_urr_LLC_PDU, tvb, ie_offset, ie_len, ENC_NA);
1234 llc_tvb = tvb_new_subset_length(tvb, ie_offset, ie_len );
1235 if (llc_handle) {
1236 col_append_str(pinfo->cinfo, COL_PROTOCOL, "/");
1237 col_set_fence(pinfo->cinfo, COL_PROTOCOL);
1238 call_dissector(llc_handle, llc_tvb, pinfo, urr_ie_tree);
1239 }else{
1240 call_data_dissector(llc_tvb, pinfo, urr_ie_tree);
1242 break;
1243 case 58: /* 11.2.58 Location Black List indicator */
1244 proto_tree_add_item(urr_ie_tree, hf_uma_urr_LBLI, tvb, ie_offset, 1, ENC_BIG_ENDIAN);
1245 break;
1246 case 59: /* 11.2.59 Reset Indicator */
1247 proto_tree_add_item(urr_ie_tree, hf_uma_urr_RI, tvb, ie_offset, 1, ENC_BIG_ENDIAN);
1248 break;
1249 case 60: /* TU4003 Timer */
1250 proto_tree_add_item(urr_ie_tree, hf_uma_urr_TU4003_timer, tvb, ie_offset, 2, ENC_BIG_ENDIAN);
1251 break;
1252 case 61:
1253 /* AP Service Name */
1254 proto_tree_add_item(urr_ie_tree, hf_uma_urr_ap_service_name_type, tvb, ie_offset, 1, ENC_BIG_ENDIAN);
1255 ie_offset++;
1256 /* AP Service Name value (octet 4 to octet n)
1257 * The AP Service Name is coded as a string according to UTF-8 format defined in RFC
1258 * 3629 [50]. This means that the 1st octet of the UTF-8 string is coded in octet 4 and the
1259 * last octet of the UTF-8 string is coded in the last octet of this IE (octet n).
1261 proto_tree_add_item(urr_ie_tree, hf_uma_urr_ap_Service_name_value, tvb, ie_offset, ie_len -1, ENC_ASCII);
1262 break;
1263 case 62:
1264 /* 11.2.62 GAN Service Zone Information
1265 * UMA Service Zone Icon Indicator, octet 3
1267 proto_tree_add_item(urr_ie_tree, hf_uma_urr_uma_service_zone_icon_ind, tvb, ie_offset, 1, ENC_BIG_ENDIAN);
1268 ie_offset++;
1269 /* Length of UMA Service Zone string */
1270 proto_tree_add_item(urr_ie_tree, hf_uma_urr_uma_service_zone_str_len, tvb, ie_offset, 1, ENC_BIG_ENDIAN);
1271 str_len = tvb_get_uint8(tvb,ie_offset);
1272 ie_offset++;
1273 /* UMA Service Zone string, 1st character */
1274 proto_tree_add_item(urr_ie_tree, hf_uma_urr_uma_service_zone_str, tvb, ie_offset, str_len, ENC_ASCII);
1275 break;
1276 /* 11.2.63 RTP Redundancy Configuration */
1277 case 63:
1278 /* RTP Redundancy Configuration */
1279 /* For each mode of the AMR Active Mode Set, as signaled in the Multi-rate Configuration IE, the window size for
1280 * including redundant frames is indicated. So if e.g. the Active Mode Set contains four active modes, then the
1281 * Redundancy Configuration IE consists of six octets, of which four indicate the Codec Mode to Window Size mapping.
1283 /* XXX TODO: loop ower the octets */
1284 /* Window Size (octet 3 to octet n) Bits 2 1 */
1285 proto_tree_add_item(urr_ie_tree, hf_uma_urr_window_size, tvb, ie_offset, 1, ENC_BIG_ENDIAN);
1286 /* GAN A/Gb Mode Codec Mode (octet 3 to octet n) Bits 8 7
1287 * The GAN A/Gb Mode Codec Mode is coded as in [47] sub-clause 3.4.1
1289 proto_tree_add_item(urr_ie_tree, hf_uma_urr_uma_codec_mode, tvb, ie_offset, 1, ENC_BIG_ENDIAN);
1290 /* GAN Iu Mode Codec Mode (octet 3 to octet n) Bits 6 5 4 3 */
1291 break;
1292 case 64:
1293 /* 11.2.64 UTRAN Classmark
1294 * The rest of the IE is the INTER RAT HANDOVER INFO coded as in
1295 * [TS 25.331], not including IEI and length, if present
1297 new_tvb = tvb_new_subset_length(tvb, ie_offset, ie_len );
1298 dissect_rrc_InterRATHandoverInfo_PDU(new_tvb, pinfo, urr_ie_tree, NULL);
1299 break;
1300 case 65:
1301 /* 11.2.65 Classmark Enquiry Mask
1302 * The rest of the IE is the Classmark Enquiry Mask coded as in [TS 44.018], not including IEI and length, if present
1304 de_rr_cm_enq_mask(tvb, urr_ie_tree, pinfo, offset, ie_len, NULL, 0);
1305 break;
1306 case 66:
1307 /* 11.2.66 UTRAN Cell Identifier List
1308 * UTRAN Cell Identification Discriminator
1310 proto_tree_add_item(urr_ie_tree, hf_uma_urr_UTRAN_cell_id_disc, tvb, ie_offset, 1, ENC_BIG_ENDIAN);
1311 octet = tvb_get_uint8(tvb,ie_offset);
1312 ie_offset++;
1313 if ( octet == 0 ){
1314 ie_offset = dissect_e212_mcc_mnc(tvb, pinfo, urr_ie_tree, ie_offset, E212_NONE, true);
1315 proto_tree_add_item(urr_ie_tree, hf_uma_urr_lac, tvb, ie_offset, 2, ENC_BIG_ENDIAN);
1316 /*ie_offset = ie_offset + 2;*/
1317 /* The octets 9-12 are coded as shown in 3GPP TS 25.331, Table 'Cell identity'.
1318 * 10.3.2.2 Cell identity
1319 * This information element identifies a cell unambiguously within a PLMN.
1320 * NOTE: This information element may carry any implementation dependent identity that unambiguously identifies a
1321 * cell within a PLMN.
1322 * Cell identity - bit string(28)
1325 break;
1326 case 67:
1327 /* 11.2.67 Serving GANC table indicator */
1328 proto_tree_add_item(urr_ie_tree, hf_uma_urr_suti, tvb, ie_offset, 1, ENC_BIG_ENDIAN);
1329 break;
1330 case 68:
1331 /* 11.2.68 Registration indicators */
1332 proto_tree_add_item(urr_ie_tree, hf_uma_urr_uma_mps, tvb, ie_offset, 1, ENC_BIG_ENDIAN);
1333 break;
1334 case 69:
1335 /* 11.2.69 GAN PLMN List */
1336 octet = tvb_get_uint8(tvb,ie_offset);
1337 proto_tree_add_uint(urr_ie_tree, hf_uma_urr_num_of_plms , tvb, ie_offset, 1, octet);
1338 /* TODO insert while loop here */
1339 proto_tree_add_item(urr_ie_tree, hf_uma_urr_lac, tvb, ie_offset, 2, ENC_BIG_ENDIAN);
1340 break;
1341 case 70:
1342 /* 11.2.70 GERAN Received Signal Level List */
1343 while(ie_offset<=(offset + ie_len)){
1344 proto_tree_add_item(urr_ie_tree, hf_uma_urr_RXLEV_NCELL, tvb, ie_offset, 1, ENC_BIG_ENDIAN);
1345 ie_offset++;
1347 break;
1348 case 71:
1349 /* 11.2.71 Required GAN Services */
1350 /* CBS Cell Broadcast Service (octet 3) */
1351 proto_tree_add_item(urr_ie_tree, hf_uma_urr_cbs, tvb, ie_offset, 1, ENC_BIG_ENDIAN);
1352 break;
1353 case 72:
1354 /* 11.2.72 Broadcast Container */
1355 proto_tree_add_item(urr_ie_tree, hf_uma_urr_num_of_cbs_frms , tvb, ie_offset, 1, ENC_BIG_ENDIAN);
1356 /* The coding of the page of the CBS message is defined in sub-clause 9.4.1 in TS 23.041. */
1357 proto_tree_add_expert(urr_ie_tree, pinfo, &ei_uma_cbs_frames, tvb, ie_offset + 1, ie_len-1);
1358 break;
1359 case 73:
1360 /* 11.2.73 3G Cell Identity */
1361 /* The rest of the IE is coded as in [TS 25.331] not including IEI and length, if present.
1362 * See Annex F for coding
1364 break;
1365 case 79:
1366 /* 11.2.79 GAN Mode Indicator */
1367 case 80:
1368 /* 11.2.80 CN Domain Identity */
1369 case 81:
1370 /* 11.2.81 GAN Iu Mode Cell Description */
1371 case 82:
1372 /* 11.2.82 3G UARFCN */
1373 case 83:
1374 /* 11.2.83 RAB ID */
1375 case 84:
1376 /* 11.2.84 RAB ID List */
1377 case 85:
1378 /* 11.2.85 GA-RRC Establishment Cause */
1379 case 86:
1380 /* 11.2.86 GA-RRC Cause */
1381 case 87:
1382 /* 11.2.87 GA-RRC Paging Cause */
1383 case 88:
1384 /* 11.2.88 Intra Domain NAS Node Selector */
1385 case 89:
1386 /* 11.2.89 CTC Activation List */
1387 case 90:
1388 /* 11.2.90 CTC Description */
1389 case 91:
1390 /* 11.2.91 CTC Activation Ack List */
1391 case 92:
1392 /* 11.2.92 CTC Activation Ack Description */
1393 case 93:
1394 /* 11.2.93 CTC Modification List */
1395 case 94:
1396 /* 11.2.94 CTC Modification Ack List */
1397 case 95:
1398 /* 11.2.95 CTC Modification Ack Description */
1399 proto_tree_add_item(urr_ie_tree, hf_uma_data, tvb, ie_offset, ie_len, ENC_NA);
1400 break;
1401 case 96: /* MS Radio Identity */
1402 proto_tree_add_item(urr_ie_tree, hf_uma_urr_radio_type_of_id, tvb, ie_offset, 1, ENC_BIG_ENDIAN);
1403 octet = tvb_get_uint8(tvb,ie_offset);
1404 if (( octet & 0xf) == 0){ /* IEEE MAC-address format */
1405 ie_offset++;
1406 proto_tree_add_item(urr_ie_tree, hf_uma_urr_ms_radio_id, tvb, ie_offset, ie_len-1, ENC_NA);
1407 }else{
1408 proto_tree_add_expert(urr_ie_tree, pinfo, &ei_uma_unknown_format, tvb, ie_offset, ie_len);
1410 break;
1412 case 97:
1413 /* UNC IP Address
1414 * IP Address type
1416 octet = tvb_get_uint8(tvb,ie_offset);
1417 proto_tree_add_item(urr_ie_tree, hf_uma_urr_IP_Address_type, tvb, ie_offset, 1, ENC_BIG_ENDIAN);
1418 if (ie_len > 4 )
1419 ie_offset++;
1420 if ( octet == 0x57 ){ /* IPv6 */
1422 }else{ /* All other values shall be interpreted as Ipv4 address in this version of the protocol.*/
1423 unc_ipv4_address = tvb_get_ipv4(tvb, ie_offset);
1424 proto_tree_add_ipv4(urr_ie_tree, hf_uma_urr_unc_ipv4, tvb, ie_offset, 4, unc_ipv4_address);
1426 break;
1427 case 98:
1428 /* UNC Fully Qualified Domain/Host Name */
1429 if ( ie_len > 0){
1430 proto_tree_add_item_ret_string(urr_ie_tree, hf_uma_unc_FQDN, tvb, ie_offset, ie_len, ENC_ASCII|ENC_NA, pinfo->pool, &string);
1431 }else{
1432 proto_tree_add_expert(urr_ie_tree, pinfo, &ei_uma_fqdn_not_present, tvb, offset, 1);
1434 break;
1435 case 99:
1436 /* IP address for GPRS user data transport
1437 * IP Address type
1439 octet = tvb_get_uint8(tvb,ie_offset);
1440 proto_tree_add_item(urr_ie_tree, hf_uma_urr_IP_Address_type, tvb, ie_offset, 1, ENC_BIG_ENDIAN);
1441 ie_offset++;
1442 if ( octet == 0x57 ){ /* IPv6 */
1444 }else{ /* All other values shall be interpreted as Ipv4 address in this version of the protocol.*/
1445 GPRS_user_data_ipv4_address = tvb_get_ipv4(tvb, ie_offset);
1446 proto_tree_add_ipv4(urr_ie_tree, hf_uma_urr_GPRS_user_data_transport_ipv4, tvb, ie_offset, 4, GPRS_user_data_ipv4_address);
1449 break;
1450 case 100: /* UDP Port for GPRS user data transport */
1451 GPRS_user_data_transport_UDP_port = tvb_get_ntohs(tvb,ie_offset);
1452 proto_tree_add_item(urr_ie_tree, hf_uma_urr_GPRS_port, tvb, ie_offset, 2, ENC_BIG_ENDIAN);
1454 * If this isn't the first time this packet has been processed,
1455 * we've already done this work, so we don't need to do it
1456 * again.
1458 if (pinfo->fd->visited)
1460 break;
1462 clear_address(&null_addr);
1464 set_address(&dst_addr, AT_IPv4, 4, &GPRS_user_data_ipv4_address);
1466 conversation = find_conversation(pinfo->num, &dst_addr,
1467 &null_addr, CONVERSATION_UDP, GPRS_user_data_transport_UDP_port,
1468 0, NO_ADDR_B|NO_PORT_B);
1470 if (conversation == NULL) {
1471 /* It's not part of any conversation - create a new one. */
1472 conversation = conversation_new(pinfo->num, &dst_addr,
1473 &null_addr, CONVERSATION_UDP, GPRS_user_data_transport_UDP_port ,
1474 0, NO_ADDR2|NO_PORT2);
1476 /* Set dissector */
1477 conversation_set_dissector(conversation, uma_udp_handle);
1480 break;
1481 case 103: /* UNC TCP port */
1482 UNC_tcp_port = tvb_get_ntohs(tvb,ie_offset);
1483 proto_tree_add_uint(urr_ie_tree, hf_uma_urr_UNC_tcp_port , tvb, ie_offset, 2, UNC_tcp_port);
1486 * If this isn't the first time this packet has been processed,
1487 * we've already done this work, so we don't need to do it
1488 * again.
1490 if (pinfo->fd->visited)
1492 break;
1494 clear_address(&null_addr);
1496 set_address(&dst_addr, AT_IPv4, 4, &unc_ipv4_address);
1498 conversation = find_conversation(pinfo->num, &dst_addr,
1499 &null_addr, CONVERSATION_TCP, UNC_tcp_port,
1500 0, NO_ADDR_B|NO_PORT_B);
1502 if (conversation == NULL) {
1503 /* It's not part of any conversation - create a new one. */
1504 conversation = conversation_new(pinfo->num, &dst_addr,
1505 &null_addr, CONVERSATION_TCP, UNC_tcp_port,
1506 0, NO_ADDR2|NO_PORT2);
1507 /* Set dissector */
1508 conversation_set_dissector(conversation, uma_tcp_handle);
1511 break;
1512 case 104: /* RTP UDP port */
1513 RTP_UDP_port = tvb_get_ntohs(tvb,ie_offset);
1514 proto_tree_add_item(urr_ie_tree, hf_uma_urr_RTP_port, tvb, ie_offset, 2, ENC_BIG_ENDIAN);
1515 /* TODO find out exactly which element contains IP addr */
1516 /* Debug
1517 proto_tree_add_debug_text(urr_ie_tree,tvb,ie_offset,ie_len,"IP %u, Port %u,
1518 rtp_ipv4_address,RTP_UDP_port);
1520 if(unc_ipv4_address!=0){
1521 set_address(&src_addr, AT_IPv4, 4, &unc_ipv4_address);
1522 }else{
1523 /* Set Source IP = own IP */
1524 copy_address_shallow(&src_addr, &pinfo->src);
1526 if((!pinfo->fd->visited) && RTP_UDP_port!=0){
1528 rtp_add_address(pinfo, PT_UDP, &src_addr, RTP_UDP_port, 0, "UMA", pinfo->num, false, 0);
1529 if ((RTP_UDP_port & 0x1) == 0){ /* Even number RTP port RTCP should follow on odd number */
1530 RTCP_UDP_port = RTP_UDP_port + 1;
1531 rtcp_add_address(pinfo, &src_addr, RTCP_UDP_port, 0, "UMA", pinfo->num);
1534 break;
1535 case 105: /* RTCP UDP port */
1536 RTCP_UDP_port = tvb_get_ntohs(tvb,ie_offset);
1537 proto_tree_add_item(urr_ie_tree, hf_uma_urr_RTCP_port, tvb, ie_offset, 2, ENC_BIG_ENDIAN);
1538 /* TODO find out exactly which element contains IP addr */
1539 if((!pinfo->fd->visited) && rtcp_ipv4_address!=0 && RTCP_UDP_port!=0 && rtcp_handle){
1540 set_address(&src_addr, AT_IPv4, 4, &rtcp_ipv4_address);
1542 rtcp_add_address(pinfo, &src_addr, RTCP_UDP_port, 0, "UMA", pinfo->num);
1544 break;
1545 case 106:
1546 /* 11.2.70 GERAN Received Signal Level List */
1547 while(ie_offset<=(offset + ie_len)){
1548 proto_tree_add_item(urr_ie_tree, hf_uma_urr_RXLEV_NCELL, tvb, ie_offset, 1, ENC_BIG_ENDIAN);
1549 ie_offset++;
1551 break;
1552 case 107:
1553 /* 11.2.70 UTRAN Received Signal Level List */
1554 while(ie_offset<=(offset + ie_len)){
1555 proto_tree_add_item(urr_ie_tree, hf_uma_urr_RXLEV_NCELL, tvb, ie_offset, 1, ENC_BIG_ENDIAN);
1556 ie_offset++;
1558 break;
1559 case 108:
1560 /* 11.2.74 PS Handover to GERAN Command */
1561 case 109:
1562 /* 11.2.75 PS Handover to UTRAN Command */
1563 case 110:
1564 /* 11.2.76 PS Handover to GERAN PSI */
1565 case 111:
1566 /* 11.2.77 PS Handover to GERAN SI */
1567 case 112:
1568 /* 11.2.78 TU4004 Timer */
1569 case 115:
1570 /* 11.2.96 PTC Activation List */
1571 case 116:
1572 /* 11.2.97 PTC Description */
1573 case 117:
1574 /* 11.2.98 PTC Activation Ack List */
1575 case 118:
1576 /* 11.2.99 PTC Activation Ack Description */
1577 case 119:
1578 /* 11.2.100 PTC Modification List */
1579 case 120:
1580 /* 11.2.101 PTC Modification Ack List */
1581 case 121:
1582 /* 11.2.102 PTC Modification Ack Description */
1583 case 122:
1584 /* 11.2.103 RAB Configuration */
1585 case 123:
1586 /* 11.2.104 Multi-rate Configuration 2 */
1587 case 124:
1588 /* 11.2.105 Selected Integrity Protection Algorithm */
1589 case 125:
1590 /* 11.2.106 Selected Encryption Algorithm */
1591 case 126:
1592 /* 11.2.107 CN Domains to Handover */
1593 default:
1594 proto_tree_add_item(urr_ie_tree, hf_uma_data, tvb, ie_offset, ie_len, ENC_NA);
1595 break;
1597 offset = offset + ie_len;
1598 return offset;
1603 static int
1604 dissect_uma(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_)
1606 int offset = 0;
1607 uint8_t octet, pd;
1608 uint16_t msg_len;
1609 proto_item* pd_item;
1611 /* Set up structures needed to add the protocol subtree and manage it */
1612 proto_item *ti;
1613 proto_tree *uma_tree;
1615 /* Make entries in Protocol column and Info column on summary display */
1616 col_set_str(pinfo->cinfo, COL_PROTOCOL, "UMA");
1617 col_clear(pinfo->cinfo, COL_INFO);
1619 ti = proto_tree_add_item(tree, proto_uma, tvb, 0, -1, ENC_NA);
1620 uma_tree = proto_item_add_subtree(ti, ett_uma);
1622 /* add an item to the subtree, see section 1.6 for more information */
1623 msg_len = tvb_get_ntohs(tvb,offset);
1624 proto_tree_add_item(uma_tree, hf_uma_length_indicator, tvb, offset, 2, ENC_BIG_ENDIAN);
1625 offset = offset + 2;
1626 octet = tvb_get_uint8(tvb,offset);
1627 pd = octet & 0x0f;
1628 proto_tree_add_item(uma_tree, hf_uma_skip_ind, tvb, offset, 1, ENC_BIG_ENDIAN);
1629 if ((octet & 0xf0) != 0 ){
1630 proto_tree_add_expert(uma_tree, pinfo, &ei_uma_skip_this_message, tvb, offset, -1);
1631 return tvb_reported_length(tvb);
1634 pd_item = proto_tree_add_item(uma_tree, hf_uma_pd, tvb, offset, 1, ENC_BIG_ENDIAN);
1635 switch ( pd ){
1636 case 0: /* URR_C */
1637 case 1: /* URR */
1638 offset++;
1639 octet = tvb_get_uint8(tvb,offset);
1640 proto_tree_add_item(uma_tree, hf_uma_urr_msg_type, tvb, offset, 1, ENC_BIG_ENDIAN);
1641 col_add_str(pinfo->cinfo, COL_INFO, val_to_str_ext(octet, &uma_urr_msg_type_vals_ext, "Unknown URR (%u)"));
1642 while ((msg_len + 1) > offset ){
1643 offset++;
1644 offset = dissect_uma_IE(tvb, pinfo, uma_tree, offset);
1646 break;
1647 case 2: /* URLC */
1648 offset++;
1649 octet = tvb_get_uint8(tvb,offset);
1650 proto_tree_add_item(uma_tree, hf_uma_urlc_msg_type, tvb, offset, 1, ENC_BIG_ENDIAN);
1651 col_add_str(pinfo->cinfo, COL_INFO, val_to_str_ext(octet, &uma_urlc_msg_type_vals_ext, "Unknown URLC (%u)"));
1652 col_set_fence(pinfo->cinfo,COL_INFO);
1653 offset++;
1654 proto_tree_add_item(uma_tree, hf_uma_urlc_TLLI, tvb, offset, 4, ENC_NA);
1655 offset = offset + 3;
1656 while ((msg_len + 1) > offset ){
1657 offset++;
1658 offset = dissect_uma_IE(tvb, pinfo, uma_tree, offset);
1660 break;
1661 default:
1662 expert_add_info(pinfo, pd_item, &ei_uma_unknown_protocol);
1663 break;
1666 return tvb_reported_length(tvb);
1669 static unsigned
1670 get_uma_pdu_len(packet_info *pinfo _U_, tvbuff_t *tvb, int offset, void *data _U_)
1672 /* PDU length = Message length + length of length indicator */
1673 return tvb_get_ntohs(tvb,offset)+2;
1676 static int
1677 dissect_uma_tcp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
1679 tcp_dissect_pdus(tvb, pinfo, tree, uma_desegment, UMA_HEADER_SIZE,
1680 get_uma_pdu_len, dissect_uma, data);
1681 return tvb_reported_length(tvb);
1684 static int
1685 dissect_uma_urlc_udp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
1688 int offset = 0;
1689 uint8_t octet;
1690 uint16_t msg_len;
1691 proto_item* msg_item;
1693 /* Set up structures needed to add the protocol subtree and manage it */
1694 proto_item *ti;
1695 proto_tree *uma_tree;
1697 /* Make entries in Protocol column and Info column on summary display */
1698 col_set_str(pinfo->cinfo, COL_PROTOCOL, "UMA");
1699 col_clear(pinfo->cinfo, COL_INFO);
1701 ti = proto_tree_add_item(tree, proto_uma, tvb, 0, -1, ENC_NA);
1702 uma_tree = proto_item_add_subtree(ti, ett_uma);
1704 octet = tvb_get_uint8(tvb,offset);
1705 msg_item = proto_tree_add_item(uma_tree, hf_uma_urlc_msg_type, tvb, offset, 1, ENC_BIG_ENDIAN);
1706 col_add_fstr(pinfo->cinfo, COL_INFO, "%s ",val_to_str_ext(octet, &uma_urlc_msg_type_vals_ext, "Unknown URLC (%u)"));
1707 col_set_fence(pinfo->cinfo,COL_INFO);
1708 msg_len = tvb_reported_length_remaining(tvb,offset) - 1;
1710 switch ( octet ){
1712 case 2: /* RLC UNITDATA */
1713 case 6: /* URLC-UFC-REQ */
1714 case 7: /* URLC-DFC-REQ only allowed message types*/
1715 offset++;
1716 proto_tree_add_item(uma_tree, hf_uma_urlc_TLLI, tvb, offset, 4, ENC_NA);
1717 offset = offset + 4;
1718 proto_tree_add_item(uma_tree, hf_uma_urlc_seq_nr, tvb, offset, 2, ENC_NA);
1719 offset++;
1720 while (msg_len > offset){
1721 offset++;
1722 offset = dissect_uma_IE(tvb, pinfo, uma_tree, offset);
1724 return offset;
1725 default:
1726 expert_add_info(pinfo, msg_item, &ei_uma_wrong_message_type);
1727 return tvb_reported_length(tvb);
1733 /* Register the protocol with Wireshark */
1734 /* If this dissector uses sub-dissector registration add a registration routine.
1735 This format is required because a script is used to find these routines and
1736 create the code that calls these routines.
1738 void
1739 proto_reg_handoff_uma(void)
1741 dissector_add_for_decode_as_with_preference("udp.port", uma_udp_handle);
1742 rtcp_handle = find_dissector_add_dependency("rtcp", proto_uma);
1743 llc_handle = find_dissector_add_dependency("llcgprs", proto_uma);
1744 bssap_pdu_type_table = find_dissector_table("bssap.pdu_type");
1746 dissector_add_uint_range_with_preference("tcp.port", DEFAULT_UMA_PORT_RANGE, uma_tcp_handle);
1749 /* this format is require because a script is used to build the C function
1750 that calls all the protocol registration.
1753 void
1754 proto_register_uma(void)
1757 module_t *uma_module;
1759 /* Setup list of header fields See Section 1.6.1 for details*/
1760 static hf_register_info hf[] = {
1761 { &hf_uma_length_indicator,
1762 { "Length Indicator","uma.li",
1763 FT_UINT16, BASE_DEC, NULL, 0x0,
1764 NULL, HFILL }
1766 { &hf_uma_pd,
1767 { "Protocol Discriminator","uma.pd",
1768 FT_UINT8, BASE_DEC, VALS(uma_pd_vals), 0x0f,
1769 NULL, HFILL }
1771 { &hf_uma_skip_ind,
1772 { "Skip Indicator", "uma.skip.ind",
1773 FT_UINT8, BASE_DEC, NULL, 0xf0,
1774 NULL, HFILL }
1776 { &hf_uma_urr_msg_type,
1777 { "URR Message Type", "uma.urr.msg.type",
1778 FT_UINT16, BASE_DEC|BASE_EXT_STRING, &uma_urr_msg_type_vals_ext, 0x0,
1779 NULL, HFILL }
1781 { &hf_uma_urlc_msg_type,
1782 { "URLC Message Type", "uma.urlc.msg.type",
1783 FT_UINT8, BASE_DEC|BASE_EXT_STRING, &uma_urlc_msg_type_vals_ext, 0x0,
1784 NULL, HFILL }
1786 { &hf_uma_urlc_TLLI,
1787 { "Temporary Logical Link Identifier","uma.urlc.tlli",
1788 FT_BYTES,BASE_NONE, NULL, 0x0,
1789 NULL, HFILL }
1791 { &hf_uma_urlc_seq_nr,
1792 { "Sequence Number","uma.urlc.seq.nr",
1793 FT_BYTES,BASE_NONE, NULL, 0x0,
1794 NULL, HFILL }
1796 { &hf_uma_urr_IE,
1797 { "URR Information Element","uma.urr.ie.type",
1798 FT_UINT8, BASE_DEC|BASE_EXT_STRING, &uma_urr_IE_type_vals_ext, 0x0,
1799 NULL, HFILL }
1801 { &hf_uma_urr_IE_len,
1802 { "URR Information Element length","uma.urr.ie.len",
1803 FT_UINT16, BASE_DEC, NULL, 0x0,
1804 NULL, HFILL }
1806 { &hf_uma_urr_uri,
1807 { "GAN Release Indicator","uma.urr.uri",
1808 FT_UINT8, BASE_DEC, VALS(uma_urr_gan_rel_ind_vals), 0x07,
1809 "URI", HFILL }
1811 { &hf_uma_urr_radio_type_of_id,
1812 { "Type of identity","uma.urr.radio_type_of_id",
1813 FT_UINT8, BASE_DEC, VALS(radio_type_of_id_vals), 0x0f,
1814 NULL, HFILL }
1816 { &hf_uma_urr_radio_id,
1817 { "Radio Identity","uma.urr.radio_id",
1818 FT_ETHER, BASE_NONE, NULL, 0x00,
1819 NULL, HFILL }
1822 { &hf_uma_urr_cell_id,
1823 { "Cell Identity","uma.urr.cell_id",
1824 FT_UINT16, BASE_DEC, NULL, 0x00,
1825 NULL, HFILL }
1828 { &hf_uma_urr_lac,
1829 { "Location area code","uma.urr.lac",
1830 FT_UINT16, BASE_DEC, NULL, 0x0,
1831 NULL, HFILL }
1833 { &hf_uma_urr_gci,
1834 { "GCI, GSM Coverage Indicator","uma.urr.gci",
1835 FT_UINT8, BASE_DEC, VALS(uma_gci_vals), 0x0,
1836 NULL, HFILL }
1838 { &hf_uma_urr_tura,
1839 { "TURA, Type of Unlicensed Radio","uma.urr.tura",
1840 FT_UINT8,BASE_DEC, VALS(uma_tura_vals), 0xf,
1841 NULL, HFILL }
1843 { &hf_uma_urr_gc,
1844 { "GC, GERAN Capable","uma.urr.gc",
1845 FT_UINT8,BASE_DEC, VALS(uma_gc_vals), 0x10,
1846 NULL, HFILL }
1848 { &hf_uma_urr_uc,
1849 { "UC, UTRAN Capable","uma.urr.uc",
1850 FT_UINT8,BASE_DEC, VALS(uma_uc_vals), 0x20,
1851 "GC, GERAN Capable", HFILL }
1853 { &hf_uma_urr_rrs,
1854 { "RTP Redundancy Support(RRS)","uma.urr.rrs",
1855 FT_UINT8,BASE_DEC, VALS(uma_rrs_vals), 0x01,
1856 NULL, HFILL }
1858 { &hf_uma_urr_gmsi,
1859 { "GMSI, GAN Mode Support Indicator","uma.urr.gmsi",
1860 FT_UINT8,BASE_DEC, VALS(uma_gmsi_vals), 0x06,
1861 NULL, HFILL }
1863 { &hf_uma_urr_psho,
1864 { "PS HO, PS Handover Capable","uma.urr.psho",
1865 FT_UINT8,BASE_DEC, VALS(uma_ps_ho_vals), 0x02,
1866 NULL, HFILL }
1868 { &hf_uma_urr_IP_Address_type,
1869 { "IP address type number value","uma.urr.ip_type",
1870 FT_UINT8,BASE_DEC, VALS(IP_address_type_vals), 0x0,
1871 NULL, HFILL }
1873 { &hf_uma_urr_FQDN,
1874 { "Fully Qualified Domain/Host Name (FQDN)", "uma.urr.fqdn",
1875 FT_STRING, BASE_NONE,NULL,0x0,
1876 NULL, HFILL }
1878 { &hf_uma_urr_sgw_ipv4,
1879 { "SGW IPv4 address","uma.urr.sgwipv4",
1880 FT_IPv4,BASE_NONE, NULL, 0x0,
1881 NULL, HFILL }
1883 { &hf_uma_urr_redirection_counter,
1884 { "Redirection Counter","uma.urr.redirection_counter",
1885 FT_UINT8,BASE_DEC, NULL, 0x0,
1886 NULL, HFILL }
1888 { &hf_uma_urr_dis_rej_cau,
1889 { "Discovery Reject Cause","uma.urr.dis_rej_cau",
1890 FT_UINT8,BASE_DEC, VALS(uma_discovery_reject_cause_vals), 0x0,
1891 NULL, HFILL }
1893 { &hf_uma_urr_ECMC,
1894 { "ECMC, Early Classmark Sending Control","uma.urr.ECMC",
1895 FT_UINT8,BASE_DEC, VALS(ECMC_vals), 0x2,
1896 NULL, HFILL }
1898 { &hf_uma_urr_NMO,
1899 { "NMO, Network Mode of Operation","uma.urr.NMO",
1900 FT_UINT8,BASE_DEC, VALS(NMO_vals), 0xc,
1901 NULL, HFILL }
1903 { &hf_uma_urr_GPRS,
1904 { "GPRS, GPRS Availability","uma.urr.GPRS",
1905 FT_UINT8,BASE_DEC, VALS(GPRS_avail_vals), 0x10,
1906 NULL, HFILL }
1908 { &hf_uma_urr_DTM,
1909 { "DTM, Dual Transfer Mode of Operation by network","uma.urr.dtm",
1910 FT_UINT8,BASE_DEC, VALS(DTM_vals), 0x20,
1911 NULL, HFILL }
1913 { &hf_uma_urr_ATT,
1914 { "ATT, Attach-detach allowed","uma.urr.att",
1915 FT_UINT8,BASE_DEC, VALS(ATT_vals), 0x40,
1916 NULL, HFILL }
1918 { &hf_uma_urr_MSCR,
1919 { "MSCR, MSC Release","uma.urr.mscr",
1920 FT_UINT8,BASE_DEC, VALS(MSCR_vals), 0x80,
1921 NULL, HFILL }
1923 { &hf_uma_urr_T3212_timer,
1924 { "T3212 Timer value(seconds)","uma.urr.t3212",
1925 FT_UINT8,BASE_DEC, NULL, 0x0,
1926 NULL, HFILL }
1928 { &hf_uma_urr_RAC,
1929 { "Routing Area Code","uma.urr.rac",
1930 FT_UINT8,BASE_DEC, NULL, 0x0,
1931 NULL, HFILL }
1933 { &hf_uma_urr_ap_location,
1934 { "AP Location","uma.urr.ap_location",
1935 FT_BYTES,BASE_NONE, NULL, 0x0,
1936 NULL, HFILL }
1938 { &hf_uma_urr_SGSNR,
1939 { "SGSN Release","uma.urr.SGSNR",
1940 FT_UINT8,BASE_DEC, VALS(SGSNR_vals), 0x01,
1941 NULL, HFILL }
1943 { &hf_uma_urr_ECMP,
1944 { "ECMP, Emergency Call Mode Preference","uma.urr.ECMP",
1945 FT_UINT8,BASE_DEC, VALS(ECMP_vals), 0x02,
1946 NULL, HFILL }
1948 { &hf_uma_urr_RE,
1949 { "RE, Call reestablishment allowed","uma.urr.RE",
1950 FT_UINT8,BASE_DEC, VALS(RE_vals), 0x04,
1951 NULL, HFILL }
1953 { &hf_uma_urr_PFCFM,
1954 { "PFCFM, PFC_FEATURE_MODE","uma.urr.PFCFM",
1955 FT_UINT8,BASE_DEC, VALS(PFCFM_vals), 0x08,
1956 NULL, HFILL }
1958 { &hf_uma_urr_3GECS,
1959 { "3GECS, 3G Early Classmark Sending Restriction","uma.urr.3GECS",
1960 FT_UINT8,BASE_DEC, VALS(Three_GECS_vals), 0x10,
1961 NULL, HFILL }
1963 { &hf_uma_urr_TU3907_timer,
1964 { "TU3907 Timer value(seconds)","uma.urr.tu3907",
1965 FT_UINT16,BASE_DEC, NULL, 0x0,
1966 NULL, HFILL }
1968 { &hf_uma_urr_GSM_RR_state,
1969 { "GSM RR State value","uma.urr.gsmrrstate",
1970 FT_UINT8,BASE_DEC|BASE_EXT_STRING, &uma_GRS_GSM_RR_State_vals_ext, 0x7,
1971 NULL, HFILL }
1973 { &hf_uma_urr_gan_band,
1974 { "UMA Band","uma.urr.umaband",
1975 FT_UINT8,BASE_DEC|BASE_EXT_STRING, &uma_gan_band_vals_ext, 0x0f,
1976 NULL, HFILL }
1978 { &hf_uma_urr_URR_state,
1979 { "URR State","uma.urr.state",
1980 FT_UINT8,BASE_DEC, VALS(URR_state_vals), 0x03,
1981 NULL, HFILL }
1983 { &hf_uma_urr_register_reject_cause,
1984 { "Register Reject Cause","uma.urr.reg_rej_cau",
1985 FT_UINT8,BASE_DEC|BASE_EXT_STRING, &register_reject_cause_vals_ext, 0x0,
1986 NULL, HFILL }
1988 { &hf_uma_urr_TU3906_timer,
1989 { "TU3906 Timer value(seconds)","uma.urr.tu3906",
1990 FT_UINT16,BASE_DEC, NULL, 0x0,
1991 NULL, HFILL }
1993 { &hf_uma_urr_TU3910_timer,
1994 { "TU3910 Timer value(seconds)","uma.urr.tu3910",
1995 FT_UINT16,BASE_DEC, NULL, 0x0,
1996 NULL, HFILL }
1998 { &hf_uma_urr_TU3902_timer,
1999 { "TU3902 Timer value(seconds)","uma.urr.tu3902",
2000 FT_UINT16,BASE_DEC, NULL, 0x0,
2001 NULL, HFILL }
2003 { &hf_uma_urr_communication_port,
2004 { "Communication Port","uma.urr.communication_port",
2005 FT_UINT16,BASE_DEC, NULL, 0x0,
2006 NULL, HFILL }
2008 { &hf_uma_urr_L3_Message,
2009 { "L3 message contents","uma.urr.l3",
2010 FT_BYTES,BASE_NONE, NULL, 0x0,
2011 NULL, HFILL }
2013 { &hf_uma_urr_L3_protocol_discriminator,
2014 { "Protocol discriminator","uma.urr.L3_protocol_discriminator",
2015 FT_UINT8,BASE_DEC, VALS(protocol_discriminator_vals), 0x0f,
2016 NULL, HFILL }
2018 { &hf_uma_urr_GPRS_resumption,
2019 { "GPRS resumption ACK","uma.urr.GPRS_resumption",
2020 FT_UINT8,BASE_DEC, VALS(GPRS_resumption_vals), 0x1,
2021 NULL, HFILL }
2023 { &hf_uma_urr_ULQI,
2024 { "ULQI, UL Quality Indication","uma.urr.ULQI",
2025 FT_UINT8,BASE_DEC, VALS(uma_ulqi_vals), 0x0f,
2026 NULL, HFILL }
2028 { &hf_uma_urr_TU3920_timer,
2029 { "TU3920 Timer value(seconds)","uma.urr.tu3920",
2030 FT_UINT16,BASE_DEC, NULL, 0x0,
2031 "TU3920 Timer value(hundreds of of ms)", HFILL }
2033 { &hf_uma_urr_peak_tpt_cls,
2034 { "PEAK_THROUGHPUT_CLASS","uma.urr.peak_tpt_cls",
2035 FT_UINT8,BASE_DEC, NULL, 0x0f,
2036 NULL, HFILL }
2038 { &hf_uma_urr_radio_pri,
2039 { "Radio Priority","uma.urr.radio_pri",
2040 FT_UINT8,BASE_DEC, VALS(radio_pri_vals), 0x30,
2041 "RADIO_PRIORITY", HFILL }
2043 { &hf_uma_urr_rlc_mode,
2044 { "RLC mode","uma.urr.rrlc_mode",
2045 FT_UINT8,BASE_DEC, VALS(rlc_mode_vals), 0x80,
2046 NULL, HFILL }
2048 { &hf_uma_urr_ga_psr_cause,
2049 { "GA-PSR Cause","uma.urr.ga_psr_cause",
2050 FT_UINT8,BASE_DEC|BASE_EXT_STRING, &uma_ga_psr_cause_vals_ext, 0x0,
2051 NULL, HFILL }
2053 { &hf_uma_urr_udr,
2054 { "User Data Rate value (bits/s)","uma.urr.URLCcause",
2055 FT_UINT32,BASE_DEC, NULL, 0x0,
2056 NULL, HFILL }
2058 { &hf_uma_urr_TU4001_timer,
2059 { "TU4001 Timer value(seconds)","uma.urr.tu4001",
2060 FT_UINT16,BASE_DEC, NULL, 0x0,
2061 NULL, HFILL }
2063 { &hf_uma_urr_LS,
2064 { "Location Status(LS)","uma.urr.LS",
2065 FT_UINT8,BASE_DEC, VALS(LS_vals), 0x3,
2066 NULL, HFILL }
2068 { &hf_uma_urr_cipher_res,
2069 { "Cipher Response(CR)","uma.urr.CR",
2070 FT_UINT8,BASE_DEC, VALS(CR_vals), 0x3,
2071 NULL, HFILL }
2073 { &hf_uma_urr_rand_val,
2074 { "Ciphering Command RAND value","uma.rand_val",
2075 FT_BYTES,BASE_NONE, NULL, 0x0,
2076 NULL, HFILL }
2078 { &hf_uma_urr_ciphering_command_mac,
2079 { "Ciphering Command MAC (Message Authentication Code)","uma.ciphering_command_mac",
2080 FT_BYTES,BASE_NONE, NULL, 0x0,
2081 NULL, HFILL }
2083 { &hf_uma_urr_ciphering_key_seq_num,
2084 { "Values for the ciphering key","uma.ciphering_key_seq_num",
2085 FT_UINT8,BASE_DEC, NULL, 0x7,
2086 NULL, HFILL }
2088 { &hf_uma_urr_sapi_id,
2089 { "SAPI ID","uma.sapi_id",
2090 FT_UINT8,BASE_DEC, VALS(sapi_id_vals), 0x7,
2091 NULL, HFILL }
2093 { &hf_uma_urr_establishment_cause,
2094 { "Establishment Cause","uma.urr.establishment_cause",
2095 FT_UINT8,BASE_DEC|BASE_EXT_STRING, &uma_establishment_cause_val_ext, 0x0,
2096 NULL, HFILL }
2098 { &hf_uma_urr_channel,
2099 { "Channel","uma.urr.channel",
2100 FT_UINT8,BASE_DEC, VALS(channel_vals), 0x3,
2101 NULL, HFILL }
2103 { &hf_uma_urr_PDU_in_error,
2104 { "PDU in Error,","uma.urr.PDU_in_error",
2105 FT_BYTES,BASE_NONE, NULL, 0x0,
2106 NULL, HFILL }
2108 { &hf_uma_urr_sample_size,
2109 { "Sample Size","uma.urr.sample_size",
2110 FT_UINT8,BASE_DEC, VALS(sample_size_vals), 0x0,
2111 NULL, HFILL }
2113 { &hf_uma_urr_payload_type,
2114 { "Payload Type","uma.urr.payload_type",
2115 FT_UINT8,BASE_DEC, NULL, 0x0,
2116 NULL, HFILL }
2118 { &hf_uma_urr_LLC_PDU,
2119 { "LLC-PDU","uma.urr.llc_pdu",
2120 FT_BYTES,BASE_NONE, NULL, 0x0,
2121 NULL, HFILL }
2123 { &hf_uma_urr_LBLI,
2124 { "LBLI, Location Black List indicator","uma.urr.LBLI",
2125 FT_UINT8,BASE_DEC, VALS(LBLI_vals), 0x0,
2126 NULL, HFILL }
2128 { &hf_uma_urr_RI,
2129 { "Reset Indicator(RI)","uma.urr.RI",
2130 FT_UINT8,BASE_DEC, VALS(RI_vals), 0x1,
2131 NULL, HFILL }
2133 { &hf_uma_urr_TU4003_timer,
2134 { "TU4003 Timer value(seconds)","uma.urr.tu4003",
2135 FT_UINT16,BASE_DEC, NULL, 0x0,
2136 NULL, HFILL }
2138 { &hf_uma_urr_ap_service_name_type,
2139 { "AP Service Name type","uma.urr.ap_service_name_type",
2140 FT_UINT8,BASE_DEC, VALS(ap_service_name_type_vals), 0x0,
2141 NULL, HFILL }
2143 { &hf_uma_urr_ap_Service_name_value,
2144 { "AP Service Name Value","uma.urr.ap_service_name_value",
2145 FT_STRING,BASE_NONE, NULL, 0x0,
2146 NULL, HFILL }
2148 { &hf_uma_urr_uma_service_zone_icon_ind,
2149 { "UMA Service Zone Icon Indicator","uma.urr.uma_service_zone_icon_ind",
2150 FT_UINT8,BASE_DEC, VALS(uma_service_zone_icon_ind_vals), 0x0,
2151 NULL, HFILL }
2153 { &hf_uma_urr_uma_service_zone_str_len,
2154 { "Length of UMA Service Zone string","uma.urr.service_zone_str_len",
2155 FT_UINT8,BASE_DEC, NULL, 0x0,
2156 NULL, HFILL }
2158 { &hf_uma_urr_window_size,
2159 { "Window Size","uma.urr.uma_window_size",
2160 FT_UINT8,BASE_DEC, VALS(window_size_vals), 0x03,
2161 NULL, HFILL }
2163 { &hf_uma_urr_uma_codec_mode,
2164 { "GAN A/Gb Mode Codec Mode","uma.urr.uma_codec_mode",
2165 FT_UINT8,BASE_DEC, NULL, 0xc0,
2166 NULL, HFILL }
2168 { &hf_uma_urr_UTRAN_cell_id_disc,
2169 { "UTRAN Cell Identification Discriminator","uma.urr.uma_UTRAN_cell_id_disc",
2170 FT_UINT8,BASE_DEC, VALS(UTRAN_cell_id_disc_vals), 0x0f,
2171 NULL, HFILL }
2173 { &hf_uma_urr_suti,
2174 { "SUTI, Serving GANC table indicator","uma.urr.uma_suti",
2175 FT_UINT8,BASE_DEC, VALS(suti_vals), 0x01,
2176 NULL, HFILL }
2178 { &hf_uma_urr_uma_mps,
2179 { "UMPS, Manual PLMN Selection indicator","uma.urr.mps",
2180 FT_UINT8,BASE_DEC, VALS(mps_vals), 0x3,
2181 "MPS, Manual PLMN Selection indicator", HFILL }
2183 { &hf_uma_urr_num_of_plms,
2184 { "Number of PLMN:s","uma.urr.num_of_plms",
2185 FT_UINT8,BASE_DEC, NULL, 0x0,
2186 NULL, HFILL }
2188 { &hf_uma_urr_cbs,
2189 { "CBS Cell Broadcast Service","uma.urr.cbs",
2190 FT_UINT8,BASE_DEC, VALS(cbs_vals), 0x01,
2191 NULL, HFILL }
2193 { &hf_uma_urr_num_of_cbs_frms,
2194 { "Number of CBS Frames","uma.urr.num_of_cbs_frms",
2195 FT_UINT8,BASE_DEC, NULL, 0x0,
2196 NULL, HFILL }
2198 { &hf_uma_urr_ms_radio_id,
2199 { "MS Radio Identity","uma.urr.ms_radio_id",
2200 FT_ETHER, BASE_NONE, NULL, 0x00,
2201 NULL, HFILL }
2203 { &hf_uma_urr_uma_service_zone_str,
2204 { "UMA Service Zone string,","uma.urr.uma_service_zone_str",
2205 FT_STRING,BASE_NONE, NULL, 0x0,
2206 NULL, HFILL }
2208 { &hf_uma_urr_unc_ipv4,
2209 { "UNC IPv4 address","uma.urr.uncipv4",
2210 FT_IPv4,BASE_NONE, NULL, 0x0,
2211 NULL, HFILL }
2213 { &hf_uma_unc_FQDN,
2214 { "UNC Fully Qualified Domain/Host Name (FQDN)", "uma.urr.unc_fqdn",
2215 FT_STRING, BASE_NONE,NULL,0x0,
2216 NULL, HFILL }
2218 { &hf_uma_urr_GPRS_user_data_transport_ipv4,
2219 { "IP address for GPRS user data transport","uma.urr.gprs_usr_data_ipv4",
2220 FT_IPv4,BASE_NONE, NULL, 0x0,
2221 NULL, HFILL }
2223 { &hf_uma_urr_GPRS_port,
2224 { "UDP Port for GPRS user data transport","uma.urr.gprs_port",
2225 FT_UINT16,BASE_DEC, NULL, 0x0,
2226 NULL, HFILL }
2228 { &hf_uma_urr_UNC_tcp_port,
2229 { "UNC TCP port","uma.urr.tcp_port",
2230 FT_UINT16,BASE_DEC, NULL, 0x0,
2231 "UDP Port for GPRS user data transport", HFILL }
2233 { &hf_uma_urr_RTP_port,
2234 { "RTP UDP port","uma.urr.rtp_port",
2235 FT_UINT16,BASE_DEC, NULL, 0x0,
2236 NULL, HFILL }
2238 { &hf_uma_urr_RTCP_port,
2239 { "RTCP UDP port","uma.urr.rtcp_port",
2240 FT_UINT16,BASE_DEC, NULL, 0x0,
2241 NULL, HFILL }
2243 { &hf_uma_urr_RXLEV_NCELL,
2244 { "RX Level","uma.urr.rxlevel",
2245 FT_UINT8,BASE_DEC, NULL, 0x0,
2246 NULL, HFILL }
2248 /* Generated from convert_proto_tree_add_text.pl */
2249 { &hf_uma_access_control_class_n, { "Access Control Class N", "uma.access_control_class_n", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }},
2250 { &hf_uma_data, { "DATA", "uma.data", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
2253 /* Setup protocol subtree array */
2254 static int *ett[] = {
2255 &ett_uma,
2256 &ett_uma_toc,
2257 &ett_urr_ie,
2260 static ei_register_info ei[] = {
2261 /* Generated from convert_proto_tree_add_text.pl */
2262 { &ei_uma_unknown_format, { "uma.unknown_format", PI_PROTOCOL, PI_WARN, "Unknown format", EXPFILL }},
2263 { &ei_uma_fqdn_not_present, { "uma.fqdn_not_present", PI_PROTOCOL, PI_NOTE, "FQDN not present", EXPFILL }},
2264 { &ei_uma_cbs_frames, { "uma.cbs_frames", PI_UNDECODED, PI_WARN, "CBS Frames - Not decoded", EXPFILL }},
2265 { &ei_uma_skip_this_message, { "uma.skip_this_message", PI_PROTOCOL, PI_NOTE, "Skip this message", EXPFILL }},
2266 { &ei_uma_unknown_protocol, { "uma.unknown_protocol", PI_PROTOCOL, PI_WARN, "Unknown protocol", EXPFILL }},
2267 { &ei_uma_wrong_message_type, { "uma.wrong_message_type", PI_PROTOCOL, PI_WARN, "Wrong message type", EXPFILL }},
2270 expert_module_t *expert_uma;
2272 /* Register the protocol name and description */
2273 proto_uma = proto_register_protocol("Unlicensed Mobile Access","UMA", "uma");
2274 /* subdissector code */
2275 uma_tcp_handle = register_dissector("umatcp", dissect_uma_tcp, proto_uma);
2276 uma_udp_handle = register_dissector("umaudp", dissect_uma_urlc_udp, proto_uma);
2279 /* Required function calls to register the header fields and subtrees used */
2280 proto_register_field_array(proto_uma, hf, array_length(hf));
2281 proto_register_subtree_array(ett, array_length(ett));
2282 expert_uma = expert_register_protocol(proto_uma);
2283 expert_register_field_array(expert_uma, ei, array_length(ei));
2285 /* Register a configuration option for port */
2286 uma_module = prefs_register_protocol(proto_uma, NULL);
2288 prefs_register_bool_preference(uma_module, "desegment_ucp_messages",
2289 "Reassemble UMA messages spanning multiple TCP segments",
2290 "Whether the UMA dissector should reassemble messages spanning multiple TCP segments."
2291 " To use this option, you must also enable \"Allow subdissectors to reassemble TCP streams\" in the TCP protocol settings.",
2292 &uma_desegment);
2293 prefs_register_obsolete_preference(uma_module, "tcp.port1");
2294 prefs_register_obsolete_preference(uma_module, "udp.ports");
2298 * Editor modelines - https://www.wireshark.org/tools/modelines.html
2300 * Local variables:
2301 * c-basic-offset: 8
2302 * tab-width: 8
2303 * indent-tabs-mode: t
2304 * End:
2306 * vi: set shiftwidth=8 tabstop=8 noexpandtab:
2307 * :indentSize=8:tabSize=8:noTabs=false: