aboutsummaryrefslogtreecommitdiffstats
path: root/plugins/wimax/msg_dsc.c
diff options
context:
space:
mode:
authorMichael Mann <mmann78@netscape.net>2013-09-24 18:45:39 +0000
committerMichael Mann <mmann78@netscape.net>2013-09-24 18:45:39 +0000
commit1ac3997acb378af43aa4397df807b320ce56b134 (patch)
treea2ad59ae862f5cca90370d7c580535c1a430fcc4 /plugins/wimax/msg_dsc.c
parent019e64f58d78f88846021cd15ae5af2bab853442 (diff)
Wimax dissector improvements:
1. Remove message type field from all MAC Management "sub"dissectors and place it in Mac Management subdissector itself. This may cause backwards-compatibility issues (malformed packets) with third-party subdissectors of the MAC Management dissector, but it didn't make sense to have so many filters for a single enumerated value, especially when the various "protocol" filters covers many of them. 2. Removed some if(tree) checks as column info and calling other dissectors are sometimes executed underneath. Some of this is in preparation for addressing bug 5349. 3. Make all dissector functions (and a few others) static, and use register_dissector() when necessary. 4. Convert generic decoder CRC errors into expert info, rather than have it be a "protocol" filter (it just looks funny that way) In general, these dissectors seem "over-protocolized". I understand the need for all of the dissectors, but I don't know if they all need "protocol" status. svn path=/trunk/; revision=52203
Diffstat (limited to 'plugins/wimax/msg_dsc.c')
-rw-r--r--plugins/wimax/msg_dsc.c107
1 files changed, 20 insertions, 87 deletions
diff --git a/plugins/wimax/msg_dsc.c b/plugins/wimax/msg_dsc.c
index 8b5029af4b..7b9d492787 100644
--- a/plugins/wimax/msg_dsc.c
+++ b/plugins/wimax/msg_dsc.c
@@ -45,82 +45,47 @@ static gint ett_mac_mgmt_msg_dsc_req_decoder = -1;
static gint ett_mac_mgmt_msg_dsc_rsp_decoder = -1;
static gint ett_mac_mgmt_msg_dsc_ack_decoder = -1;
-static const value_string vals_dsc_msgs[] = {
- { MAC_MGMT_MSG_DSC_REQ, "Dynamic Service Change Request (DSC-REQ)" },
- { MAC_MGMT_MSG_DSC_RSP, "Dynamic Service Change Response (DSC-RSP)" },
- { MAC_MGMT_MSG_DSC_ACK, "Dynamic Service Change Acknowledge (DSC-ACK)" },
- { 0, NULL }
-};
-
/* fix fields */
-static gint hf_dsc_req_message_type = -1;
static gint hf_dsc_transaction_id = -1;
-static gint hf_dsc_rsp_message_type = -1;
static gint hf_dsc_confirmation_code = -1;
-static gint hf_dsc_ack_message_type = -1;
-void dissect_mac_mgmt_msg_dsc_req_decoder(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
+static void dissect_mac_mgmt_msg_dsc_req_decoder(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
{
guint offset = 0;
- guint tvb_len, payload_type;
- proto_item *dsc_item = NULL;
- proto_tree *dsc_tree = NULL;
+ proto_item *dsc_item;
+ proto_tree *dsc_tree;
- if(tree)
{ /* we are being asked for details */
- /* get the message type */
- payload_type = tvb_get_guint8(tvb, offset);
- /* ensure the message type is DSC REQ/RSP/ACK */
- if(payload_type != MAC_MGMT_MSG_DSC_REQ)
- return;
- /* Get the tvb reported length */
- tvb_len = tvb_reported_length(tvb);
+
/* display MAC message type */
- dsc_item = proto_tree_add_protocol_format(tree, proto_mac_mgmt_msg_dsc_decoder, tvb, offset, tvb_len,
- "%s (%u bytes)", val_to_str(payload_type, vals_dsc_msgs, "Unknown"), tvb_len);
+ dsc_item = proto_tree_add_protocol_format(tree, proto_mac_mgmt_msg_dsc_decoder, tvb, offset, -1,
+ "Dynamic Service Change Request (DSC-REQ)");
/* add MAC DSx subtree */
dsc_tree = proto_item_add_subtree(dsc_item, ett_mac_mgmt_msg_dsc_req_decoder);
/* Decode and display the Uplink Channel Descriptor (UCD) */
- /* display the Message Type */
- proto_tree_add_item(dsc_tree, hf_dsc_req_message_type, tvb, offset, 1, ENC_BIG_ENDIAN);
- /* move to next field */
- offset++;
/* display the Transaction ID */
proto_tree_add_item(dsc_tree, hf_dsc_transaction_id, tvb, offset, 2, ENC_BIG_ENDIAN);
/* move to next field */
offset += 2;
/* process DSC REQ message TLV Encode Information */
- wimax_common_tlv_encoding_decoder(tvb_new_subset(tvb, offset, (tvb_len - offset), (tvb_len - offset)), pinfo, dsc_tree);
+ wimax_common_tlv_encoding_decoder(tvb_new_subset_remaining(tvb, offset), pinfo, dsc_tree);
}
}
-void dissect_mac_mgmt_msg_dsc_rsp_decoder(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
+static void dissect_mac_mgmt_msg_dsc_rsp_decoder(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
{
guint offset = 0;
- guint tvb_len, payload_type;
- proto_item *dsc_item = NULL;
- proto_tree *dsc_tree = NULL;
+ proto_item *dsc_item;
+ proto_tree *dsc_tree;
- if(tree)
{ /* we are being asked for details */
- /* get the message type */
- payload_type = tvb_get_guint8(tvb, offset);
- /* ensure the message type is DSC REQ/RSP/ACK */
- if(payload_type != MAC_MGMT_MSG_DSC_RSP)
- return;
- /* Get the tvb reported length */
- tvb_len = tvb_reported_length(tvb);
/* display MAC message type */
- dsc_item = proto_tree_add_protocol_format(tree, proto_mac_mgmt_msg_dsc_decoder, tvb, offset, tvb_len,
- "%s (%u bytes)", val_to_str(payload_type, vals_dsc_msgs, "Unknown"), tvb_len);
+ dsc_item = proto_tree_add_protocol_format(tree, proto_mac_mgmt_msg_dsc_decoder, tvb, offset, -1,
+ "Dynamic Service Change Response (DSC-RSP)");
/* add MAC DSx subtree */
dsc_tree = proto_item_add_subtree(dsc_item, ett_mac_mgmt_msg_dsc_rsp_decoder);
/* Decode and display the Uplink Channel Descriptor (UCD) */
- /* display the Message Type */
- proto_tree_add_item(dsc_tree, hf_dsc_rsp_message_type, tvb, offset, 1, ENC_BIG_ENDIAN);
- /* move to next field */
- offset++;
/* display the Transaction ID */
proto_tree_add_item(dsc_tree, hf_dsc_transaction_id, tvb, offset, 2, ENC_BIG_ENDIAN);
/* move to next field */
@@ -130,36 +95,23 @@ void dissect_mac_mgmt_msg_dsc_rsp_decoder(tvbuff_t *tvb, packet_info *pinfo, pro
/* move to next field */
offset++;
/* process DSC RSP message TLV Encode Information */
- wimax_common_tlv_encoding_decoder(tvb_new_subset(tvb, offset, (tvb_len - offset), (tvb_len - offset)), pinfo, dsc_tree);
+ wimax_common_tlv_encoding_decoder(tvb_new_subset_remaining(tvb, offset), pinfo, dsc_tree);
}
}
void dissect_mac_mgmt_msg_dsc_ack_decoder(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
{
guint offset = 0;
- guint tvb_len, payload_type;
- proto_item *dsc_item = NULL;
- proto_tree *dsc_tree = NULL;
+ proto_item *dsc_item;
+ proto_tree *dsc_tree;
- if(tree)
{ /* we are being asked for details */
- /* get the message type */
- payload_type = tvb_get_guint8(tvb, offset);
- /* ensure the message type is DSC REQ/RSP/ACK */
- if((payload_type < MAC_MGMT_MSG_DSC_REQ) || (payload_type > MAC_MGMT_MSG_DSC_ACK))
- return;
- /* Get the tvb reported length */
- tvb_len = tvb_reported_length(tvb);
/* display MAC message type */
- dsc_item = proto_tree_add_protocol_format(tree, proto_mac_mgmt_msg_dsc_decoder, tvb, offset, tvb_len,
- "%s (%u bytes)", val_to_str(payload_type, vals_dsc_msgs, "Unknown"), tvb_len);
+ dsc_item = proto_tree_add_protocol_format(tree, proto_mac_mgmt_msg_dsc_decoder, tvb, offset, -1,
+ "Dynamic Service Change Acknowledge (DSC-ACK)");
/* add MAC DSx subtree */
dsc_tree = proto_item_add_subtree(dsc_item, ett_mac_mgmt_msg_dsc_ack_decoder);
/* Decode and display the Uplink Channel Descriptor (UCD) */
- /* display the Message Type */
- proto_tree_add_item(dsc_tree, hf_dsc_ack_message_type, tvb, offset, 1, ENC_BIG_ENDIAN);
- /* move to next field */
- offset++;
/* display the Transaction ID */
proto_tree_add_item(dsc_tree, hf_dsc_transaction_id, tvb, offset, 2, ENC_BIG_ENDIAN);
/* move to next field */
@@ -169,7 +121,7 @@ void dissect_mac_mgmt_msg_dsc_ack_decoder(tvbuff_t *tvb, packet_info *pinfo, pro
/* move to next field */
offset++;
/* process DSC ACK message TLV Encode Information */
- wimax_common_tlv_encoding_decoder(tvb_new_subset(tvb, offset, (tvb_len - offset), (tvb_len - offset)), pinfo, dsc_tree);
+ wimax_common_tlv_encoding_decoder(tvb_new_subset_remaining(tvb, offset), pinfo, dsc_tree);
}
}
@@ -180,27 +132,6 @@ void proto_register_mac_mgmt_msg_dsc(void)
static hf_register_info hf[] =
{
{
- &hf_dsc_ack_message_type,
- {
- "MAC Management Message Type", "wmx.macmgtmsgtype.dsc_ack",
- FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL
- }
- },
- {
- &hf_dsc_req_message_type,
- {
- "MAC Management Message Type", "wmx.macmgtmsgtype.dsc_req",
- FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL
- }
- },
- {
- &hf_dsc_rsp_message_type,
- {
- "MAC Management Message Type", "wmx.macmgtmsgtype.dsc_rsp",
- FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL
- }
- },
- {
&hf_dsc_confirmation_code,
{
"Confirmation code", "wmx.dsc.confirmation_code",
@@ -232,6 +163,8 @@ void proto_register_mac_mgmt_msg_dsc(void)
proto_register_field_array(proto_mac_mgmt_msg_dsc_decoder, hf, array_length(hf));
proto_register_subtree_array(ett, array_length(ett));
+
+ register_dissector("mac_mgmt_msg_dsc_rsp_handler", dissect_mac_mgmt_msg_dsc_rsp_decoder, -1);
}
void