3 * v150fw = v.150.1 SSE messages, contained in RTP packets
5 * Written by Jamison Adcock <jamison.adcock@cobham.com>
6 * for Sparta Inc., dba Cobham Analytic Solutions
7 * This code is largely based on the RTP parsing code
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.
33 #include <epan/packet.h>
35 void proto_register_v150fw(void);
37 /* Initialize the protocol & registered fields
38 * Look familiar? This is in the same format as an NTE (named telephone event) from RFC 2833:
40 static int proto_v150fw = -1;
42 static int hf_v150fw_event_id = -1; /* 6 bits */
43 static int hf_v150fw_force_response_bit = -1;
44 static int hf_v150fw_extension_bit = -1;
46 static int hf_v150fw_reason_id_code = -1; /* value & string */
48 static int hf_v150fw_reason_id_code_info = -1; /* 16 bits */
50 static int hf_v150fw_ric_info_mod_avail = -1; /* ric = 1,2 */
51 static int hf_v150fw_cm_jm_mod_avail_pcm_mode = -1;
52 static int hf_v150fw_cm_jm_mod_avail_v34_duplex = -1;
53 static int hf_v150fw_cm_jm_mod_avail_v34_half_duplex = -1;
54 static int hf_v150fw_cm_jm_mod_avail_v32_v32bis = -1;
55 static int hf_v150fw_cm_jm_mod_avail_v22_v22bis = -1;
56 static int hf_v150fw_cm_jm_mod_avail_v17 = -1;
57 static int hf_v150fw_cm_jm_mod_avail_v29_half_duplex = -1;
58 static int hf_v150fw_cm_jm_mod_avail_v27ter = -1;
59 static int hf_v150fw_cm_jm_mod_avail_v26ter = -1;
60 static int hf_v150fw_cm_jm_mod_avail_v26bis = -1;
61 static int hf_v150fw_cm_jm_mod_avail_v23_duplex = -1;
62 static int hf_v150fw_cm_jm_mod_avail_v23_half_duplex = -1;
63 static int hf_v150fw_cm_jm_mod_avail_v21 = -1;
64 static int hf_v150fw_cm_jm_mod_avail_v90_or_v92_analog = -1;
65 static int hf_v150fw_cm_jm_mod_avail_v90_or_v92_digital = -1;
66 static int hf_v150fw_cm_jm_mod_avail_v91 = -1;
68 static int hf_v150fw_ric_info_timeout = -1; /* ric= 18 */
69 static int hf_v150fw_ric_info_timeout_vendor = -1;
71 static int hf_v150fw_ric_info_cleardown = -1; /* ric = 20 */
72 static int hf_v150fw_ric_info_cleardown_reserved = -1;
73 static int hf_v150fw_ric_info_cleardown_vendor_tag = -1; /* extension fields */
74 static int hf_v150fw_ric_info_cleardown_vendor_info = -1;
76 static int hf_v150fw_reserved = -1; /* 5 bits */
77 static int hf_v150fw_extension_len = -1; /* 11 bits */
78 static int hf_v150fw_remainder = -1;
80 /* initialize the subtree pointers */
81 static gint ett_v150fw = -1;
82 static gint ett_available_modulations = -1;
84 /* for some "range_string"s, there's only one value in the range */
85 #define V150FW_VALUE_RANGE(a) a,a
88 /* V.150.1 State Signalling Events (SSE): */
89 #define V150FW_EVENT_RESERVED1 0
90 #define V150FW_EVENT_INITIAL_AUDIO 1
91 #define V150FW_EVENT_VOICEBAND_DATA 2
92 #define V150FW_EVENT_MODEM_RELAY 3
93 #define V150FW_EVENT_FAX_RELAY 4
94 #define V150FW_EVENT_TEXT_RELAY 5
95 #define V150FW_EVENT_TEXT_PROBE 6 /* new in ITU-T Rec. V.150.1 (2003)/Amd.2 (05/2006) */
96 /* 7 - 31 reserved for future use */
97 #define V150FW_EVENT_RESERVED2_START 7
98 #define V150FW_EVENT_RESERVED2_END 31
99 /* 32 - 63 vendor-defined */
100 #define V150FW_EVENT_VENDOR_START 32
101 #define V150FW_EVENT_VENDOR_END 63
104 /* V.150.1 SSE reason ID codes: */
105 #define V150FW_RIC_NULL 0
106 #define V150FW_RIC_CM 1
107 #define V150FW_RIC_JM 2
108 #define V150FW_RIC_AA 3
109 #define V150FW_RIC_AC 4
110 #define V150FW_RIC_USB1 5
111 #define V150FW_RIC_SB1 6
112 #define V150FW_RIC_S1 7
113 #define V150FW_RIC_V21_CH2 8
114 #define V150FW_RIC_V21_CH1 9
115 #define V150FW_RIC_V23_HIGH_CHANNEL 10
116 #define V150FW_RIC_V23_LOW_CHANNEL 11
117 #define V150FW_RIC_TONE_2225_HZ 12
118 #define V150FW_RIC_V21_CH2_HDLC_FLAGS 13
119 #define V150FW_RIC_INDETERMINATE_SIGNAL 14
120 #define V150FW_RIC_SILENCE 15
121 #define V150FW_RIC_CNG 16
122 #define V150FW_RIC_VOICE 17
123 #define V150FW_RIC_TIMEOUT 18
124 #define V150FW_RIC_P_STATE_TRANS 19
125 #define V150FW_RIC_CLEARDOWN 20
126 #define V150FW_RIC_ANS_CED_2100_HZ 21
127 #define V150FW_RIC_ANSAM 22
128 #define V150FW_RIC_SLASH_ANS 23
129 #define V150FW_RIC_SLASH_ANSAM 24
130 #define V150FW_RIC_QC1A 25
131 #define V150FW_RIC_QC1D 26
132 #define V150FW_RIC_QC2A 27
133 #define V150FW_RIC_QC2D 28
134 #define V150FW_RIC_CRE 29
135 #define V150FW_RIC_CRD 30
136 /* new from ITU-T V.150.1 Amendment 1: */
137 #define V150FW_RIC_TIA_825A_45 31
138 #define V150FW_RIC_TIA_825A_50 32
139 #define V150FW_RIC_EDT 33
140 #define V150FW_RIC_BELL_103_MODEM 34
141 #define V150FW_RIC_V21_TEXT_PHONE_T50 35
142 #define V150FW_RIC_V23_TEXT_MINITEL 36
143 #define V150FW_RIC_V18_TEXT_PHONE_T140 37
144 #define V150FW_RIC_DTMF_BASED_TEXT_RELAY 38
145 #define V150FW_RIC_CTM 39
146 /* 40 - 127 reserved */
147 #define V150FW_RIC_RESERVED_START 40
148 #define V150FW_RIC_RESERVED_END 127
149 /* 128 - 255 for vendor use */
150 #define V150FW_RIC_VENDOR_START 128
151 #define V150FW_RIC_VENDOR_END 255
154 /* Timeout (V150FW_RIC_TIMEOUT) reason info: */
155 #define V150FW_RIC_INFO_TIMEOUT_NULL 0
156 #define V150FW_RIC_INFO_TIMEOUT_CALL_DISCRIMINATION_TIMEOUT 1
157 #define V150FW_RIC_INFO_TIMEOUT_IP_TLP_TIMEOUT 2
158 #define V150FW_RIC_INFO_TIMEOUT_SSE_EXPLICIT_ACK_TIMEOUT 3
161 /* Cleardown (V150FW_RIC_CLEARDOWN) reason info: */
162 #define V150FW_RIC_INFO_CLEARDOWN_UNKNOWN 0
163 #define V150FW_RIC_INFO_CLEARDOWN_PHYSICAL_LAYER_RELEASE 1
164 #define V150FW_RIC_INFO_CLEARDOWN_LINK_LAYER_DISCONNECT 2
165 #define V150FW_RIC_INFO_CLEARDOWN_DATA_COMPRESSION_DISCONNECT 3
166 #define V150FW_RIC_INFO_CLEARDOWN_ABORT 4
167 #define V150FW_RIC_INFO_CLEARDOWN_ON_HOOK 5
168 #define V150FW_RIC_INFO_CLEARDOWN_NETWORK_LAYER_TERMINATION 6
169 #define V150FW_RIC_INFO_CLEARDOWN_ADMINISTRATIVE 7
171 /* value strings & range strings */
172 static const range_string v150fw_event_id_name[] = {
173 { V150FW_VALUE_RANGE(V150FW_EVENT_RESERVED1), "Event ID reserved" },
174 { V150FW_VALUE_RANGE(V150FW_EVENT_INITIAL_AUDIO), "Initial audio" },
175 { V150FW_VALUE_RANGE(V150FW_EVENT_VOICEBAND_DATA), "Voice band data" },
176 { V150FW_VALUE_RANGE(V150FW_EVENT_MODEM_RELAY), "Modem relay" },
177 { V150FW_VALUE_RANGE(V150FW_EVENT_FAX_RELAY), "Fax relay" },
178 { V150FW_VALUE_RANGE(V150FW_EVENT_TEXT_RELAY), "Text relay" },
179 { V150FW_VALUE_RANGE(V150FW_EVENT_TEXT_PROBE), "Text probe" },
180 { V150FW_EVENT_RESERVED2_START, V150FW_EVENT_RESERVED2_END, "Reserved for ITU_T" },
181 { V150FW_EVENT_VENDOR_START, V150FW_EVENT_VENDOR_END, "Vendor-defined event" },
185 static const range_string v150fw_ric_name[] = {
186 { V150FW_VALUE_RANGE(V150FW_RIC_NULL), "None" },
187 { V150FW_VALUE_RANGE(V150FW_RIC_CM), "CM" },
188 { V150FW_VALUE_RANGE(V150FW_RIC_JM), "JM" },
189 { V150FW_VALUE_RANGE(V150FW_RIC_AA), "AA" },
190 { V150FW_VALUE_RANGE(V150FW_RIC_AC), "AC" },
191 { V150FW_VALUE_RANGE(V150FW_RIC_USB1), "USB1" },
192 { V150FW_VALUE_RANGE(V150FW_RIC_SB1), "SB1" },
193 { V150FW_VALUE_RANGE(V150FW_RIC_S1), "S1" },
194 { V150FW_VALUE_RANGE(V150FW_RIC_V21_CH2), "V.21 Ch2" },
195 { V150FW_VALUE_RANGE(V150FW_RIC_V21_CH1), "V.21 Ch1" },
196 { V150FW_VALUE_RANGE(V150FW_RIC_V23_HIGH_CHANNEL), "V.23 High Channel" },
197 { V150FW_VALUE_RANGE(V150FW_RIC_V23_LOW_CHANNEL), "V.23 Low Channel" },
198 { V150FW_VALUE_RANGE(V150FW_RIC_TONE_2225_HZ), "Tone (2225 Hz)" },
199 { V150FW_VALUE_RANGE(V150FW_RIC_V21_CH2_HDLC_FLAGS), "V.21 Ch2 HDLC Flags" },
200 { V150FW_VALUE_RANGE(V150FW_RIC_INDETERMINATE_SIGNAL), "Indeterminate signal" },
201 { V150FW_VALUE_RANGE(V150FW_RIC_SILENCE), "Silence" },
202 { V150FW_VALUE_RANGE(V150FW_RIC_CNG), "CNG" },
203 { V150FW_VALUE_RANGE(V150FW_RIC_VOICE), "Voice" },
204 { V150FW_VALUE_RANGE(V150FW_RIC_TIMEOUT), "Timeout" },
205 { V150FW_VALUE_RANGE(V150FW_RIC_P_STATE_TRANS), "p' State Transition" },
206 { V150FW_VALUE_RANGE(V150FW_RIC_CLEARDOWN), "Cleardown" },
207 { V150FW_VALUE_RANGE(V150FW_RIC_ANS_CED_2100_HZ), "ANS/CED (2100Hz)" },
208 { V150FW_VALUE_RANGE(V150FW_RIC_ANSAM), "ANSam" },
209 { V150FW_VALUE_RANGE(V150FW_RIC_SLASH_ANS), "/ANS" },
210 { V150FW_VALUE_RANGE(V150FW_RIC_SLASH_ANSAM), "/ANSam" },
211 { V150FW_VALUE_RANGE(V150FW_RIC_QC1A), "QC1a" },
212 { V150FW_VALUE_RANGE(V150FW_RIC_QC1D), "QC1d" },
213 { V150FW_VALUE_RANGE(V150FW_RIC_QC2A), "QC2a" },
214 { V150FW_VALUE_RANGE(V150FW_RIC_QC2D), "QC2d" },
215 { V150FW_VALUE_RANGE(V150FW_RIC_CRE), "Cre" },
216 { V150FW_VALUE_RANGE(V150FW_RIC_CRD), "CRd" },
217 { V150FW_VALUE_RANGE(V150FW_RIC_TIA_825A_45), "TIA-825A (45.45 bit/s)" },
218 { V150FW_VALUE_RANGE(V150FW_RIC_TIA_825A_50), "TIA-825A (50 bit/s)" },
219 { V150FW_VALUE_RANGE(V150FW_RIC_EDT), "EDT (European Deaf Telephone)" },
220 { V150FW_VALUE_RANGE(V150FW_RIC_BELL_103_MODEM), "Bell 103 Modem" },
221 { V150FW_VALUE_RANGE(V150FW_RIC_V21_TEXT_PHONE_T50), "V.21 text telephone, T-50 encoding" },
222 { V150FW_VALUE_RANGE(V150FW_RIC_V23_TEXT_MINITEL), "V.23 text (Minitel)" },
223 { V150FW_VALUE_RANGE(V150FW_RIC_V18_TEXT_PHONE_T140), "V.18 text telephone, T-140 encoding" },
224 { V150FW_VALUE_RANGE(V150FW_RIC_DTMF_BASED_TEXT_RELAY), "DTMF based Text Relay (Annex B/V.18)" },
225 { V150FW_VALUE_RANGE(V150FW_RIC_CTM), "CTM" },
226 { V150FW_RIC_RESERVED_START, V150FW_RIC_RESERVED_END, "Reserved for use by ITU-T" },
227 { V150FW_RIC_VENDOR_START, V150FW_RIC_VENDOR_END, "For use by vendor" },
231 static const value_string v150fw_ric_info_timeout_type[] = {
232 { V150FW_RIC_INFO_TIMEOUT_NULL, "Null" },
233 { V150FW_RIC_INFO_TIMEOUT_CALL_DISCRIMINATION_TIMEOUT, "Call discrimination timeout" },
234 { V150FW_RIC_INFO_TIMEOUT_IP_TLP_TIMEOUT, "IP TLP timeout" },
235 { V150FW_RIC_INFO_TIMEOUT_SSE_EXPLICIT_ACK_TIMEOUT, "Explicit acknowledgement timeout" },
239 static const value_string v150fw_ric_info_cleardown_type[] = {
240 { V150FW_RIC_INFO_CLEARDOWN_UNKNOWN, "Unknown/unspecified" },
241 { V150FW_RIC_INFO_CLEARDOWN_PHYSICAL_LAYER_RELEASE, "Physical layer release" },
242 { V150FW_RIC_INFO_CLEARDOWN_LINK_LAYER_DISCONNECT, "Link layer disconnect" },
243 { V150FW_RIC_INFO_CLEARDOWN_DATA_COMPRESSION_DISCONNECT, "Data compression disconnect" },
244 { V150FW_RIC_INFO_CLEARDOWN_ABORT, "Abort" },
245 { V150FW_RIC_INFO_CLEARDOWN_ON_HOOK, "On hook" },
246 { V150FW_RIC_INFO_CLEARDOWN_NETWORK_LAYER_TERMINATION, "Network layer termination" },
247 { V150FW_RIC_INFO_CLEARDOWN_ADMINISTRATIVE, "Administrative" },
252 #if 0 /* XXX: The following doesn't actually dissect anything. Is dissect_v150fw() supposed to be called ? */
254 dissect_v150fw_heur(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree _U_)
259 gint payload_length = tvb_length(tvb);
260 unsigned int offset = 0;
262 /* see appendix C (State Signalling Events) in ITU-T Rec. V.150.1 for details */
265 octet1 = tvb_get_guint8(tvb, offset);
266 extb = octet1 & 0x01;
267 ric = tvb_get_guint8(tvb, offset + 1) & 0xFF;
269 ric_info = tvb_get_ntohs(tvb, offset + 2);
271 /* minimum lengths */
272 if(!extb && payload_length <= 4) /* extb is not set, so minimum length is 4 bytes */
274 if(extb && payload_length <= 6) /* ext bit is set, but no extension found? */
277 if(ric == 0 || (ric >= 6 && ric <= 31)) /* values reserved for future use */
283 if(ric_info != 0) /* ric_info must be NULL if ric is NULL */
287 if(!extb && payload_length > 4) /* payload too long */
290 case V150FW_RIC_TIMEOUT:
291 case V150FW_RIC_CLEARDOWN:
294 if(ric < 31 && ric_info != 0) /* ric_info is zero unless ric is CM, JM, TIMEOUT ro CLEARDOWN */
296 if(ric >= 31 && ric <= 127) /* 31 - 127 are reserved for future use */
298 /* 128 - 255 are vendor-specific */
307 dissect_v150fw(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
309 /* Set up structures needed to add the protocol subtree and manage it */
311 proto_tree *v150fw_tree, *field_tree;
315 unsigned int offset = 0;
319 /* create the trees */
320 ti = proto_tree_add_item(tree, proto_v150fw, tvb, 0, -1, ENC_NA);
321 v150fw_tree = proto_item_add_subtree(ti, ett_v150fw);
323 payload_length = tvb_length(tvb);
325 /* Get fields needed for further dissection */
326 extb = tvb_get_guint8(tvb, offset) & 0x01; /* extension bit */
327 ric = tvb_get_guint8(tvb, offset + 1);
329 if(extb && payload_length >= 6) /* get optional extension fields */
330 ext_len = tvb_get_ntohs(tvb, offset + 4) & 0x07FF;
332 proto_tree_add_item(v150fw_tree, hf_v150fw_event_id, tvb, offset, 1, ENC_BIG_ENDIAN);
333 proto_tree_add_item(v150fw_tree, hf_v150fw_force_response_bit, tvb, offset, 1, ENC_BIG_ENDIAN);
334 proto_tree_add_item(v150fw_tree, hf_v150fw_extension_bit, tvb, offset, 1, ENC_BIG_ENDIAN);
337 proto_tree_add_item(v150fw_tree, hf_v150fw_reason_id_code, tvb, offset, 1, ENC_BIG_ENDIAN);
340 /* reason identifier code information */
345 ti = proto_tree_add_item(v150fw_tree, hf_v150fw_ric_info_mod_avail, tvb, offset, 2, ENC_BIG_ENDIAN);
346 field_tree = proto_item_add_subtree(ti, ett_available_modulations);
347 proto_tree_add_item(field_tree, hf_v150fw_cm_jm_mod_avail_pcm_mode, tvb, offset, 2, ENC_BIG_ENDIAN);
348 proto_tree_add_item(field_tree, hf_v150fw_cm_jm_mod_avail_v34_duplex, tvb, offset, 2, ENC_BIG_ENDIAN);
349 proto_tree_add_item(field_tree, hf_v150fw_cm_jm_mod_avail_v34_half_duplex, tvb, offset, 2, ENC_BIG_ENDIAN);
350 proto_tree_add_item(field_tree, hf_v150fw_cm_jm_mod_avail_v32_v32bis, tvb, offset, 2, ENC_BIG_ENDIAN);
351 proto_tree_add_item(field_tree, hf_v150fw_cm_jm_mod_avail_v22_v22bis, tvb, offset, 2, ENC_BIG_ENDIAN);
352 proto_tree_add_item(field_tree, hf_v150fw_cm_jm_mod_avail_v17, tvb, offset, 2, ENC_BIG_ENDIAN);
353 proto_tree_add_item(field_tree, hf_v150fw_cm_jm_mod_avail_v29_half_duplex, tvb, offset, 2, ENC_BIG_ENDIAN);
354 proto_tree_add_item(field_tree, hf_v150fw_cm_jm_mod_avail_v27ter, tvb, offset, 2, ENC_BIG_ENDIAN);
355 proto_tree_add_item(field_tree, hf_v150fw_cm_jm_mod_avail_v26ter, tvb, offset, 2, ENC_BIG_ENDIAN);
356 proto_tree_add_item(field_tree, hf_v150fw_cm_jm_mod_avail_v26bis, tvb, offset, 2, ENC_BIG_ENDIAN);
357 proto_tree_add_item(field_tree, hf_v150fw_cm_jm_mod_avail_v23_duplex, tvb, offset, 2, ENC_BIG_ENDIAN);
358 proto_tree_add_item(field_tree, hf_v150fw_cm_jm_mod_avail_v23_half_duplex, tvb, offset, 2, ENC_BIG_ENDIAN);
359 proto_tree_add_item(field_tree, hf_v150fw_cm_jm_mod_avail_v21, tvb, offset, 2, ENC_BIG_ENDIAN);
360 proto_tree_add_item(field_tree, hf_v150fw_cm_jm_mod_avail_v90_or_v92_analog, tvb, offset, 2, ENC_BIG_ENDIAN);
361 proto_tree_add_item(field_tree, hf_v150fw_cm_jm_mod_avail_v90_or_v92_digital, tvb, offset, 2, ENC_BIG_ENDIAN);
362 proto_tree_add_item(field_tree, hf_v150fw_cm_jm_mod_avail_v91, tvb, offset, 2, ENC_BIG_ENDIAN);
364 case V150FW_RIC_TIMEOUT:
365 proto_tree_add_item(v150fw_tree, hf_v150fw_ric_info_timeout, tvb, offset, 1, ENC_BIG_ENDIAN);
366 proto_tree_add_item(v150fw_tree, hf_v150fw_ric_info_timeout_vendor, tvb, offset + 1, 1, ENC_BIG_ENDIAN);
368 case V150FW_RIC_CLEARDOWN:
369 proto_tree_add_item(v150fw_tree, hf_v150fw_ric_info_cleardown, tvb, offset, 1, ENC_BIG_ENDIAN);
370 proto_tree_add_item(v150fw_tree, hf_v150fw_ric_info_cleardown_reserved, tvb, offset + 1, 1, ENC_BIG_ENDIAN);
373 proto_tree_add_item(v150fw_tree, hf_v150fw_reason_id_code_info, tvb, offset, 2, ENC_BIG_ENDIAN);
378 if(extb && payload_length >= 6) /* display optional extension fields */
380 proto_tree_add_item(v150fw_tree, hf_v150fw_reserved, tvb, offset, 2, ENC_BIG_ENDIAN);
381 if(ext_len != (payload_length - 6))
383 /* TODO - ext field len doesn't match actual len... that isn't illegal, but is perhaps worth noting */
384 proto_tree_add_item(v150fw_tree, hf_v150fw_extension_len, tvb, offset, 2, ENC_BIG_ENDIAN);
386 proto_tree_add_item(v150fw_tree, hf_v150fw_extension_len, tvb, offset, 2, ENC_BIG_ENDIAN);
390 /* display optional extension fields */
392 case V150FW_RIC_CLEARDOWN: /* show vendor tag & vendor-specific info */
393 proto_tree_add_item(v150fw_tree, hf_v150fw_ric_info_cleardown_vendor_tag, tvb, offset, 1, ENC_BIG_ENDIAN);
394 proto_tree_add_item(v150fw_tree, hf_v150fw_ric_info_cleardown_vendor_info, tvb, offset+1, 1, ENC_BIG_ENDIAN);
397 /* just dump the bytes for now */
398 proto_tree_add_item(v150fw_tree, hf_v150fw_remainder, tvb, offset, (payload_length - 6), ENC_NA);
404 return tvb_length(tvb);
408 proto_register_v150fw(void)
410 /* set up header fields */
411 static hf_register_info hf[] =
419 BASE_DEC | BASE_RANGE_STRING,
420 RVALS(v150fw_event_id_name),
426 &hf_v150fw_force_response_bit,
438 &hf_v150fw_extension_bit,
444 TFS(&tfs_present_absent),
450 &hf_v150fw_reason_id_code, /* ric value + string */
455 BASE_DEC | BASE_RANGE_STRING,
456 RVALS(v150fw_ric_name),
462 &hf_v150fw_reason_id_code_info,
474 &hf_v150fw_ric_info_timeout,
477 "v150fw.ricinfo.timeout",
480 VALS(v150fw_ric_info_timeout_type),
486 &hf_v150fw_ric_info_timeout_vendor,
488 "Vendor-specific timeout info",
489 "v150fw.ricinfo.timeout_vendor",
498 &hf_v150fw_ric_info_cleardown,
501 "v150fw.ricinfo.cleardown",
504 VALS(v150fw_ric_info_cleardown_type),
510 &hf_v150fw_ric_info_cleardown_reserved,
512 "Reserved for use by the ITU-T",
513 "v150fw.ricinfo.cleardown_reserved",
522 &hf_v150fw_ric_info_cleardown_vendor_tag,
525 "v150fw.cleardown_vendor_tag",
534 &hf_v150fw_ric_info_cleardown_vendor_info,
536 "Vendor-specific info",
537 "v150fw.cleardown_vendor_info",
546 &hf_v150fw_ric_info_mod_avail,
548 "Modulation availability",
549 "v150fw.rinfo.mod_avail",
558 &hf_v150fw_cm_jm_mod_avail_pcm_mode,
561 "v150fw.rinfo.mod_avail.pcm_mode",
564 TFS(&tfs_available_not_available),
570 &hf_v150fw_cm_jm_mod_avail_v34_duplex,
573 "v150fw.rinfo.mod_avail.v34_duplex",
576 TFS(&tfs_available_not_available),
582 &hf_v150fw_cm_jm_mod_avail_v34_half_duplex,
585 "v150fw.rinfo.mod_avail.v34_half_duplex",
588 TFS(&tfs_available_not_available),
594 &hf_v150fw_cm_jm_mod_avail_v32_v32bis,
597 "v150fw.rinfo.mod_avail.v32_v32bis",
600 TFS(&tfs_available_not_available),
606 &hf_v150fw_cm_jm_mod_avail_v22_v22bis,
609 "v150fw.rinfo.mod_avail.v22_v22bis",
612 TFS(&tfs_available_not_available),
618 &hf_v150fw_cm_jm_mod_avail_v17,
621 "v150fw.rinfo.mod_avail.v17",
624 TFS(&tfs_available_not_available),
630 &hf_v150fw_cm_jm_mod_avail_v29_half_duplex,
633 "v150fw.rinfo.mod_avail.v29_half_duplex",
636 TFS(&tfs_available_not_available),
642 &hf_v150fw_cm_jm_mod_avail_v27ter,
645 "v150fw.rinfo.mod_avail.v27ter",
648 TFS(&tfs_available_not_available),
654 &hf_v150fw_cm_jm_mod_avail_v26ter,
657 "v150fw.rinfo.mod_avail.v26ter",
660 TFS(&tfs_available_not_available),
666 &hf_v150fw_cm_jm_mod_avail_v26bis,
669 "v150fw.rinfo.mod_avail.v26bis",
672 TFS(&tfs_available_not_available),
678 &hf_v150fw_cm_jm_mod_avail_v23_duplex,
681 "v150fw.rinfo.mod_avail.v23_duplex",
684 TFS(&tfs_available_not_available),
690 &hf_v150fw_cm_jm_mod_avail_v23_half_duplex,
693 "v150fw.rinfo.mod_avail.half_duplex",
696 TFS(&tfs_available_not_available),
702 &hf_v150fw_cm_jm_mod_avail_v21,
705 "v150fw.rinfo.mod_avail.v21",
708 TFS(&tfs_available_not_available),
714 &hf_v150fw_cm_jm_mod_avail_v90_or_v92_analog,
716 "V.90 or V.92 analog",
717 "v150fw.rinfo.mod_avail.v90_or_v92_analog",
720 TFS(&tfs_available_not_available),
726 &hf_v150fw_cm_jm_mod_avail_v90_or_v92_digital,
728 "V.90 or V.92 digital",
729 "v150fw.rinfo.mod_avail.v90_or_v92_digital",
732 TFS(&tfs_available_not_available),
738 &hf_v150fw_cm_jm_mod_avail_v91,
741 "v150fw.rinfo.mod_avail.v91",
744 TFS(&tfs_available_not_available),
762 &hf_v150fw_extension_len,
764 "Extension field length",
773 /* dump remaining bytes: */
775 &hf_v150fw_remainder,
786 }; /* hf_register_info hf[] */
788 /* setup protocol subtree array */
789 static gint *ett[] = {
791 &ett_available_modulations
794 /* register protocol name & description */
795 proto_v150fw = proto_register_protocol("v150fw State Signaling Event", "v150fw", "v150fw");
797 /* required function calls to register the header fields and subtrees used */
798 proto_register_field_array(proto_v150fw, hf, array_length(hf));
799 proto_register_subtree_array(ett, array_length(ett));
801 /* register the dissector */
802 new_register_dissector("v150fw", dissect_v150fw, proto_v150fw);