5 * (c) 2006, Luis E. Garcia Ontanon <luis@ontanon.org>
9 * Wireshark - Network traffic analyzer
10 * By Gerald Combs <gerald@wireshark.org>
11 * Copyright 1998 Gerald Combs
13 * This program is free software; you can redistribute it and/or
14 * modify it under the terms of the GNU General Public License
15 * as published by the Free Software Foundation; either version 2
16 * of the License, or (at your option) any later version.
18 * This program is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 * GNU General Public License for more details.
23 * You should have received a copy of the GNU General Public License
24 * along with this program; if not, write to the Free Software
25 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
30 #include "packet-h248.h"
31 #define PNAME "H.248 3GPP"
32 #define PSNAME "H2483GPP"
33 #define PFNAME "h248.3gpp"
35 #include "packet-isup.h"
36 #include "packet-gsm_a_common.h"
40 * 3GPP TS 29.232 -- 15.1.1
42 static int proto_h248_package_3GUP
= -1;
44 static int hf_h248_package_3GUP_Mode
= -1;
45 static int hf_h248_package_3GUP_UPversions
= -1;
46 static int hf_h248_package_3GUP_delerrsdu
= -1;
47 static int hf_h248_package_3GUP_interface
= -1;
48 static int hf_h248_package_3GUP_initdir
= -1;
50 static gint ett_h248_package_3GUP
= -1;
52 static gboolean implicit
= FALSE
;
54 static const value_string h248_3GUP_properties_vals
[] = {
55 { 0x0000, "threegup (3G User Plane)" },
57 { 0x0002, "Versions" },
58 { 0x0003, "delerrsdu" },
59 { 0x0004, "interface" },
60 { 0x0005, "initdir" },
64 static const value_string h248_3GUP_Mode_vals
[] = {
65 { 0x00000001, "Transparent mode" },
66 { 0x00000002, "Support mode for predefined SDU sizes" },
70 static const value_string h248_3GUP_upversions_vals
[] = {
71 { 0x01, "Version 1" },
72 { 0x02, "Version 2" },
73 { 0x03, "Version 3" },
74 { 0x04, "Version 4" },
75 { 0x05, "Version 5" },
76 { 0x06, "Version 6" },
77 { 0x07, "Version 7" },
78 { 0x08, "Version 8" },
79 { 0x09, "Version 9" },
80 { 0x0A, "Version 10" },
81 { 0x0B, "Version 11" },
82 { 0x0C, "Version 12" },
83 { 0x0D, "Version 13" },
84 { 0x0E, "Version 14" },
85 { 0x0F, "Version 15" },
86 { 0x10, "Version 16" },
90 static const value_string h248_3GUP_delerrsdu_vals
[] = {
93 { 0x0003, "Not Applicable" },
97 static const value_string h248_3GUP_interface_vals
[] = {
98 { 0x0001, "RAN (Iu interface)" },
99 { 0x0002, "CN (Nb interface)" },
103 static const value_string h248_3GUP_initdir_vals
[] = {
104 { 0x0001, "Incoming" },
105 { 0x0002, "Outgoing" },
109 static const value_string h248_3GUP_parameters
[] _U_
= {
111 { 0x0002, "UPversions" },
112 { 0x0003, "Delivery of erroneous SDUs" },
113 { 0x0004, "Interface" },
114 { 0x0005, "Initialisation Direction" },
118 static const h248_pkg_param_t h248_package_3GUP_properties
[] = {
119 { 0x0001, &hf_h248_package_3GUP_Mode
, h248_param_ber_integer
, &implicit
},
120 { 0x0002, &hf_h248_package_3GUP_UPversions
, h248_param_ber_integer
, &implicit
},
121 { 0x0003, &hf_h248_package_3GUP_delerrsdu
, h248_param_ber_integer
, &implicit
},
122 { 0x0004, &hf_h248_package_3GUP_interface
, h248_param_ber_integer
, &implicit
},
123 { 0x0005, &hf_h248_package_3GUP_initdir
, h248_param_ber_integer
, &implicit
},
124 { 0x0000, NULL
, NULL
, NULL
}
127 static const h248_package_t h248_package_3GUP
= {
129 &proto_h248_package_3GUP
,
130 &ett_h248_package_3GUP
,
131 h248_3GUP_properties_vals
,
135 h248_package_3GUP_properties
,
143 * Circuit Switched Data package
144 * 3GPP TS 29.232 -- 15.2.1
147 static int hf_h248_package_3GCSD
= -1;
149 static int hf_h248_package_3GCSD_plmnbc
= -1;
150 static int hf_h248_package_3GCSD_gsmchancod
= -1;
151 static int hf_h248_pkg_3GCSD_evt_protres
= -1;
152 static int hf_h248_pkg_3GCSD_evt_protres_result
= -1;
153 static int hf_h248_pkg_3GCSD_evt_protres_cause
= -1;
154 static int hf_h248_pkg_3GCSD_evt_ratechg
= -1;
155 static int hf_h248_pkg_3GCSD_evt_ratechg_rate
= -1;
156 static int hf_h248_pkg_3GCSD_sig_actprot
= -1;
157 static int hf_h248_pkg_3GCSD_actprot_sig_localpeer
= -1;
159 static gint ett_h248_package_3GCSD
= -1;
160 static gint ett_h248_3GCSD_evt_protres
= -1;
161 static gint ett_h248_3GCSD_evt_ratechg
= -1;
162 static gint ett_pkg_3GCSD_sig_actprot
= -1;
164 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
) {
167 asn1_ctx_init(&asn1_ctx
, ASN1_ENC_BER
, TRUE
, pinfo
);
168 dissect_ber_octet_string(implicit_param
? *((gboolean
*)implicit_param
) : FALSE
, &asn1_ctx
, tree
, tvb
, 0, hfid
, NULL
);
169 de_bearer_cap(tvb
, tree
, pinfo
, 4, tvb_length(tvb
)-4, NULL
, 0);
172 static const value_string h248_3GCSD_properties_vals
[] = {
173 { 0x0000, "Circuit Switched Data (threegcsd)"},
175 { 0x0002, "gsmchancod"},
179 static const value_string h248_3GCSD_signals_vals
[] _U_
= {
180 { 0x0001, "actprot" },
184 static const value_string h248_3GCSD_signal_actprot_vals
[] = {
185 { 0x0001, "localpeer" },
189 static const value_string h248_3GCSD_events_vals
[] _U_
= {
190 { 0x0001, "protres"},
191 { 0x0002, "ratechg"},
195 static const value_string h248_3GCSD_event_protres_vals
[] = {
201 static const value_string h248_3GCSD_event_ratechg_vals
[] = {
206 static const value_string h248_3GCSD_evt_protres_result_vals
[] = {
212 static const value_string h248_3GCSD_evt_protres_cause_vals
[] = {
218 static const value_string h248_3GCSD_actprot_sig_localpeer_vals
[] = {
224 static const h248_pkg_param_t h248_package_3GCSD_props
[] = {
225 { 0x0001, &hf_h248_package_3GCSD_plmnbc
, dissect_3gcsd_plmnbc
, &implicit
},
226 { 0x0002, &hf_h248_package_3GCSD_gsmchancod
, h248_param_ber_octetstring
, &implicit
},
227 { 0x0000, NULL
, NULL
, NULL
}
230 static const h248_pkg_param_t h248_pkg_3GCSD_evt_protres_params
[] = {
231 { 0x0001, &hf_h248_pkg_3GCSD_evt_protres_result
, h248_param_ber_integer
, &implicit
},
232 { 0x0002, &hf_h248_pkg_3GCSD_evt_protres_cause
, h248_param_ber_integer
, &implicit
},
233 { 0, NULL
, NULL
, NULL
}
236 static const h248_pkg_param_t h248_pkg_3GCSD_evt_ratechg_params
[] = {
237 { 0x0001, &hf_h248_pkg_3GCSD_evt_ratechg_rate
, h248_param_ber_integer
, &implicit
},
238 { 0, NULL
, NULL
, NULL
}
241 static const h248_pkg_evt_t h248_package_3GCSD_evts
[] = {
242 { 0x0001, &hf_h248_pkg_3GCSD_evt_protres
, &ett_h248_3GCSD_evt_protres
, h248_pkg_3GCSD_evt_protres_params
, h248_3GCSD_event_protres_vals
},
243 { 0x0002, &hf_h248_pkg_3GCSD_evt_ratechg
, &ett_h248_3GCSD_evt_ratechg
, h248_pkg_3GCSD_evt_ratechg_params
, h248_3GCSD_event_ratechg_vals
},
244 { 0, NULL
, NULL
, NULL
,NULL
}
247 static const h248_pkg_param_t h248_pkg_3GCSD_actprot_sig_params
[] = {
248 { 0x0001, &hf_h248_pkg_3GCSD_actprot_sig_localpeer
, h248_param_ber_integer
, &implicit
},
249 { 0, NULL
, NULL
, NULL
}
252 static const h248_pkg_sig_t h248_package_3GCSD_sigs
[] = {
253 { 0x0010, &hf_h248_pkg_3GCSD_sig_actprot
, &ett_pkg_3GCSD_sig_actprot
, h248_pkg_3GCSD_actprot_sig_params
, h248_3GCSD_signal_actprot_vals
},
254 { 0, NULL
, NULL
, NULL
,NULL
}
257 static const h248_package_t h248_package_3GCSD
= {
259 &hf_h248_package_3GCSD
,
260 &ett_h248_package_3GCSD
,
261 h248_3GCSD_properties_vals
,
262 h248_3GCSD_signals_vals
,
263 h248_3GCSD_events_vals
,
265 h248_package_3GCSD_props
,
266 h248_package_3GCSD_sigs
,
267 h248_package_3GCSD_evts
,
274 * 3GPP TS 29.232 -- 15.2.2
276 static int hf_h248_package_3GTFO
= -1;
278 static int hf_h248_pkg_3GTFO_evt_codec_modify
= -1;
279 static int hf_h248_pkg_3GTFO_evt_distant_codec_list
= -1;
280 static int hf_h248_pkg_3GTFO_evt_status
= -1;
281 static int hf_h248_pkg_3GTFO_enable
= -1;
282 static int hf_h248_pkg_3GTFO_codeclist
= -1;
283 static int hf_h248_pkg_3GTFO_evt_codec_modify_optimalcodec
= -1;
284 static int hf_h248_pkg_3GTFO_evt_distant_codec_list_distlist
= -1;
285 static int hf_h248_pkg_3GTFO_evt_status_tfostatus
= -1;
287 static gint ett_h248_package_3GTFO
= -1;
288 static gint ett_h248_3GTFO_evt_status
= -1;
289 static gint ett_h248_3GTFO_evt_distant_codec_list
= -1;
290 static gint ett_h248_3GTFO_evt_codec_modify
= -1;
291 static gint ett_h248_3GTFO_codec_list
= -1;
292 static gint ett_h248_3GTFO_codec
= -1;
295 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_
) {
296 tvbuff_t
* sub_tvb
= NULL
;
302 asn1_ctx_init(&asn1_ctx
, ASN1_ENC_BER
, TRUE
, pinfo
);
304 get_ber_identifier(tvb
, 0, &appclass
, &pc
, &tag
);
306 /* XXX: is this enough to guess it? */
307 if (tag
==BER_UNI_TAG_OCTETSTRING
) {
308 dissect_ber_octet_string(FALSE
, &asn1_ctx
, tree
, tvb
, 0, hfid
, &sub_tvb
);
311 proto_tree
* pt
= proto_item_add_subtree(asn1_ctx
.created_item
, ett_h248_3GTFO_codec
);
312 dissect_codec_mode(pt
, sub_tvb
, 0, tvb_length(tvb
));
315 proto_tree_add_item(tree
,hfid
,tvb
,0,-1,ENC_NA
);
320 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_
) {
321 tvbuff_t
* sub_tvb
= NULL
;
327 asn1_ctx_init(&asn1_ctx
, ASN1_ENC_BER
, TRUE
, pinfo
);
329 get_ber_identifier(tvb
, 0, &appclass
, &pc
, &tag
);
331 if (tag
==BER_UNI_TAG_OCTETSTRING
) {
332 dissect_ber_octet_string(FALSE
, &asn1_ctx
, tree
, tvb
, 0, hfid
, &sub_tvb
);
335 proto_tree
* pt
= proto_item_add_subtree(asn1_ctx
.created_item
,ett_h248_3GTFO_codec_list
);
336 int len
= tvb_length(sub_tvb
);
339 offset
= dissect_codec_mode(pt
, sub_tvb
, offset
, len
);
340 } while(offset
< len
);
343 proto_tree_add_item(tree
,hfid
,tvb
,0,-1,ENC_NA
);
348 static const value_string h248_package_3GTFO_props_vals
[] = {
349 {0,"3G Tandem Free Operation (3gtfo)"},
355 static const value_string h248_pkg_3GTFO_evt_codec_modify_params_vals
[] = {
361 static const value_string h248_pkg_3GTFO_evt_distant_codec_list_params_vals
[] = {
366 static const value_string h248_pkg_3GTFO_evt_status_params_vals
[] = {
372 static const value_string h248_package_3GTFO_evts_vals
[] = {
374 {12,"distant_codec_list"},
379 static const value_string tfoenable_vals
[] = {
385 static const h248_pkg_param_t h248_package_3GTFO_props
[] = {
386 { 0x0001, &hf_h248_pkg_3GTFO_enable
, h248_param_ber_integer
, &implicit
},
387 { 0x0002, &hf_h248_pkg_3GTFO_codeclist
, dissect_3GTFO_codec_list
, NULL
}, /* Sub-list of Octet string Q.765.5 + TS 26.103 .*/
388 { 0, NULL
, NULL
, NULL
}
392 static const h248_pkg_param_t h248_pkg_3GTFO_evt_codec_modify_params
[] = {
393 { 0x0011, &hf_h248_pkg_3GTFO_evt_codec_modify_optimalcodec
, dissect_3GTFO_codec_mode
, NULL
}, /* Q.765.5 + TS 26.103 .*/
394 { 0, NULL
, NULL
, NULL
}
398 static const h248_pkg_param_t h248_pkg_3GTFO_evt_distant_codec_list_params
[] = {
399 { 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 .*/
400 { 0, NULL
, NULL
, NULL
}
403 static const h248_pkg_param_t h248_pkg_3GTFO_evt_status_params
[] = {
404 { 0x0001, &hf_h248_pkg_3GTFO_evt_status_tfostatus
, h248_param_ber_boolean
, &implicit
},
405 { 0, NULL
, NULL
, NULL
}
408 static const h248_pkg_evt_t h248_package_3GTFO_evts
[] = {
409 { 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
},
410 { 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
},
411 { 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
},
412 { 0, NULL
, NULL
, NULL
,NULL
}
415 static const h248_package_t h248_package_3GTFO
= {
417 &hf_h248_package_3GTFO
,
418 &ett_h248_package_3GTFO
,
419 h248_package_3GTFO_props_vals
,
421 h248_package_3GTFO_evts_vals
,
423 h248_package_3GTFO_props
,
425 h248_package_3GTFO_evts
,
429 * 3G Expanded Call Progress Tones Generator Package
430 * 3GPP TS 29.232 -- 15.2.3
433 * Modification Of Link Characteristics Bearer Capability
434 * 3GPP TS 29.232 -- 15.2.4
437 * Enhanced Circuit Switched Data package
438 * 3GPP TS 29.232 -- 15.2.5
441 * Cellular Text telephone Modem Text Transport
442 * 3GPP TS 29.232 -- 15.2.6
445 * IP transport package
446 * 3GPP TS 29.232 -- 15.2.7
449 * Flexible Tone Generator Package
450 * 3GPP TS 29.232 -- 15.2.8
454 * 3GPP TS 29.232 -- 15.2.9
457 * ASCI Group call package
458 * 3GPP TS 29.232 -- 15.2.10
462 void proto_register_h248_3gpp(void) {
463 static hf_register_info hf
[] = {
464 { &hf_h248_package_3GUP_Mode
,
465 { "Mode", "h248.package_3GUP.Mode",
466 FT_UINT32
, BASE_DEC
, VALS(h248_3GUP_Mode_vals
), 0,
468 { &hf_h248_package_3GUP_UPversions
,
469 { "UPversions", "h248.package_3GUP.upversions",
470 FT_UINT32
, BASE_DEC
, VALS(h248_3GUP_upversions_vals
), 0,
472 { &hf_h248_package_3GUP_delerrsdu
,
473 { "Delivery of erroneous SDUs", "h248.package_3GUP.delerrsdu",
474 FT_UINT32
, BASE_DEC
, VALS(h248_3GUP_delerrsdu_vals
), 0,
476 { &hf_h248_package_3GUP_interface
,
477 { "Interface", "h248.package_3GUP.interface",
478 FT_UINT32
, BASE_DEC
, VALS(h248_3GUP_interface_vals
), 0,
480 { &hf_h248_package_3GUP_initdir
,
481 { "Initialisation Direction", "h248.package_3GUP.initdir",
482 FT_UINT32
, BASE_DEC
, VALS(h248_3GUP_initdir_vals
), 0,
486 { &hf_h248_package_3GCSD
,
487 { "CSD Package", "h248.package_3GCSD",
488 FT_BYTES
, BASE_NONE
, NULL
, 0,
489 "Circuit Switched Data Package", HFILL
}},
490 { &hf_h248_package_3GCSD_plmnbc
,
491 { "PLMN Bearer Capability", "h248.package_3GCSD.plmnbc",
492 FT_BYTES
, BASE_NONE
, NULL
, 0,
493 "The PLMN Bearer Capability", HFILL
}},
494 { &hf_h248_package_3GCSD_gsmchancod
,
495 { "GSM channel coding", "h248.package_3GCSD.gsmchancod",
496 FT_BYTES
, BASE_NONE
, NULL
, 0,
497 "Channel information needed for GSM", HFILL
}},
498 { &hf_h248_pkg_3GCSD_evt_protres
,
499 { "Protocol Negotiation Result", "h248.package_3GCSD.protres",
500 FT_BYTES
, BASE_NONE
, NULL
, 0,
501 "This event is used to report the result of the protocol negotiation", HFILL
}},
502 { &hf_h248_pkg_3GCSD_evt_protres_result
,
503 { "Negotiation Result", "h248.package_3GCSD.protres.result",
504 FT_UINT32
, BASE_DEC
, VALS(h248_3GCSD_evt_protres_result_vals
), 0,
505 "reports whether the protocol negotiation has been successful", HFILL
}},
506 { &hf_h248_pkg_3GCSD_evt_protres_cause
,
507 { "Possible Failure Cause", "h248.package_3GCSD.protres.cause",
508 FT_UINT32
, BASE_DEC
, VALS(h248_3GCSD_evt_protres_cause_vals
), 0,
509 "indicates the possible failure cause", HFILL
}},
510 { &hf_h248_pkg_3GCSD_evt_ratechg
,
511 { "Rate Change", "h248.package_3GCSD.ratechg",
512 FT_BYTES
, BASE_NONE
, NULL
, 0,
513 "This event is used to report a rate change", HFILL
}},
514 { &hf_h248_pkg_3GCSD_evt_ratechg_rate
,
515 { "New Rate", "h248.package_3GCSD.ratechg.rate",
516 FT_UINT32
, BASE_DEC
, NULL
, 0,
517 "reports the new rate for the termination", HFILL
}},
518 { &hf_h248_pkg_3GCSD_sig_actprot
,
519 { "Activate Protocol", "h248.package_3GCSD.actprot",
520 FT_BYTES
, BASE_NONE
, NULL
, 0,
521 "Activate the higher layer protocol", HFILL
}},
522 { &hf_h248_pkg_3GCSD_actprot_sig_localpeer
,
523 { "Local Peer Role", "h248.package_3GCSD.actprot.localpeer",
524 FT_UINT32
, BASE_DEC
, VALS(h248_3GCSD_actprot_sig_localpeer_vals
), 0,
525 "It is used to inform the modem whether it should act as originating or terminating peer", HFILL
}},
528 { &hf_h248_package_3GTFO
,
529 { "Tandem Free Operation", "h248.package_3GTFO",
530 FT_BYTES
, BASE_NONE
, NULL
, 0,
531 "This package defines events and properties for Tandem Free Operation (TFO) control", HFILL
}},
532 { &hf_h248_pkg_3GTFO_enable
,
533 { "TFO Activity Control", "h248.package_3GTFO.tfoenable",
534 FT_UINT32
, BASE_DEC
, VALS(tfoenable_vals
), 0,
535 "Defines if TFO is enabled or not", HFILL
}},
536 { &hf_h248_pkg_3GTFO_codeclist
,
537 { "TFO Codec List", "h248.package_3GTFO.codeclist",
538 FT_BYTES
, BASE_NONE
, NULL
, 0,
539 "List of codecs for use in TFO protocol", HFILL
}},
541 { &hf_h248_pkg_3GTFO_evt_codec_modify
,
542 { "Optimal Codec Event", "h248.package_3GTFO.codec_modify",
543 FT_BYTES
, BASE_NONE
, NULL
, 0,
544 "The event is used to notify the MGC that TFO negotiation has resulted in an optimal codec type being proposed", HFILL
}},
545 { &hf_h248_pkg_3GTFO_evt_codec_modify_optimalcodec
,
546 { "Optimal Codec Type", "h248.package_3GTFO.codec_modify.optimalcodec",
547 FT_BYTES
, BASE_NONE
, NULL
, 0,
548 "indicates which is the proposed codec type for TFO", HFILL
}},
550 { &hf_h248_pkg_3GTFO_evt_distant_codec_list
,
551 { "Codec List Event", "h248.package_3GTFO.distant_codec_list",
552 FT_BYTES
, BASE_NONE
, NULL
, 0,
553 "The event is used to notify the MGC of the distant TFO partner's supported codec list", HFILL
}},
555 { &hf_h248_pkg_3GTFO_evt_distant_codec_list_distlist
,
556 { "Distant Codec List", "h248.package_3GTFO.distant_codec_list.distlist",
557 FT_BYTES
, BASE_NONE
, NULL
, 0,
558 "indicates the codec list for TFO", HFILL
}},
560 { &hf_h248_pkg_3GTFO_evt_status
,
561 { "TFO Status Event", "h248.package_3GTFO.status",
562 FT_BYTES
, BASE_NONE
, NULL
, 0,
563 "The event is used to notify the MGC that a TFO link has been established or broken", HFILL
}},
564 { &hf_h248_pkg_3GTFO_evt_status_tfostatus
,
565 { "TFO Status", "h248.package_3GTFO.status.tfostatus",
566 FT_BOOLEAN
, BASE_NONE
, NULL
, 0x0,
567 "reports whether TFO has been established or broken", HFILL
}},
570 static gint
*ett
[] = {
571 &ett_h248_package_3GUP
,
572 &ett_h248_package_3GCSD
,
573 &ett_h248_3GCSD_evt_protres
,
574 &ett_h248_3GCSD_evt_ratechg
,
575 &ett_h248_package_3GTFO
,
576 &ett_h248_3GTFO_evt_status
,
577 &ett_h248_3GTFO_evt_distant_codec_list
,
578 &ett_h248_3GTFO_evt_codec_modify
,
579 &ett_h248_3GTFO_codec_list
,
580 &ett_h248_3GTFO_codec
,
581 &ett_pkg_3GCSD_sig_actprot
584 proto_h248_package_3GUP
= proto_register_protocol(PNAME
, PSNAME
, PFNAME
);
586 proto_register_field_array(proto_h248_package_3GUP
, hf
, array_length(hf
));
588 proto_register_subtree_array(ett
, array_length(ett
));
590 h248_register_package(&h248_package_3GUP
,REPLACE_PKG
);
591 h248_register_package(&h248_package_3GCSD
, REPLACE_PKG
);
592 h248_register_package(&h248_package_3GTFO
, REPLACE_PKG
);