⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 plugins-wimax-msg_rep.c

📁 Intel的WIMAX代码,主要是mac层code
💻 C
📖 第 1 页 / 共 5 页
字号:
	{	/* 5.5 */
		&hf_rep_rsp_zone_spec_effective_cinr_rep_amc_aas,
		{
			"AMC AAS Zone", "wimax.rep_rsp.zone_spec_effective_cinr_report.amc_aas",
			FT_BYTES, BASE_HEX, NULL, 0x0, "", HFILL
		}
	},
	{	/* 5.3 */
		&hf_rep_rsp_zone_spec_effective_cinr_rep_fusc,
		{
			"FUSC Zone", "wimax.rep_rsp.zone_spec_effective_cinr_report.fusc",
			FT_BYTES, BASE_HEX, NULL, 0x0, "", HFILL
		}
	},
	{	/* 5.4 */
		&hf_rep_rsp_zone_spec_effective_cinr_rep_optional_fusc,
		{
			"Optional FUSC Zone", "wimax.rep_rsp.zone_spec_effective_cinr_report.optional_fusc",
			FT_BYTES, BASE_HEX, NULL, 0x0, "", HFILL
		}
	},
	{	/* 5.1 */
		&hf_rep_rsp_zone_spec_effective_cinr_rep_pusc_sc0,
		{
			"PUSC Zone (use all SC=0)", "wimax.rep_rsp.zone_spec_effective_cinr_report.pusc_sc0",
			FT_BYTES, BASE_HEX, NULL, 0x0, "", HFILL
		}
	},
	{	/* 5.2 */
		&hf_rep_rsp_zone_spec_effective_cinr_rep_pusc_sc1,
		{
			"PUSC Zone (use all SC=1)", "wimax.rep_rsp.zone_spec_effective_cinr_report.pusc_sc1",
			FT_BYTES, BASE_HEX, NULL, 0x0, "", HFILL
		}
	},
	{
		&hf_rep_rsp_zone_spec_phy_cinr_report,
		{
			"Zone-specific Physical CINR Report", "wimax.rep_rsp.zone_spec_phy_cinr_report",
			FT_BYTES, BASE_HEX, NULL, 0x0, "", HFILL
		}
	},
	{	/* 3.6 */
		&hf_rep_rsp_zone_spec_phy_cinr_rep_amc,
		{
			"AMC Zone", "wimax.rep_rsp.zone_spec_phy_cinr_report.amc",
			FT_BYTES, BASE_HEX, NULL, 0x0, "", HFILL
		}
	},
	{	/* 3.3 */
		&hf_rep_rsp_zone_spec_phy_cinr_rep_fusc,
		{
			"FUSC Zone", "wimax.rep_rsp.zone_spec_phy_cinr_report.fusc",
			FT_BYTES, BASE_HEX, NULL, 0x0, "", HFILL
		}
	},
	{	/* 3.4 */
		&hf_rep_rsp_zone_spec_phy_cinr_rep_optional_fusc,
		{
			"Optional FUSC Zone", "wimax.rep_rsp.zone_spec_phy_cinr_report.optional_fusc",
			FT_BYTES, BASE_HEX, NULL, 0x0, "", HFILL
		}
	},
	{	/* 3.1 */
		&hf_rep_rsp_zone_spec_phy_cinr_rep_pusc_sc0,
		{
			"PUSC Zone (use all SC=0)", "wimax.rep_rsp.zone_spec_phy_cinr_report.pusc_sc0",
			FT_BYTES, BASE_HEX, NULL, 0x0, "", HFILL
		}
	},
	{	/* 3.2 */
		&hf_rep_rsp_zone_spec_phy_cinr_rep_pusc_sc1,
		{
			"PUSC Zone (use all SC=1)", "wimax.rep_rsp.zone_spec_phy_cinr_report.pusc_sc1",
			FT_BYTES, BASE_HEX, NULL, 0x0, "", HFILL
		}
	},
	{	/* 3.5 */
		&hf_rep_rsp_zone_spec_phy_cinr_rep_safety_channel,
		{
			"Safety Channel", "wimax.rep_rsp.zone_spec_phy_cinr_report.safety_channel",
			FT_BYTES, BASE_HEX, NULL, 0x0, "", HFILL
		}
	},
	{
		&hf_rep_unknown_type,
		{
			"Unknown TLV type", "wimax.rep.unknown_tlv_type",
			FT_BYTES, BASE_HEX, NULL, 0x0, "", HFILL
		}
	}
};

/* Register Wimax Mac REP-REQ Messages Dissectors */
void proto_register_mac_mgmt_msg_rep(void)
{
	if (proto_mac_mgmt_msg_rep_decoder == -1)
	{
		proto_mac_mgmt_msg_rep_decoder = proto_register_protocol (
							"WiMax REP-REQ/RSP Messages", /* name */
							"WiMax REP-REQ/RSP (rep)", /* short name */
							"rep" /* abbrev */
							);

		proto_register_field_array(proto_mac_mgmt_msg_rep_decoder, hf_rep, array_length(hf_rep));
		proto_register_subtree_array(ett_rep, array_length(ett_rep));
	}
}

/* Wimax Mac REP-REQ Message Dissector */
void dissect_mac_mgmt_msg_rep_req_decoder(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
{
	guint offset = 0;
	guint tvb_len, payload_type;
	gint  tlv_type, tlv_len, tlv_value_offset, length, tlv_offset;
	proto_item *rep_item = NULL;
	proto_tree *rep_tree = NULL;
	proto_tree *tlv_tree = NULL;
	proto_tree *ti_tree = NULL;
	tlv_info_t tlv_info;

	/* Ensure the right payload type */
	payload_type = tvb_get_guint8(tvb, offset);
	if(payload_type != MAC_MGMT_MSG_REP_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 REP-REQ */
		rep_item = proto_tree_add_protocol_format(tree, proto_mac_mgmt_msg_rep_decoder, tvb, offset, tvb_len, "Report Request (REP-REQ) (%u bytes)", tvb_len);
		/* add MAC REP-REQ subtree */
		rep_tree = proto_item_add_subtree(rep_item, ett_mac_mgmt_msg_rep_req_decoder);
		/* Decode and display the Report Request message (REP-REQ) */
		/* display the Message Type */
		proto_tree_add_item(rep_tree, hf_rep_req_message_type, tvb, offset, 1, FALSE);
		/* set the offset for the TLV Encoded info */
		offset++;
		/* process the REP-REQ TLVs */
		while(offset < tvb_len)
		{	/* get the TLV information */
			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, "REP-REQ TLV error");
				}
				proto_tree_add_item(rep_tree, hf_rep_invalid_tlv, tvb, offset, (tvb_len - offset), FALSE);
				break;
			}
			/* get the TLV value offset */
			tlv_value_offset = get_tlv_value_offset(&tlv_info);
#ifdef DEBUG /* for debug only */
			proto_tree_add_protocol_format(rep_tree, proto_mac_mgmt_msg_rep_decoder, tvb, offset, (tlv_len + tlv_value_offset), "REP-REQ Type: %u (%u bytes, offset=%u, length=%u, tvb_len=%u)", tlv_type, (tlv_len + tlv_value_offset), offset, tlv_len, tvb_len);
#endif
			/* update the offset for the TLV value */
			offset += tlv_value_offset;
			/* process REP-REQ TLV Encoded information (11.11) */
			switch (tlv_type)
			{
				case REP_REQ_REPORT_REQUEST:
				/* process the REP-REQ report request TLVs */
				tlv_tree = add_tlv_subtree(&tlv_info, ett_mac_mgmt_msg_rep_req_decoder, rep_tree, hf_rep_req_report_request, tvb, offset, tlv_len, FALSE);
				for( tlv_offset = 0; tlv_offset < tlv_len;  )
				{	/* get the TLV information */
					init_tlv_info(&tlv_info, tvb, (offset + tlv_offset));
					/* get the TLV type */
					tlv_type = get_tlv_type(&tlv_info);
					/* get the TLV length */
					length = get_tlv_length(&tlv_info);
					if(tlv_type == -1 || length > MAX_TLV_LEN || length < 1)
					{	/* invalid tlv info */
						if(pinfo->cinfo)
						{
							col_append_sep_str(pinfo->cinfo, COL_INFO, NULL, "REP-REQ Report Request TLV error");
						}
						proto_tree_add_item(tlv_tree, hf_rep_invalid_tlv, tvb, (offset + tlv_offset), (tlv_len - offset - tlv_offset), FALSE);
						break;
					}
#ifdef DEBUG /* for debug only */
					proto_tree_add_protocol_format(rep_tree, proto_mac_mgmt_msg_rep_decoder, tvb, offset, (length + tlv_value_offset), "REP-REQ Report Request Type: %u (%u bytes, offset=%u, length=%u, tvb_len=%u)", tlv_type, (length + tlv_value_offset), offset, length, tvb_len);
#endif
					/* update the offset */
					tlv_offset += get_tlv_value_offset(&tlv_info);
					switch (tlv_type)
					{
						case REP_REQ_REPORT_TYPE:
						/* decode and display the Report type */
						ti_tree = add_tlv_subtree(&tlv_info, ett_mac_mgmt_msg_rep_req_decoder, tlv_tree, hf_rep_req_report_type, tvb, (offset + tlv_offset), length, FALSE);
						proto_tree_add_item(ti_tree, hf_rep_req_rep_type_bit0, tvb, (offset + tlv_offset), length, FALSE);
						proto_tree_add_item(ti_tree, hf_rep_req_rep_type_bit1, tvb, (offset + tlv_offset), length, FALSE);
						proto_tree_add_item(ti_tree, hf_rep_req_rep_type_bit2, tvb, (offset + tlv_offset), length, FALSE);
						proto_tree_add_item(ti_tree, hf_rep_req_rep_type_bit3_6, tvb, (offset + tlv_offset), length, FALSE);
//						proto_item_append_text(ti, " dB");
						proto_tree_add_item(ti_tree, hf_rep_req_rep_type_bit7, tvb, (offset + tlv_offset), length, FALSE);
						break;
						case REP_REQ_CHANNEL_NUMBER:
						/* decode and display the Channel Number */
						ti_tree = add_tlv_subtree(&tlv_info, ett_mac_mgmt_msg_rep_req_decoder, tlv_tree, hf_rep_req_channel_number, tvb, (offset + tlv_offset), length, FALSE);
						proto_tree_add_item(ti_tree, hf_rep_req_channel_number, tvb, (offset + tlv_offset), length, FALSE);
						break;
						case REP_REQ_CHANNEL_TYPE:
						/* decode and display the Channel Type */
						ti_tree = add_protocol_subtree(&tlv_info, ett_mac_mgmt_msg_rep_req_decoder, tlv_tree, proto_mac_mgmt_msg_rep_decoder, tvb, (offset + tlv_offset), length, "Channel Type (%u byte(s))", length);
						proto_tree_add_item(ti_tree, hf_rep_req_channel_type_request, tvb, (offset + tlv_offset), length, FALSE);
						proto_tree_add_item(ti_tree, hf_rep_req_channel_type_reserved, tvb, (offset + tlv_offset), length, FALSE);
						break;
						case REP_REQ_ZONE_SPEC_PHY_CINR_REQ:
						/* decode and display the zone specific physical cinr request */
						ti_tree = add_tlv_subtree(&tlv_info, ett_mac_mgmt_msg_rep_req_decoder, tlv_tree, hf_rep_req_zone_spec_phy_cinr_request, tvb, (offset + tlv_offset), length, FALSE);
						proto_tree_add_item(ti_tree, hf_rep_req_zone_spec_phy_cinr_req_bit0_2, tvb, (offset + tlv_offset), length, FALSE);
						proto_tree_add_item(ti_tree, hf_rep_req_zone_spec_phy_cinr_req_bit3, tvb, (offset + tlv_offset), length, FALSE);
						proto_tree_add_item(ti_tree, hf_rep_req_zone_spec_phy_cinr_req_bit4, tvb, (offset + tlv_offset), length, FALSE);
						proto_tree_add_item(ti_tree, hf_rep_req_zone_spec_phy_cinr_req_bit5_6, tvb, (offset + tlv_offset), length, FALSE);
						proto_tree_add_item(ti_tree, hf_rep_req_zone_spec_phy_cinr_req_bit7, tvb, (offset + tlv_offset), length, FALSE);
						proto_tree_add_item(ti_tree, hf_rep_req_zone_spec_phy_cinr_req_bit8_13, tvb, (offset + tlv_offset), length, FALSE);
						proto_tree_add_item(ti_tree, hf_rep_req_zone_spec_phy_cinr_req_bit14_17, tvb, (offset + tlv_offset), length, FALSE);
						proto_tree_add_item(ti_tree, hf_rep_req_zone_spec_phy_cinr_req_bit18, tvb, (offset + tlv_offset), length, FALSE);
						proto_tree_add_item(ti_tree, hf_rep_req_zone_spec_phy_cinr_req_bit19_23, tvb, (offset + tlv_offset), length, FALSE);
						break;
						case REP_REQ_PREAMBLE_PHY_CINR_REQ:
						/* decode and display the preamble phy cinr request */
						ti_tree = add_tlv_subtree(&tlv_info, ett_mac_mgmt_msg_rep_req_decoder, tlv_tree, hf_rep_req_preamble_phy_cinr_request, tvb, (offset + tlv_offset), length, FALSE);
						proto_tree_add_item(ti_tree, hf_rep_req_preamble_phy_cinr_req_bit0_1, tvb, (offset + tlv_offset), length, FALSE);
						proto_tree_add_item(ti_tree, hf_rep_req_preamble_phy_cinr_req_bit2_5, tvb, (offset + tlv_offset), length, FALSE);
						proto_tree_add_item(ti_tree, hf_rep_req_preamble_phy_cinr_req_bit6, tvb, (offset + tlv_offset), length, FALSE);
						proto_tree_add_item(ti_tree, hf_rep_req_preamble_phy_cinr_req_bit7, tvb, (offset + tlv_offset), length, FALSE);
						break;
						case REP_REQ_ZONE_SPEC_EFF_CINR_REQ:
						/* decode and display the zone specific effective cinr request */
						ti_tree = add_tlv_subtree(&tlv_info, ett_mac_mgmt_msg_rep_req_decoder, tlv_tree, hf_rep_req_zone_spec_effective_cinr_request, tvb, offset, tlv_len, FALSE);
						proto_tree_add_item(ti_tree, hf_rep_req_zone_spec_effective_cinr_req_bit0_2, tvb, (offset + tlv_offset), length, FALSE);
						proto_tree_add_item(ti_tree, hf_rep_req_zone_spec_effective_cinr_req_bit3, tvb, (offset + tlv_offset), length, FALSE);
						proto_tree_add_item(ti_tree, hf_rep_req_zone_spec_effective_cinr_req_bit4, tvb, (offset + tlv_offset), length, FALSE);
						proto_tree_add_item(ti_tree, hf_rep_req_zone_spec_effective_cinr_req_bit5_6, tvb, (offset + tlv_offset), length, FALSE);
	//					proto_item_append_text(ti, " dB");
						proto_tree_add_item(ti_tree, hf_rep_req_zone_spec_effective_cinr_req_bit7, tvb, (offset + tlv_offset), length, FALSE);
						proto_tree_add_item(ti_tree, hf_rep_req_zone_spec_effective_cinr_req_bit8_13, tvb, (offset + tlv_offset), length, FALSE);
						proto_tree_add_item(ti_tree, hf_rep_req_zone_spec_effective_cinr_req_bit14_15, tvb, (offset + tlv_offset), length, FALSE);
						break;
						case REP_REQ_PREAMBLE_EFF_CINR_REQ:
						/* decode and display the preamble effective cinr request */
						ti_tree = add_tlv_subtree(&tlv_info, ett_mac_mgmt_msg_rep_req_decoder, tlv_tree, hf_rep_req_preamble_effective_cinr_request, tvb, offset, tlv_len, FALSE);
						proto_tree_add_item(ti_tree, hf_rep_req_preamble_effective_cinr_req_bit0_1, tvb, (offset + tlv_offset), length, FALSE);
						proto_tree_add_item(ti_tree, hf_rep_req_preamble_effective_cinr_req_bit2_7, tvb, (offset + tlv_offset), length, FALSE);
						break;
						case REP_REQ_CHANNEL_SELECTIVITY_REPORT:
						/* decode and display the channel selectivity report */
						ti_tree = add_tlv_subtree(&tlv_info, ett_mac_mgmt_msg_rep_req_decoder, tlv_tree, hf_rep_req_channel_selectivity_report, tvb, (offset + tlv_offset), length, FALSE);
						proto_tree_add_item(ti_tree, hf_rep_req_channel_selectivity_rep_bit0, tvb, (offset + tlv_offset), length, FALSE);
						proto_tree_add_item(ti_tree, hf_rep_req_channel_selectivity_rep_bit1_7, tvb, (offset + tlv_offset), length, FALSE);
						break;
						default:
						/* display the unknown tlv in hex */
						ti_tree = add_tlv_subtree(&tlv_info, ett_mac_mgmt_msg_rep_req_decoder, tlv_tree, hf_rep_unknown_type, tvb, (offset + tlv_offset), length, FALSE);
						proto_tree_add_item(ti_tree, hf_rep_unknown_type, tvb, (offset + tlv_offset), length, FALSE);
						break;
					}
					tlv_offset += length;
				}	/* end of TLV process for loop */
				break;
				default:
				/* display the unknown tlv in hex */
				tlv_tree = add_tlv_subtree(&tlv_info, ett_mac_mgmt_msg_rep_req_decoder, rep_tree, hf_rep_unknown_type, tvb, offset, tlv_len, FALSE);
				proto_tree_add_item(tlv_tree, hf_rep_unknown_type, tvb, offset, tlv_len, FALSE);
				break;
			}
			offset += tlv_len;
		}	/* end of TLV process while loop */
	}
}

/* Wimax Mac REP-RSP Message Dissector */
void dissect_mac_mgmt_msg_rep_rsp_decoder(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
{
	guint offset = 0;
	guint tvb_len, payload_type, length, value;
	gint  tlv_type, tlv_len, tlv_value_offset, tlv_offset;
	gint  db_val;
	proto_item *rep_item = NULL;
	proto_tree *rep_tree = NULL;
	proto_tree *tlv_tree = NULL;
	proto_item *ti = NULL;
	proto_tree *ti_tree = NULL;
	tlv_info_t tlv_info;
	gfloat current_power;

	/* Ensure the right payload type */
	payload_type = tvb_get_guint8(tvb, offset);
	if(payload_type != MAC_MGMT_MSG_REP_RSP)
	{
		return;
	}

	if(tree)
	{	/* we are being asked for details */
		/* Get the tvb reported length */
		tvb_len =  tvb_reported_length(tvb);
		/* display MAC payload type REP-RSP */
		rep_item = proto_tree_add_protocol_format(tree, proto_mac_mgmt_msg_rep_decoder, tvb, offset, tvb_len, "Report Response (REP-RSP) (%u bytes)", tvb_len);
		/* add MAC REP-RSP subtree */
		rep_tree = proto_item_add_subtree(rep_item, ett_mac_mgmt_msg_rep_rsp_decoder);
		/* Decode and display the Report Response message (REP-RSP) */
		/* display the Message Type */
		proto_tree_add_item(rep_tree, hf_rep_rsp_message_type, tvb, offset, 1, FALSE);
		/* set the offset for the TLV Encoded info */
		offset++;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -