5 * (c) 2006, Luis E. Garcia Ontanon <luis@ontanon.org>
7 * Wireshark - Network traffic analyzer
8 * By Gerald Combs <gerald@wireshark.org>
9 * Copyright 1998 Gerald Combs
11 * SPDX-License-Identifier: GPL-2.0-or-later
16 #include <epan/packet.h>
17 #include <epan/asn1.h>
19 #include "packet-ber.h"
20 #include "packet-isup.h"
21 #include "packet-h248.h"
23 void proto_register_h248_3gpp(void);
25 #define PNAME "H.248 3GPP"
26 #define PSNAME "H2483GPP"
27 #define PFNAME "h248.3gpp"
29 #include "packet-gsm_a_common.h"
33 * 3GPP TS 29.232 -- 15.1.1
35 static int proto_h248_package_3GUP
;
37 static int hf_h248_package_3GUP_Mode
;
38 static int hf_h248_package_3GUP_UPversions
;
39 static int hf_h248_package_3GUP_delerrsdu
;
40 static int hf_h248_package_3GUP_interface
;
41 static int hf_h248_package_3GUP_initdir
;
43 static int ett_h248_package_3GUP
;
47 static const value_string h248_3GUP_properties_vals
[] = {
48 { 0x0000, "threegup (3G User Plane)" },
50 { 0x0002, "Versions" },
51 { 0x0003, "delerrsdu" },
52 { 0x0004, "interface" },
53 { 0x0005, "initdir" },
57 static const value_string h248_3GUP_Mode_vals
[] = {
58 { 0x00000001, "Transparent mode" },
59 { 0x00000002, "Support mode for predefined SDU sizes" },
63 static const value_string h248_3GUP_upversions_vals
[] = {
64 { 0x01, "Version 1" },
65 { 0x02, "Version 2" },
66 { 0x03, "Version 3" },
67 { 0x04, "Version 4" },
68 { 0x05, "Version 5" },
69 { 0x06, "Version 6" },
70 { 0x07, "Version 7" },
71 { 0x08, "Version 8" },
72 { 0x09, "Version 9" },
73 { 0x0A, "Version 10" },
74 { 0x0B, "Version 11" },
75 { 0x0C, "Version 12" },
76 { 0x0D, "Version 13" },
77 { 0x0E, "Version 14" },
78 { 0x0F, "Version 15" },
79 { 0x10, "Version 16" },
83 static const value_string h248_3GUP_delerrsdu_vals
[] = {
86 { 0x0003, "Not Applicable" },
90 static const value_string h248_3GUP_interface_vals
[] = {
91 { 0x0001, "RAN (Iu interface)" },
92 { 0x0002, "CN (Nb interface)" },
96 static const value_string h248_3GUP_initdir_vals
[] = {
97 { 0x0001, "Incoming" },
98 { 0x0002, "Outgoing" },
102 static const value_string h248_3GUP_parameters
[] _U_
= {
104 { 0x0002, "UPversions" },
105 { 0x0003, "Delivery of erroneous SDUs" },
106 { 0x0004, "Interface" },
107 { 0x0005, "Initialisation Direction" },
111 static const h248_pkg_param_t h248_package_3GUP_properties
[] = {
112 { 0x0001, &hf_h248_package_3GUP_Mode
, h248_param_ber_integer
, &implicit
},
113 { 0x0002, &hf_h248_package_3GUP_UPversions
, h248_param_ber_integer
, &implicit
},
114 { 0x0003, &hf_h248_package_3GUP_delerrsdu
, h248_param_ber_integer
, &implicit
},
115 { 0x0004, &hf_h248_package_3GUP_interface
, h248_param_ber_integer
, &implicit
},
116 { 0x0005, &hf_h248_package_3GUP_initdir
, h248_param_ber_integer
, &implicit
},
117 { 0x0000, NULL
, NULL
, NULL
}
120 static h248_package_t h248_package_3GUP
= {
122 &proto_h248_package_3GUP
,
123 &ett_h248_package_3GUP
,
124 h248_3GUP_properties_vals
,
128 h248_package_3GUP_properties
,
136 * Circuit Switched Data package
137 * 3GPP TS 29.232 -- 15.2.1
140 static int hf_h248_package_3GCSD
;
142 static int hf_h248_package_3GCSD_plmnbc
;
143 static int hf_h248_package_3GCSD_gsmchancod
;
144 static int hf_h248_pkg_3GCSD_evt_protres
;
145 static int hf_h248_pkg_3GCSD_evt_protres_result
;
146 static int hf_h248_pkg_3GCSD_evt_protres_cause
;
147 static int hf_h248_pkg_3GCSD_evt_ratechg
;
148 static int hf_h248_pkg_3GCSD_evt_ratechg_rate
;
149 static int hf_h248_pkg_3GCSD_sig_actprot
;
150 static int hf_h248_pkg_3GCSD_actprot_sig_localpeer
;
152 static int ett_h248_package_3GCSD
;
153 static int ett_h248_3GCSD_evt_protres
;
154 static int ett_h248_3GCSD_evt_ratechg
;
155 static int ett_pkg_3GCSD_sig_actprot
;
157 static void dissect_3gcsd_plmnbc(proto_tree
* tree
, tvbuff_t
* tvb
, packet_info
* pinfo
, int hfid
, h248_curr_info_t
* cu _U_
, void* implicit_param
) {
160 asn1_ctx_init(&asn1_ctx
, ASN1_ENC_BER
, true, pinfo
);
161 dissect_ber_octet_string(implicit_param
? *((bool*)implicit_param
) : false, &asn1_ctx
, tree
, tvb
, 0, hfid
, NULL
);
162 de_bearer_cap(tvb
, tree
, pinfo
, 4, tvb_reported_length(tvb
)-4, NULL
, 0);
165 static const value_string h248_3GCSD_properties_vals
[] = {
166 { 0x0000, "Circuit Switched Data (threegcsd)"},
168 { 0x0002, "gsmchancod"},
172 static const value_string h248_3GCSD_signals_vals
[] = {
173 { 0x0001, "actprot" },
177 static const value_string h248_3GCSD_signal_actprot_vals
[] = {
178 { 0x0001, "localpeer" },
182 static const value_string h248_3GCSD_events_vals
[] = {
183 { 0x0001, "protres"},
184 { 0x0002, "ratechg"},
188 static const value_string h248_3GCSD_event_protres_vals
[] = {
194 static const value_string h248_3GCSD_event_ratechg_vals
[] = {
199 static const value_string h248_3GCSD_evt_protres_result_vals
[] = {
205 static const value_string h248_3GCSD_evt_protres_cause_vals
[] = {
211 static const value_string h248_3GCSD_actprot_sig_localpeer_vals
[] = {
217 static const h248_pkg_param_t h248_package_3GCSD_props
[] = {
218 { 0x0001, &hf_h248_package_3GCSD_plmnbc
, dissect_3gcsd_plmnbc
, &implicit
},
219 { 0x0002, &hf_h248_package_3GCSD_gsmchancod
, h248_param_ber_octetstring
, &implicit
},
220 { 0x0000, NULL
, NULL
, NULL
}
223 static const h248_pkg_param_t h248_pkg_3GCSD_evt_protres_params
[] = {
224 { 0x0001, &hf_h248_pkg_3GCSD_evt_protres_result
, h248_param_ber_integer
, &implicit
},
225 { 0x0002, &hf_h248_pkg_3GCSD_evt_protres_cause
, h248_param_ber_integer
, &implicit
},
226 { 0, NULL
, NULL
, NULL
}
229 static const h248_pkg_param_t h248_pkg_3GCSD_evt_ratechg_params
[] = {
230 { 0x0001, &hf_h248_pkg_3GCSD_evt_ratechg_rate
, h248_param_ber_integer
, &implicit
},
231 { 0, NULL
, NULL
, NULL
}
234 static const h248_pkg_evt_t h248_package_3GCSD_evts
[] = {
235 { 0x0001, &hf_h248_pkg_3GCSD_evt_protres
, &ett_h248_3GCSD_evt_protres
, h248_pkg_3GCSD_evt_protres_params
, h248_3GCSD_event_protres_vals
},
236 { 0x0002, &hf_h248_pkg_3GCSD_evt_ratechg
, &ett_h248_3GCSD_evt_ratechg
, h248_pkg_3GCSD_evt_ratechg_params
, h248_3GCSD_event_ratechg_vals
},
237 { 0, NULL
, NULL
, NULL
,NULL
}
240 static const h248_pkg_param_t h248_pkg_3GCSD_actprot_sig_params
[] = {
241 { 0x0001, &hf_h248_pkg_3GCSD_actprot_sig_localpeer
, h248_param_ber_integer
, &implicit
},
242 { 0, NULL
, NULL
, NULL
}
245 static const h248_pkg_sig_t h248_package_3GCSD_sigs
[] = {
246 { 0x0010, &hf_h248_pkg_3GCSD_sig_actprot
, &ett_pkg_3GCSD_sig_actprot
, h248_pkg_3GCSD_actprot_sig_params
, h248_3GCSD_signal_actprot_vals
},
247 { 0, NULL
, NULL
, NULL
,NULL
}
250 static h248_package_t h248_package_3GCSD
= {
252 &hf_h248_package_3GCSD
,
253 &ett_h248_package_3GCSD
,
254 h248_3GCSD_properties_vals
,
255 h248_3GCSD_signals_vals
,
256 h248_3GCSD_events_vals
,
258 h248_package_3GCSD_props
,
259 h248_package_3GCSD_sigs
,
260 h248_package_3GCSD_evts
,
267 * 3GPP TS 29.232 -- 15.2.2
269 static int hf_h248_package_3GTFO
;
271 static int hf_h248_pkg_3GTFO_evt_codec_modify
;
272 static int hf_h248_pkg_3GTFO_evt_distant_codec_list
;
273 static int hf_h248_pkg_3GTFO_evt_status
;
274 static int hf_h248_pkg_3GTFO_enable
;
275 static int hf_h248_pkg_3GTFO_codeclist
;
276 static int hf_h248_pkg_3GTFO_evt_codec_modify_optimalcodec
;
277 static int hf_h248_pkg_3GTFO_evt_distant_codec_list_distlist
;
278 static int hf_h248_pkg_3GTFO_evt_status_tfostatus
;
280 static int ett_h248_package_3GTFO
;
281 static int ett_h248_3GTFO_evt_status
;
282 static int ett_h248_3GTFO_evt_distant_codec_list
;
283 static int ett_h248_3GTFO_evt_codec_modify
;
284 static int ett_h248_3GTFO_codec_list
;
285 static int ett_h248_3GTFO_codec
;
288 static void dissect_3GTFO_codec_mode(proto_tree
* tree
, tvbuff_t
* tvb
, packet_info
* pinfo
, int hfid
, h248_curr_info_t
* cu _U_
, void* ignored _U_
) {
289 tvbuff_t
* sub_tvb
= NULL
;
295 asn1_ctx_init(&asn1_ctx
, ASN1_ENC_BER
, true, pinfo
);
297 get_ber_identifier(tvb
, 0, &appclass
, &pc
, &tag
);
299 /* XXX: is this enough to guess it? */
300 if (tag
==BER_UNI_TAG_OCTETSTRING
) {
301 dissect_ber_octet_string(false, &asn1_ctx
, tree
, tvb
, 0, hfid
, &sub_tvb
);
304 proto_tree
* pt
= proto_item_add_subtree(asn1_ctx
.created_item
, ett_h248_3GTFO_codec
);
305 dissect_codec_mode(pt
, sub_tvb
, 0, tvb_reported_length(tvb
));
308 proto_tree_add_item(tree
,hfid
,tvb
,0,-1,ENC_NA
);
313 static void dissect_3GTFO_codec_list(proto_tree
* tree
, tvbuff_t
* tvb
, packet_info
* pinfo
, int hfid
, h248_curr_info_t
* cu _U_
, void* ignored _U_
) {
314 tvbuff_t
* sub_tvb
= NULL
;
320 asn1_ctx_init(&asn1_ctx
, ASN1_ENC_BER
, true, pinfo
);
322 get_ber_identifier(tvb
, 0, &appclass
, &pc
, &tag
);
324 if (tag
==BER_UNI_TAG_OCTETSTRING
) {
325 dissect_ber_octet_string(false, &asn1_ctx
, tree
, tvb
, 0, hfid
, &sub_tvb
);
328 proto_tree
* pt
= proto_item_add_subtree(asn1_ctx
.created_item
,ett_h248_3GTFO_codec_list
);
329 int len
= tvb_reported_length(sub_tvb
);
332 offset
= dissect_codec_mode(pt
, sub_tvb
, offset
, len
);
333 } while(offset
< len
);
336 proto_tree_add_item(tree
,hfid
,tvb
,0,-1,ENC_NA
);
341 static const value_string h248_package_3GTFO_props_vals
[] = {
342 {0,"3G Tandem Free Operation (3gtfo)"},
348 static const value_string h248_pkg_3GTFO_evt_codec_modify_params_vals
[] = {
354 static const value_string h248_pkg_3GTFO_evt_distant_codec_list_params_vals
[] = {
359 static const value_string h248_pkg_3GTFO_evt_status_params_vals
[] = {
365 static const value_string h248_package_3GTFO_evts_vals
[] = {
367 {12,"distant_codec_list"},
372 static const value_string tfoenable_vals
[] = {
378 static const h248_pkg_param_t h248_package_3GTFO_props
[] = {
379 { 0x0001, &hf_h248_pkg_3GTFO_enable
, h248_param_ber_integer
, &implicit
},
380 { 0x0002, &hf_h248_pkg_3GTFO_codeclist
, dissect_3GTFO_codec_list
, NULL
}, /* Sub-list of Octet string Q.765.5 + TS 26.103 .*/
381 { 0, NULL
, NULL
, NULL
}
385 static const h248_pkg_param_t h248_pkg_3GTFO_evt_codec_modify_params
[] = {
386 { 0x0011, &hf_h248_pkg_3GTFO_evt_codec_modify_optimalcodec
, dissect_3GTFO_codec_mode
, NULL
}, /* Q.765.5 + TS 26.103 .*/
387 { 0, NULL
, NULL
, NULL
}
391 static const h248_pkg_param_t h248_pkg_3GTFO_evt_distant_codec_list_params
[] = {
392 { 0x0013, &hf_h248_pkg_3GTFO_evt_distant_codec_list_distlist
, dissect_3GTFO_codec_list
, NULL
}, /* Sub-list of Octet string Q.765.5 + TS 26.103 .*/
393 { 0, NULL
, NULL
, NULL
}
396 static const h248_pkg_param_t h248_pkg_3GTFO_evt_status_params
[] = {
397 { 0x0001, &hf_h248_pkg_3GTFO_evt_status_tfostatus
, h248_param_ber_boolean
, &implicit
},
398 { 0, NULL
, NULL
, NULL
}
401 static const h248_pkg_evt_t h248_package_3GTFO_evts
[] = {
402 { 0x0010, &hf_h248_pkg_3GTFO_evt_codec_modify
, &ett_h248_3GTFO_evt_codec_modify
, h248_pkg_3GTFO_evt_codec_modify_params
, h248_pkg_3GTFO_evt_codec_modify_params_vals
},
403 { 0x0012, &hf_h248_pkg_3GTFO_evt_distant_codec_list
, &ett_h248_3GTFO_evt_distant_codec_list
, h248_pkg_3GTFO_evt_distant_codec_list_params
, h248_pkg_3GTFO_evt_distant_codec_list_params_vals
},
404 { 0x0014, &hf_h248_pkg_3GTFO_evt_status
, &ett_h248_3GTFO_evt_status
, h248_pkg_3GTFO_evt_status_params
, h248_pkg_3GTFO_evt_status_params_vals
},
405 { 0, NULL
, NULL
, NULL
,NULL
}
408 static h248_package_t h248_package_3GTFO
= {
410 &hf_h248_package_3GTFO
,
411 &ett_h248_package_3GTFO
,
412 h248_package_3GTFO_props_vals
,
414 h248_package_3GTFO_evts_vals
,
416 h248_package_3GTFO_props
,
418 h248_package_3GTFO_evts
,
422 * 3G Expanded Call Progress Tones Generator Package
423 * 3GPP TS 29.232 -- 15.2.3
426 * Modification Of Link Characteristics Bearer Capability
427 * 3GPP TS 29.232 -- 15.2.4
430 * Enhanced Circuit Switched Data package
431 * 3GPP TS 29.232 -- 15.2.5
434 * Cellular Text telephone Modem Text Transport
435 * 3GPP TS 29.232 -- 15.2.6
438 * IP transport package
439 * 3GPP TS 29.232 -- 15.2.7
441 static int hf_h248_package_threegiptra
;
442 static int hf_h248_package_threegiptra_ipv4trans
;
443 static int hf_h248_package_threegiptra_ipv6trans
;
444 static int hf_h248_package_threegiptra_UDport
;
446 static int ett_h248_package_threegiptra
;
448 static const value_string h248_threegiptra_properties_vals
[] = {
449 { 0x0000, "threegiptra (3G IP transport)" },
450 { 0001, "IP V4 transport address" },
451 { 0002, "IP V6 transport address" },
452 { 0003, "UDP port" },
456 static const h248_pkg_param_t h248_package_threegiptra_properties
[] = {
457 { 0x0001, &hf_h248_package_threegiptra_ipv4trans
, h248_param_ber_octetstring
, &implicit
},
458 { 0x0002, &hf_h248_package_threegiptra_ipv6trans
, h248_param_ber_octetstring
, &implicit
},
459 { 0x0003, &hf_h248_package_threegiptra_UDport
, h248_param_ber_integer
, &implicit
},
460 { 0x0000, NULL
, NULL
, NULL
}
463 static h248_package_t h248_package_threegiptra
= {
464 0x0083, /* Package ID = threegiptra */
465 &hf_h248_package_threegiptra
, /* hf_id */
466 &ett_h248_package_threegiptra
,
467 h248_threegiptra_properties_vals
,
468 NULL
, /* signal_names */
469 NULL
, /* event_names */
470 NULL
, /* stats_names */
471 h248_package_threegiptra_properties
, /* h248_pkg_param_t */
478 * Flexible Tone Generator Package
479 * 3GPP TS 29.232 -- 15.2.8
483 * 3GPP TS 29.232 -- 15.2.9
486 * ASCI Group call package
487 * 3GPP TS 29.232 -- 15.2.10
490 * 3G Interface Type package
491 * 3GPP TS 29.232 -- 15.2.11
493 static int hf_h248_package_threegint
;
494 static int hf_h248_package_threegint_ipint
;
496 static int ett_h248_package_threegint
;
498 static const value_string h248_threegint_properties_vals
[] = {
499 {0000, "3G Interface Type"},
500 {0001, "IP Interface Type"},
504 static const value_string h248_threegint_ipint_vals
[] = {
505 {1, "NboIP (Nb over IP with SIP-I based Nc,)"},
506 {2, "AoIP (A interface over IP)"},
507 {3, "MboIP (Mb interface)"},
508 {4, "ExtSIPI (External SIP-I based network)"},
512 static const h248_pkg_param_t h248_package_threegint_properties
[] = {
513 { 0x0001, &hf_h248_package_threegint_ipint
, h248_param_ber_integer
, &implicit
},
514 { 0x0000, NULL
, NULL
, NULL
}
517 static h248_package_t h248_package_threegint
= {
518 0x00e3, /* Package ID = threegint */
519 &hf_h248_package_threegint
, /* hf_id */
520 &ett_h248_package_threegint
,
521 h248_threegint_properties_vals
,
522 NULL
, /* signal_names */
523 NULL
, /* event_names */
524 NULL
, /* stats_names */
525 h248_package_threegint_properties
, /* h248_pkg_param_t */
531 void proto_register_h248_3gpp(void) {
532 static hf_register_info hf
[] = {
533 { &hf_h248_package_3GUP_Mode
,
534 { "Mode", "h248.package_3GUP.Mode",
535 FT_UINT32
, BASE_DEC
, VALS(h248_3GUP_Mode_vals
), 0,
537 { &hf_h248_package_3GUP_UPversions
,
538 { "UPversions", "h248.package_3GUP.upversions",
539 FT_UINT32
, BASE_DEC
, VALS(h248_3GUP_upversions_vals
), 0,
541 { &hf_h248_package_3GUP_delerrsdu
,
542 { "Delivery of erroneous SDUs", "h248.package_3GUP.delerrsdu",
543 FT_UINT32
, BASE_DEC
, VALS(h248_3GUP_delerrsdu_vals
), 0,
545 { &hf_h248_package_3GUP_interface
,
546 { "Interface", "h248.package_3GUP.interface",
547 FT_UINT32
, BASE_DEC
, VALS(h248_3GUP_interface_vals
), 0,
549 { &hf_h248_package_3GUP_initdir
,
550 { "Initialisation Direction", "h248.package_3GUP.initdir",
551 FT_UINT32
, BASE_DEC
, VALS(h248_3GUP_initdir_vals
), 0,
555 { &hf_h248_package_3GCSD
,
556 { "CSD Package", "h248.package_3GCSD",
557 FT_BYTES
, BASE_NONE
, NULL
, 0,
558 "Circuit Switched Data Package", HFILL
}},
559 { &hf_h248_package_3GCSD_plmnbc
,
560 { "PLMN Bearer Capability", "h248.package_3GCSD.plmnbc",
561 FT_BYTES
, BASE_NONE
, NULL
, 0,
562 "The PLMN Bearer Capability", HFILL
}},
563 { &hf_h248_package_3GCSD_gsmchancod
,
564 { "GSM channel coding", "h248.package_3GCSD.gsmchancod",
565 FT_BYTES
, BASE_NONE
, NULL
, 0,
566 "Channel information needed for GSM", HFILL
}},
567 { &hf_h248_pkg_3GCSD_evt_protres
,
568 { "Protocol Negotiation Result", "h248.package_3GCSD.protres",
569 FT_BYTES
, BASE_NONE
, NULL
, 0,
570 "This event is used to report the result of the protocol negotiation", HFILL
}},
571 { &hf_h248_pkg_3GCSD_evt_protres_result
,
572 { "Negotiation Result", "h248.package_3GCSD.protres.result",
573 FT_UINT32
, BASE_DEC
, VALS(h248_3GCSD_evt_protres_result_vals
), 0,
574 "reports whether the protocol negotiation has been successful", HFILL
}},
575 { &hf_h248_pkg_3GCSD_evt_protres_cause
,
576 { "Possible Failure Cause", "h248.package_3GCSD.protres.cause",
577 FT_UINT32
, BASE_DEC
, VALS(h248_3GCSD_evt_protres_cause_vals
), 0,
578 "indicates the possible failure cause", HFILL
}},
579 { &hf_h248_pkg_3GCSD_evt_ratechg
,
580 { "Rate Change", "h248.package_3GCSD.ratechg",
581 FT_BYTES
, BASE_NONE
, NULL
, 0,
582 "This event is used to report a rate change", HFILL
}},
583 { &hf_h248_pkg_3GCSD_evt_ratechg_rate
,
584 { "New Rate", "h248.package_3GCSD.ratechg.rate",
585 FT_UINT32
, BASE_DEC
, NULL
, 0,
586 "reports the new rate for the termination", HFILL
}},
587 { &hf_h248_pkg_3GCSD_sig_actprot
,
588 { "Activate Protocol", "h248.package_3GCSD.actprot",
589 FT_BYTES
, BASE_NONE
, NULL
, 0,
590 "Activate the higher layer protocol", HFILL
}},
591 { &hf_h248_pkg_3GCSD_actprot_sig_localpeer
,
592 { "Local Peer Role", "h248.package_3GCSD.actprot.localpeer",
593 FT_UINT32
, BASE_DEC
, VALS(h248_3GCSD_actprot_sig_localpeer_vals
), 0,
594 "It is used to inform the modem whether it should act as originating or terminating peer", HFILL
}},
597 { &hf_h248_package_3GTFO
,
598 { "Tandem Free Operation", "h248.package_3GTFO",
599 FT_BYTES
, BASE_NONE
, NULL
, 0,
600 "This package defines events and properties for Tandem Free Operation (TFO) control", HFILL
}},
601 { &hf_h248_pkg_3GTFO_enable
,
602 { "TFO Activity Control", "h248.package_3GTFO.tfoenable",
603 FT_UINT32
, BASE_DEC
, VALS(tfoenable_vals
), 0,
604 "Defines if TFO is enabled or not", HFILL
}},
605 { &hf_h248_pkg_3GTFO_codeclist
,
606 { "TFO Codec List", "h248.package_3GTFO.codeclist",
607 FT_BYTES
, BASE_NONE
, NULL
, 0,
608 "List of codecs for use in TFO protocol", HFILL
}},
610 { &hf_h248_pkg_3GTFO_evt_codec_modify
,
611 { "Optimal Codec Event", "h248.package_3GTFO.codec_modify",
612 FT_BYTES
, BASE_NONE
, NULL
, 0,
613 "The event is used to notify the MGC that TFO negotiation has resulted in an optimal codec type being proposed", HFILL
}},
614 { &hf_h248_pkg_3GTFO_evt_codec_modify_optimalcodec
,
615 { "Optimal Codec Type", "h248.package_3GTFO.codec_modify.optimalcodec",
616 FT_BYTES
, BASE_NONE
, NULL
, 0,
617 "indicates which is the proposed codec type for TFO", HFILL
}},
619 { &hf_h248_pkg_3GTFO_evt_distant_codec_list
,
620 { "Codec List Event", "h248.package_3GTFO.distant_codec_list",
621 FT_BYTES
, BASE_NONE
, NULL
, 0,
622 "The event is used to notify the MGC of the distant TFO partner's supported codec list", HFILL
}},
624 { &hf_h248_pkg_3GTFO_evt_distant_codec_list_distlist
,
625 { "Distant Codec List", "h248.package_3GTFO.distant_codec_list.distlist",
626 FT_BYTES
, BASE_NONE
, NULL
, 0,
627 "indicates the codec list for TFO", HFILL
}},
629 { &hf_h248_pkg_3GTFO_evt_status
,
630 { "TFO Status Event", "h248.package_3GTFO.status",
631 FT_BYTES
, BASE_NONE
, NULL
, 0,
632 "The event is used to notify the MGC that a TFO link has been established or broken", HFILL
}},
633 { &hf_h248_pkg_3GTFO_evt_status_tfostatus
,
634 { "TFO Status", "h248.package_3GTFO.status.tfostatus",
635 FT_BOOLEAN
, BASE_NONE
, NULL
, 0x0,
636 "reports whether TFO has been established or broken", HFILL
}},
637 { &hf_h248_package_threegint
,
638 { "3G Interface Type", "h248.package_threegint",
639 FT_BYTES
, BASE_NONE
, NULL
, 0,
640 "This package contains a property to specify the used interface type for IP terminations", HFILL
}},
641 { &hf_h248_package_threegint_ipint
,
642 { "IP Interface Type", "h248.package_threegint.ipint",
643 FT_UINT32
, BASE_DEC
, VALS(h248_threegint_ipint_vals
), 0,
647 { &hf_h248_package_threegiptra
,
648 { "IP transport", "h248.package_threegiptra",
649 FT_BYTES
, BASE_NONE
, NULL
, 0,
650 "This package contains the information needed to be able to support IP transport from RAN to the media gateway", HFILL
}},
651 { &hf_h248_package_threegiptra_ipv4trans
,
652 { "IPv4 Address", "h248.package_threegiptra.ipv4trans",
653 FT_BYTES
, BASE_NONE
, NULL
, 0,
655 { &hf_h248_package_threegiptra_ipv6trans
,
656 { "IPv6 Address", "h248.package_threegiptra.ipv6trans",
657 FT_BYTES
, BASE_NONE
, NULL
, 0,
659 { &hf_h248_package_threegiptra_UDport
,
660 { "UDP Port", "h248.package_threegiptra.udport",
661 FT_UINT32
, BASE_DEC
, NULL
, 0,
666 static int *ett
[] = {
667 &ett_h248_package_3GUP
,
668 &ett_h248_package_3GCSD
,
669 &ett_h248_3GCSD_evt_protres
,
670 &ett_h248_3GCSD_evt_ratechg
,
671 &ett_h248_package_3GTFO
,
672 &ett_h248_3GTFO_evt_status
,
673 &ett_h248_3GTFO_evt_distant_codec_list
,
674 &ett_h248_3GTFO_evt_codec_modify
,
675 &ett_h248_3GTFO_codec_list
,
676 &ett_h248_3GTFO_codec
,
677 &ett_pkg_3GCSD_sig_actprot
,
678 &ett_h248_package_threegiptra
,
679 &ett_h248_package_threegint
682 proto_h248_package_3GUP
= proto_register_protocol(PNAME
, PSNAME
, PFNAME
);
684 proto_register_field_array(proto_h248_package_3GUP
, hf
, array_length(hf
));
686 proto_register_subtree_array(ett
, array_length(ett
));
688 h248_register_package(&h248_package_3GUP
,REPLACE_PKG
);
689 h248_register_package(&h248_package_3GCSD
, REPLACE_PKG
);
690 h248_register_package(&h248_package_3GTFO
, REPLACE_PKG
);
691 h248_register_package(&h248_package_threegint
, REPLACE_PKG
);
692 h248_register_package(&h248_package_threegiptra
, REPLACE_PKG
);
697 * Editor modelines - https://www.wireshark.org/tools/modelines.html
702 * indent-tabs-mode: t
705 * vi: set shiftwidth=8 tabstop=8 noexpandtab:
706 * :indentSize=8:tabSize=8:noTabs=false: