📄 plugins-wimax-msg_dreg.c
字号:
&hf_dreg_retain_ms_service_tod,
{
"Retain MS service and operational information associated with Time of Day", "wimax.dreg.retain_ms_service_tod",
FT_UINT8, BASE_DEC, NULL, 0x10, "", HFILL
}
},
{
&hf_dreg_cmd_message_type,
{
"MAC Management Message Type", "wimax.macmgtmsgtype.dreg_cmd",
FT_UINT8, BASE_DEC, NULL, 0x0, "", HFILL
}
},
{
&hf_dreg_cmd_action,
{
"DREG-CMD Action code", "wimax.dreg_cmd.action",
FT_UINT8, BASE_DEC, VALS(vals_dreg_cmd_action), 0x07, "", HFILL
}
},
{
&hf_dreg_cmd_action_cor2,
{
"DREG-CMD Action code", "wimax.dreg_cmd.action",
FT_UINT8, BASE_DEC, VALS(vals_dreg_cmd_action_cor2), 0x07, "", HFILL
}
},
{
&hf_dreg_cmd_reserved,
{
"Reserved", "wimax.dreg_cmd.action_reserved",
FT_UINT8, BASE_DEC, NULL, 0xF8, "", HFILL
}
},
{
&hf_dreg_req_message_type,
{
"MAC Management Message Type", "wimax.macmgtmsgtype.dreg_req",
FT_UINT8, BASE_DEC, NULL, 0x0, "", HFILL
}
},
{
&hf_dreg_req_action,
{
"DREG-REQ Action code", "wimax.dreg_req.action",
FT_UINT8, BASE_DEC, VALS(vals_dreg_req_code), 0x03, "", HFILL
}
},
{
&hf_dreg_req_reserved,
{
"Reserved", "wimax.dreg_req.action_reserved",
FT_UINT8, BASE_DEC, NULL, 0xFC, "", HFILL
}
},
{
&hf_tlv_value,
{
"Value", "wimax.dreg.unknown_tlv_value",
FT_BYTES, BASE_NONE, NULL, 0x00, "", HFILL
}
},
{
&hf_ack_type_reserved,
{
"Reserved", "wimax.ack_type_reserved",
FT_UINT8, BASE_DEC, NULL, 0x03, "", HFILL
}
}
};
/* Decode sub-TLV's of either DREG-REQ or DREG-CMD. */
static void dissect_dreg_tlv(proto_tree *dreg_tree, gint tlv_type, tvbuff_t *tvb, guint tlv_offset, guint tlv_len)
{
guint tvb_len;
/*guint tlv_len;*/
/* Get the tvb reported length */
tvb_len = tvb_reported_length(tvb);
switch (tlv_type) {
case DREG_PAGING_INFO:
proto_tree_add_item(dreg_tree, hf_dreg_paging_cycle, tvb, tlv_offset, 2, FALSE);
proto_tree_add_item(dreg_tree, hf_dreg_paging_offset, tvb, tlv_offset + 2, 1, FALSE);
proto_tree_add_item(dreg_tree, hf_dreg_paging_group_id, tvb, tlv_offset + 3, 2, FALSE);
break;
case DREG_REQ_DURATION:
proto_tree_add_item(dreg_tree, hf_dreg_req_duration, tvb, tlv_offset, 1, FALSE);
break;
case DREG_PAGING_CONTROLLER_ID:
proto_tree_add_item(dreg_tree, hf_paging_controller_id, tvb, tlv_offset, 6, FALSE);
break;
case DREG_IDLE_MODE_RETAIN_INFO:
proto_tree_add_item(dreg_tree, hf_dreg_retain_ms_service_sbc, tvb, tlv_offset, 1, FALSE);
proto_tree_add_item(dreg_tree, hf_dreg_retain_ms_service_pkm, tvb, tlv_offset, 1, FALSE);
proto_tree_add_item(dreg_tree, hf_dreg_retain_ms_service_reg, tvb, tlv_offset, 1, FALSE);
proto_tree_add_item(dreg_tree, hf_dreg_retain_ms_service_network_address, tvb, tlv_offset, 1, FALSE);
proto_tree_add_item(dreg_tree, hf_dreg_retain_ms_service_tod, tvb, tlv_offset, 1, FALSE);
proto_tree_add_item(dreg_tree, hf_dreg_retain_ms_service_tftp, tvb, tlv_offset, 1, FALSE);
proto_tree_add_item(dreg_tree, hf_dreg_retain_ms_service_full_service, tvb, tlv_offset, 1, FALSE);
proto_tree_add_item(dreg_tree, hf_dreg_consider_paging_pref, tvb, tlv_offset, 1, FALSE);
break;
case DREG_MAC_HASH_SKIP_THRESHOLD:
proto_tree_add_item(dreg_tree, hf_mac_hash_skip_threshold, tvb, tlv_offset, 2, FALSE);
break;
case DREG_PAGING_CYCLE_REQUEST:
proto_tree_add_item(dreg_tree, hf_dreg_paging_cycle_request, tvb, tlv_offset, 2, FALSE);
break;
default:
proto_tree_add_item(dreg_tree, hf_tlv_value, tvb, tlv_offset, tlv_len, FALSE);
break;
}
}
/* Register Wimax Mac Payload Protocol and Dissector */
void proto_register_mac_mgmt_msg_dreg_req(void)
{
if (proto_mac_mgmt_msg_dreg_req_decoder == -1) {
proto_mac_mgmt_msg_dreg_req_decoder = proto_register_protocol (
"WiMax DREG-REQ/CMD Messages", /* name */
"WiMax DREG-REQ/CMD (dreg)", /* short name */
"dreg" /* abbrev */
);
proto_register_field_array(proto_mac_mgmt_msg_dreg_req_decoder, hf, array_length(hf));
proto_register_subtree_array(ett, array_length(ett));
}
}
/* Register Wimax Mac Payload Protocol and Dissector */
void proto_register_mac_mgmt_msg_dreg_cmd(void)
{
if (proto_mac_mgmt_msg_dreg_cmd_decoder == -1) {
proto_mac_mgmt_msg_dreg_cmd_decoder = proto_mac_mgmt_msg_dreg_req_decoder;
proto_register_subtree_array(ett, array_length(ett));
}
}
/* Decode DREG-REQ messages. */
void dissect_mac_mgmt_msg_dreg_req_decoder(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
{
guint offset = 0;
guint tlv_offset;
guint tvb_len, payload_type;
proto_item *dreg_req_item = NULL;
proto_tree *dreg_req_tree = NULL;
proto_tree *tlv_tree = NULL;
tlv_info_t tlv_info;
gint tlv_type;
gint tlv_len;
gboolean hmac_found = FALSE;
/* Ensure the right payload type */
payload_type = tvb_get_guint8(tvb, 0);
if(payload_type != MAC_MGMT_MSG_DREG_REQ)
{
return;
}
if (tree)
{ /* we are being asked for details */
/* Get the tvb reported length */
tvb_len = tvb_reported_length(tvb);
/* display MAC payload type DREG-REQ */
dreg_req_item = proto_tree_add_protocol_format(tree, proto_mac_mgmt_msg_dreg_req_decoder, tvb, 0, tvb_len, "MAC Management Message, DREG-REQ (49)");
/* add MAC DREG REQ subtree */
dreg_req_tree = proto_item_add_subtree(dreg_req_item, ett_mac_mgmt_msg_dreg_decoder);
/* display the Message Type */
proto_tree_add_item(dreg_req_tree, hf_dreg_req_message_type, tvb, offset, 1, FALSE);
offset++;
/* display the Action Code */
proto_tree_add_item(dreg_req_tree, hf_dreg_req_action, tvb, offset, 1, FALSE);
/* show the Reserved bits */
proto_tree_add_item(dreg_req_tree, hf_dreg_req_reserved, tvb, offset, 1, FALSE);
offset++;
while(offset < tvb_len)
{
/* Get the TLV data. */
init_tlv_info(&tlv_info, tvb, offset);
/* get the TLV type */
tlv_type = get_tlv_type(&tlv_info);
/* get the TLV length */
tlv_len = get_tlv_length(&tlv_info);
if(tlv_type == -1 || tlv_len > MAX_TLV_LEN || tlv_len < 1)
{ /* invalid tlv info */
if (pinfo->cinfo)
{
col_append_sep_str(pinfo->cinfo, COL_INFO, NULL, "DREG-REQ TLV error");
}
proto_tree_add_item(dreg_req_tree, hf_dreg_invalid_tlv, tvb, offset, (tvb_len - offset), FALSE);
break;
}
/* get the offset to the TLV data */
tlv_offset = offset + get_tlv_value_offset(&tlv_info);
switch (tlv_type) {
case HMAC_TUPLE: /* Table 348d */
/* decode and display the HMAC Tuple */
tlv_tree = add_protocol_subtree(&tlv_info, ett_mac_mgmt_msg_dreg_decoder, dreg_req_tree, proto_mac_mgmt_msg_dreg_req_decoder, tvb, tlv_offset, tlv_len, "HMAC Tuple (%u byte(s))", tlv_len);
wimax_hmac_tuple_decoder(tlv_tree, tvb, tlv_offset, tlv_len);
hmac_found = TRUE;
break;
case CMAC_TUPLE: /* Table 348b */
/* decode and display the CMAC Tuple */
tlv_tree = add_protocol_subtree(&tlv_info, ett_mac_mgmt_msg_dreg_decoder, dreg_req_tree, proto_mac_mgmt_msg_dreg_req_decoder, tvb, tlv_offset, tlv_len, "CMAC Tuple (%u byte(s))", tlv_len);
wimax_cmac_tuple_decoder(tlv_tree, tvb, tlv_offset, tlv_len);
break;
default:
/* Decode DREG-REQ sub-TLV's */
tlv_tree = add_protocol_subtree(&tlv_info, ett_mac_mgmt_msg_dreg_decoder, dreg_req_tree, proto_mac_mgmt_msg_dreg_req_decoder, tvb, tlv_offset, tlv_len, "DREG-REQ sub-TLV's (%u byte(s))", tlv_len);
dissect_dreg_tlv(tlv_tree, tlv_type, tvb, tlv_offset, tlv_len);
break;
}
offset = tlv_len + tlv_offset;
} /* end of TLV process while loop */
if (!hmac_found)
proto_item_append_text(dreg_req_tree, " (HMAC Tuple is missing !)");
}
}
/* Decode DREG-CMD messages. */
void dissect_mac_mgmt_msg_dreg_cmd_decoder(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
{
guint offset = 0;
guint tlv_offset;
guint tvb_len, payload_type;
proto_item *dreg_cmd_item = NULL;
proto_tree *dreg_cmd_tree = NULL;
proto_tree *tlv_tree = NULL;
tlv_info_t tlv_info;
gint tlv_type;
gint tlv_len;
gboolean hmac_found = FALSE;
/* Ensure the right payload type */
payload_type = tvb_get_guint8(tvb, 0);
if(payload_type != MAC_MGMT_MSG_DREG_CMD)
{
return;
}
if (tree)
{ /* we are being asked for details */
/* Get the tvb reported length */
tvb_len = tvb_reported_length(tvb);
/* display MAC payload type DREG-CMD */
dreg_cmd_item = proto_tree_add_protocol_format(tree, proto_mac_mgmt_msg_dreg_cmd_decoder, tvb, 0, tvb_len, "MAC Management Message, DREG-CMD (29)");
/* add MAC DREG CMD subtree */
dreg_cmd_tree = proto_item_add_subtree(dreg_cmd_item, ett_mac_mgmt_msg_dreg_decoder);
/* display the Message Type */
proto_tree_add_item(dreg_cmd_tree, hf_dreg_cmd_message_type, tvb, offset, 1, FALSE);
offset ++;
/* display the Action Code */
if (include_cor2_changes)
proto_tree_add_item(dreg_cmd_tree, hf_dreg_cmd_action_cor2, tvb, offset, 1, FALSE);
else
proto_tree_add_item(dreg_cmd_tree, hf_dreg_cmd_action, tvb, offset, 1, FALSE);
/* show the Reserved bits */
proto_tree_add_item(dreg_cmd_tree, hf_dreg_cmd_reserved, tvb, offset, 1, FALSE);
offset ++;
while(offset < tvb_len)
{
/* Get the TLV data. */
init_tlv_info(&tlv_info, tvb, offset);
/* get the TLV type */
tlv_type = get_tlv_type(&tlv_info);
/* get the TLV length */
tlv_len = get_tlv_length(&tlv_info);
if(tlv_type == -1 || tlv_len > MAX_TLV_LEN || tlv_len < 1)
{ /* invalid tlv info */
if (pinfo->cinfo)
{
col_append_sep_str(pinfo->cinfo, COL_INFO, NULL, "DREG-CMD TLV error");
}
proto_tree_add_item(dreg_cmd_tree, hf_dreg_invalid_tlv, tvb, offset, (tvb_len - offset), FALSE);
break;
}
/* get the offset to the TLV data */
tlv_offset = offset + get_tlv_value_offset(&tlv_info);
switch (tlv_type) {
case HMAC_TUPLE: /* Table 348d */
/* decode and display the HMAC Tuple */
tlv_tree = add_protocol_subtree(&tlv_info, ett_mac_mgmt_msg_dreg_decoder, dreg_cmd_tree, proto_mac_mgmt_msg_dreg_cmd_decoder, tvb, tlv_offset, tlv_len, "HMAC Tuple (%u byte(s))", tlv_len);
wimax_hmac_tuple_decoder(tlv_tree, tvb, tlv_offset, tlv_len);
hmac_found = TRUE;
break;
case CMAC_TUPLE: /* Table 348b */
/* decode and display the CMAC Tuple */
tlv_tree = add_protocol_subtree(&tlv_info, ett_mac_mgmt_msg_dreg_decoder, dreg_cmd_tree, proto_mac_mgmt_msg_dreg_cmd_decoder, tvb, tlv_offset, tlv_len, "CMAC Tuple (%u byte(s))", tlv_len);
wimax_cmac_tuple_decoder(tlv_tree, tvb, tlv_offset, tlv_len);
break;
default:
/* Decode DREG-CMD sub-TLV's */
tlv_tree = add_protocol_subtree(&tlv_info, ett_mac_mgmt_msg_dreg_decoder, dreg_cmd_tree, proto_mac_mgmt_msg_dreg_cmd_decoder, tvb, tlv_offset, tlv_len, "DREG-CMD sub-TLV's (%u byte(s))", tlv_len);
dissect_dreg_tlv(tlv_tree, tlv_type, tvb, tlv_offset, tlv_len);
break;
}
offset = tlv_len + tlv_offset;
} /* end of TLV process while loop */
if (!hmac_found)
proto_item_append_text(dreg_cmd_tree, " (HMAC Tuple is missing !)");
}
}
取自
http://anonsvn.wireshark.org/wireshark/trunk 的 plugins/wimax/msg_dreg.c -
LGPL - C
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -