Ethereal-dev: [Ethereal-dev] [PATCH] q.931 dissector improvements
Note: This archive is from the project's previous web site, ethereal.com. This list is no longer active.
From: Richard van der Hoff <richardv@xxxxxxxxxxxxx>
Date: Fri, 02 Jun 2006 10:51:10 +0100
Hi,The attached patch improves the dissection of Q.931 Channel Identification information elements, by using proper (filterable) header fields rather than text tree items.
Cheers, Richard -- Richard van der Hoff <richardv@xxxxxxxxxxxxx> Project Manager Tel: +44 (0) 845 666 7778 http://www.mxtelecom.com
Index: epan/dissectors/packet-q931.c
===================================================================
--- epan/dissectors/packet-q931.c (revision 9192)
+++ epan/dissectors/packet-q931.c (working copy)
@@ -89,6 +89,18 @@
static int hf_q931_screening_ind = -1;
static int hf_q931_presentation_ind = -1;
+/* fields for Channel Indentification IE */
+static int hf_q931_channel_interface_explicit = -1;
+static int hf_q931_channel_interface_type = -1;
+static int hf_q931_channel_exclusive = -1;
+static int hf_q931_channel_dchan = -1;
+static int hf_q931_channel_selection_bri = -1;
+static int hf_q931_channel_selection_pri = -1;
+static int hf_q931_channel_map = -1;
+static int hf_q931_channel_element_type = -1;
+static int hf_q931_channel_number = -1;
+
+
static int hf_q931_segments = -1;
static int hf_q931_segment = -1;
static int hf_q931_segment_overlap = -1;
@@ -187,6 +199,21 @@
"Message sent from originating side"
};
+static const true_false_string tfs_interface_type = {
+ "Primary rate interface",
+ "Basic rate interface"
+};
+
+static const true_false_string tfs_channel_exclusive = {
+ "Exclusive; only the indicated channel is acceptable",
+ "Indicated channel is preferred"
+};
+
+static const true_false_string tfs_channel_map = {
+ "Channel indicated by slot map",
+ "Channel indicated by number"
+};
+
/*
* Information elements.
*/
@@ -1401,28 +1428,17 @@
if (len == 0)
return;
octet = tvb_get_guint8(tvb, offset);
- proto_tree_add_text(tree, tvb, offset, 1,
- "Interface %s identified",
- (octet & Q931_INTERFACE_IDENTIFIED) ? "explicitly" : "implicitly");
- proto_tree_add_text(tree, tvb, offset, 1,
- "%s interface",
- (octet & Q931_NOT_BASIC_CHANNEL) ? "Not basic" : "Basic");
- proto_tree_add_text(tree, tvb, offset, 1,
- "Indicated channel is %s",
- (octet & 0x08) ? "required" : "preferred");
- proto_tree_add_text(tree, tvb, offset, 1,
- "Indicated channel is %sthe D-channel",
- (octet & 0x04) ? "" : "not ");
+
+ proto_tree_add_item(tree, hf_q931_extension_ind, tvb, offset, 1, FALSE);
+ proto_tree_add_item(tree, hf_q931_channel_interface_explicit, tvb, offset, 1, FALSE);
+ proto_tree_add_item(tree, hf_q931_channel_interface_type, tvb, offset, 1, FALSE);
+ proto_tree_add_item(tree, hf_q931_channel_exclusive, tvb, offset, 1, FALSE);
+ proto_tree_add_item(tree, hf_q931_channel_dchan, tvb, offset, 1, FALSE);
+
if (octet & Q931_NOT_BASIC_CHANNEL) {
- proto_tree_add_text(tree, tvb, offset, 1,
- "Channel selection: %s",
- val_to_str(octet & 0x03, q931_not_basic_channel_selection_vals,
- "Unknown (0x%X)"));
+ proto_tree_add_item(tree, hf_q931_channel_selection_pri, tvb, offset, 1, FALSE);
} else {
- proto_tree_add_text(tree, tvb, offset, 1,
- "Channel selection: %s",
- val_to_str(octet & 0x03, q931_basic_channel_selection_vals,
- "Unknown (0x%02X)"));
+ proto_tree_add_item(tree, hf_q931_channel_selection_bri, tvb, offset, 1, FALSE);
}
offset += 1;
len -= 1;
@@ -1458,6 +1474,7 @@
return;
octet = tvb_get_guint8(tvb, offset);
coding_standard = octet & 0x60;
+ proto_tree_add_item(tree, hf_q931_extension_ind, tvb, offset, 1, FALSE);
proto_tree_add_uint(tree, hf_q931_coding_standard, tvb, offset, 1, octet);
if (coding_standard != Q931_ITU_STANDARDIZED_CODING) {
/*
@@ -1470,14 +1487,9 @@
tvb_bytes_to_str(tvb, offset, len));
return;
}
- proto_tree_add_text(tree, tvb, offset, 1,
- "Channel is indicated by %s",
- (octet & Q931_IS_SLOT_MAP) ? "slot map" : "number");
- proto_tree_add_text(tree, tvb, offset, 1,
- "%s type: %s",
- (octet & Q931_IS_SLOT_MAP) ? "Map element" : "Channel",
- val_to_str(octet & 0x0F, q931_element_type_vals,
- "Unknown (0x%02X)"));
+ proto_tree_add_item(tree, hf_q931_channel_map, tvb, offset, 1, FALSE);
+ proto_tree_add_item(tree, hf_q931_channel_element_type, tvb, offset, 1, FALSE);
+
offset += 1;
len -= 1;
@@ -1496,8 +1508,10 @@
if (len == 0)
break;
octet = tvb_get_guint8(tvb, offset);
- proto_tree_add_text(tree, tvb, offset, 1,
- "Channel number: %u", octet & ~Q931_IE_VL_EXTENSION);
+
+ proto_tree_add_item(tree, hf_q931_extension_ind, tvb, offset, 1, FALSE);
+ proto_tree_add_item(tree,hf_q931_channel_number,tvb,offset,1,FALSE);
+
offset += 1;
len -= 1;
} while (!(octet & Q931_IE_VL_EXTENSION));
@@ -3176,6 +3190,48 @@
{ &hf_q931_redirecting_number,
{ "Redirecting party number digits", "q931.redirecting_number.digits", FT_STRING, BASE_NONE, NULL, 0x0,
"", HFILL }},
+
+ /* fields for channel identification IE */
+ /* 0x80 is the extension bit */
+
+ { &hf_q931_channel_interface_explicit,
+ { "Interface identifier present", "q931.channel.interface_id_present", FT_BOOLEAN, 8, NULL, 0x40,
+ "True if the interface identifier is explicit in the following octets", HFILL }},
+
+ { &hf_q931_channel_interface_type,
+ { "Interface type", "q931.channel.interface_type", FT_BOOLEAN, 8, &tfs_interface_type, 0x20,
+ "Identifies the ISDN interface type", HFILL }},
+
+ /* 0x10 is spare */
+
+ { &hf_q931_channel_exclusive,
+ { "Indicated channel is exclusive", "q931.channel.exclusive", FT_BOOLEAN, 8, &tfs_channel_exclusive, 0x08,
+ "True if only the indicated channel is acceptable", HFILL }},
+
+ { &hf_q931_channel_dchan,
+ { "D-channel indicator", "q931.channel.dchan", FT_BOOLEAN, 8, NULL, 0x04,
+ "True if the identified channel is the D-Channel", HFILL }},
+
+ { &hf_q931_channel_selection_bri,
+ { "Information channel selection", "q931.channel.selection", FT_UINT8, BASE_HEX, q931_basic_channel_selection_vals, 0x03,
+ "Identifies the information channel to be used", HFILL }},
+
+ { &hf_q931_channel_selection_pri,
+ { "Information channel selection", "q931.channel.selection", FT_UINT8, BASE_HEX, q931_not_basic_channel_selection_vals, 0x03,
+ "Identifies the information channel to be used", HFILL }},
+
+ { &hf_q931_channel_map,
+ { "Number/map", "q931.channel.map", FT_BOOLEAN, 8, &tfs_channel_map, 0x10,
+ "True if channel is indicates by channel map rather than number", HFILL }},
+
+ { &hf_q931_channel_element_type,
+ { "Element type", "q931.channel.element_type", FT_UINT8, BASE_HEX, q931_element_type_vals, 0xF,
+ "Type of element in the channel number/slot map octets", HFILL }},
+
+ { &hf_q931_channel_number,
+ { "Channel number", "q931.channel.number", FT_UINT8, BASE_DEC, NULL, 0x7F,
+ "Channel number", HFILL }},
+
/* desegmentation fields */
{ &hf_q931_segment_overlap,
{ "Segment overlap", "q931.segment.overlap", FT_BOOLEAN, BASE_NONE, NULL, 0x0,
_______________________________________________ Ethereal-dev mailing list Ethereal-dev@xxxxxxxxxxxx http://www.ethereal.com/mailman/listinfo/ethereal-dev
- Follow-Ups:
- SV: [Ethereal-dev] [PATCH] q.931 dissector improvements
- From: Anders Broman
- SV: [Ethereal-dev] [PATCH] q.931 dissector improvements
- Prev by Date: [Ethereal-dev] Creat workspace for VC
- Next by Date: RE: [Ethereal-dev] hai
- Previous by thread: [Ethereal-dev] Creat workspace for VC
- Next by thread: SV: [Ethereal-dev] [PATCH] q.931 dissector improvements
- Index(es):





