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

📄 plugins-wimax-wimax_compact_ulmap_ie_decoder.c

📁 Intel的WIMAX代码,主要是mac层code
💻 C
📖 第 1 页 / 共 5 页
字号:
				if(nibble_offset & 1)
				{
					proto_tree_add_item(tree, hf_culmap_num_subchannels_1, tvb, ul_map_offset, 2, FALSE);
				}
				else
				{
					proto_tree_add_item(tree, hf_culmap_num_subchannels, tvb, ul_map_offset, 1, FALSE);
				}
				ul_map_offset++;
				length += 2;
			}
			else if(allocation_mode == 1)
			{
				for(i=0; i<band_count; i++)
				{
					if(nibble_offset & 1)
					{
						proto_tree_add_item(tree, hf_culmap_num_subchannels_1, tvb, ul_map_offset, 2, FALSE);
					}
					else
					{
						proto_tree_add_item(tree, hf_culmap_num_subchannels, tvb, ul_map_offset, 1, FALSE);
					}
					ul_map_offset++;
				}
				length += (band_count * 2);
			}
			/* decode HARQ Control IE */
			nibble_length = wimax_compact_ulmap_harq_control_ie_decoder(tree, pinfo, tvb, ul_map_offset, nibble_offset);
			length += nibble_length;
		break;
		case COMPACT_UL_MAP_TYPE_SAFETY:/* 6.3.2.3.43.7.3 */
			/* display the UL-MAP type and reserved bit */
			if(nibble_offset & 1)
			{
				proto_tree_add_item(tree, hf_culmap_ul_map_type_1, tvb, ul_map_offset, 1, FALSE);
				/* display the reserved */
				proto_tree_add_item(tree, hf_culmap_reserved_1, tvb, ul_map_offset, 1, FALSE);
				/* move to next byte */
				ul_map_offset++;
				nibble_offset = 0;
			}
			else
			{
				proto_tree_add_item(tree, hf_culmap_ul_map_type, tvb, ul_map_offset, 1, FALSE);
				/* display the reserved */
				proto_tree_add_item(tree, hf_culmap_reserved, tvb, ul_map_offset, 1, FALSE);
				nibble_offset = 1;
			}
			length = 1;
			/* decode RCID IE */
			nibble_length = wimax_compact_ulmap_rcid_ie_decoder(tree, pinfo, tvb, ul_map_offset, nibble_offset);
			length += nibble_length;
			ul_map_offset += (nibble_length >> 1);
			nibble_offset = (nibble_length & 1);
			/* check harq mode */
			if(!harq_mode)
			{	/* display the Nep and Nsch Code */
				if(nibble_offset & 1)
				{
					proto_tree_add_item(tree, hf_culmap_nep_code_1, tvb, ul_map_offset, 1, FALSE);
					/* move to next byte */
					ul_map_offset++;
					proto_tree_add_item(tree, hf_culmap_nsch_code, tvb, ul_map_offset, 1, FALSE);
				}
				else
				{
					proto_tree_add_item(tree, hf_culmap_nep_code, tvb, ul_map_offset, 1, FALSE);
					proto_tree_add_item(tree, hf_culmap_nsch_code_1, tvb, ul_map_offset, 1, FALSE);
					/* move to next byte */
					ul_map_offset++;
				}
				length += 2;
			}
			else if(harq_mode == 1)
			{	/* display the Shortened UIUC and Companded SC */
				if(nibble_offset & 1)
				{
					proto_tree_add_item(tree, hf_culmap_shortened_uiuc_1, tvb, ul_map_offset, 2, FALSE);
					proto_tree_add_item(tree, hf_culmap_companded_sc_1, tvb, ul_map_offset, 2, FALSE);
				}
				else
				{
					proto_tree_add_item(tree, hf_culmap_shortened_uiuc, tvb, ul_map_offset, 1, FALSE);
					proto_tree_add_item(tree, hf_culmap_companded_sc, tvb, ul_map_offset, 1, FALSE);
				}
				/* move to next byte */
				ul_map_offset++;
				length += 2;
			}
			/* display BIN offset */
			if(nibble_offset & 1)
			{
				proto_tree_add_item(tree, hf_culmap_bin_offset_1, tvb, ul_map_offset, 2, FALSE);
				/* move to next byte */
				ul_map_offset++;
			}
			else
			{
				proto_tree_add_item(tree, hf_culmap_bin_offset, tvb, ul_map_offset, 1, FALSE);
				/* move to next byte */
				ul_map_offset++;
			}
			length += 2;
			/* decode HARQ Control IE */
			nibble_length = wimax_compact_ulmap_harq_control_ie_decoder(tree, pinfo, tvb, ul_map_offset, nibble_offset);
			length += nibble_length;
		break;
		case COMPACT_UL_MAP_TYPE_UIUC:/* 6.3.2.3.43.7.4 */
			/* display the UL-MAP type and reserved bit */
			if(nibble_offset & 1)
			{
				proto_tree_add_item(tree, hf_culmap_ul_map_type_1, tvb, ul_map_offset, 1, FALSE);
				/* display the reserved */
				proto_tree_add_item(tree, hf_culmap_reserved_1, tvb, ul_map_offset, 1, FALSE);
				/* move to next byte */
				ul_map_offset++;
				/* get the new byte */
				byte = tvb_get_guint8(tvb, ul_map_offset);
				/* get the UIUC */
				uiuc = ((byte & MSB_NIBBLE_MASK) >> 4);
				/* display the UIUC */
				proto_tree_add_item(tree, hf_culmap_uiuc, tvb, ul_map_offset, 1, FALSE);
			}
			else
			{
				/* display the UL-MAP type */
				proto_tree_add_item(tree, hf_culmap_ul_map_type, tvb, ul_map_offset, 1, FALSE);
				/* display the reserved */
				proto_tree_add_item(tree, hf_culmap_reserved, tvb, ul_map_offset, 1, FALSE);
				/* get the UIUC */
				uiuc = (byte & LSB_NIBBLE_MASK);
				/* display the UIUC */
				proto_tree_add_item(tree, hf_culmap_uiuc_1, tvb, ul_map_offset, 1, FALSE);
			}
			length = 2;
			/* decode RCID IE */
			nibble_length = wimax_compact_ulmap_rcid_ie_decoder(tree, pinfo, tvb, ul_map_offset, nibble_offset);
			length += nibble_length;
			ul_map_offset += (nibble_length >> 1);
			nibble_offset = (nibble_length & 1);
			if(uiuc == 15)
			{	/* Extended UIUC dependent IE */
				nibble_length =  wimax_extended_uiuc_dependent_ie_decoder(tree, pinfo, tvb, ul_map_offset, nibble_offset);
				length += nibble_length;
				ul_map_offset += (nibble_length >> 1);
				nibble_offset = (nibble_length & 1);
			}
			else if(uiuc == 14)
			{	/* CDMA Allocation IE */
				nibble_length =  wimax_cdma_allocation_ie_decoder(tree, pinfo, tvb, ul_map_offset, nibble_offset);
				length += nibble_length;
				ul_map_offset += (nibble_length >> 1);
				nibble_offset = (nibble_length & 1);
			}
			else if(uiuc == 12)
			{
				if(nibble_offset & 1)
				{
					/* display the OFDMA symbol offset */
					proto_tree_add_item(tree, hf_culmap_uiuc_ofdma_symbol_offset_1, tvb, ul_map_offset, 2, FALSE);
					ul_map_offset++;
					/* display the subchannel offset */
					proto_tree_add_item(tree, hf_culmap_uiuc_subchannel_offset_7_1, tvb, ul_map_offset, 4, FALSE);
					/* display the number of OFDMA symbols */
					proto_tree_add_item(tree, hf_culmap_uiuc_num_of_ofdma_symbols_7_1, tvb, ul_map_offset, 4, FALSE);
					/* display the number of subchannels */
					proto_tree_add_item(tree, hf_culmap_uiuc_num_of_subchannels_7_1, tvb, ul_map_offset, 4, FALSE);
					/* display the ranging method */
					proto_tree_add_item(tree, hf_culmap_uiuc_ranging_method_1, tvb, ul_map_offset, 4, FALSE);
					/* display the reserved */
					proto_tree_add_item(tree, hf_culmap_uiuc_reserved_1, tvb, ul_map_offset, 4, FALSE);
					ul_map_offset += 3;
				}
				else
				{	/* display the OFDMA symbol offset */
					proto_tree_add_item(tree, hf_culmap_uiuc_ofdma_symbol_offset, tvb, ul_map_offset, 1, FALSE);
					ul_map_offset++;
					/* display the subchannel offset */
					proto_tree_add_item(tree, hf_culmap_uiuc_subchannel_offset_7, tvb, ul_map_offset, 3, FALSE);
					/* display the number of OFDMA symbols */
					proto_tree_add_item(tree, hf_culmap_uiuc_num_of_ofdma_symbols_7, tvb, ul_map_offset, 3, FALSE);
					/* display the number of subchannels */
					proto_tree_add_item(tree, hf_culmap_uiuc_num_of_subchannels_7, tvb, ul_map_offset, 3, FALSE);
					/* display the ranging method */
					proto_tree_add_item(tree, hf_culmap_uiuc_ranging_method, tvb, ul_map_offset, 3, FALSE);
					/* display the reserved */
					proto_tree_add_item(tree, hf_culmap_uiuc_reserved, tvb, ul_map_offset, 3, FALSE);
					ul_map_offset += 3;
				}
				length += 8;
			}
			else
			{	/* display Number of subchannels */
				if(nibble_offset & 1)
					proto_tree_add_item(tree, hf_culmap_uiuc_num_of_subchannels_1, tvb, ul_map_offset, 2, FALSE);
				else
					proto_tree_add_item(tree, hf_culmap_uiuc_num_of_subchannels, tvb, ul_map_offset, 1, FALSE);
				length += 2;
				/* display the repetition coding indication and reserved bits */
				if(nibble_offset & 1)
				{
					proto_tree_add_item(tree, hf_culmap_uiuc_repetition_coding_indication_1, tvb, ul_map_offset, 1, FALSE);
					proto_tree_add_item(tree, hf_culmap_uiuc_reserved_1, tvb, ul_map_offset, 1, FALSE);
					nibble_offset = 0;
				}
				else
				{
					proto_tree_add_item(tree, hf_culmap_uiuc_repetition_coding_indication, tvb, ul_map_offset, 1, FALSE);
					proto_tree_add_item(tree, hf_culmap_uiuc_reserved, tvb, ul_map_offset, 1, FALSE);
					nibble_offset = 1;
				}
				length += 1;
			}
			/* decode HARQ Control IE */
			nibble_length = wimax_compact_ulmap_harq_control_ie_decoder(tree, pinfo, tvb, ul_map_offset, nibble_offset);
			length += nibble_length;
		break;
		case COMPACT_UL_MAP_TYPE_HARQ_REGION_IE:/* 6.3.2.3.43.7.5 */
			if(nibble_offset & 1)
			{	/* display the UL-MAP type */
				proto_tree_add_item(tree, hf_culmap_ul_map_type_1, tvb, ul_map_offset, 1, FALSE);
				/* display the HARQ Region Change Indication */
				proto_tree_add_item(tree, hf_culmap_harq_region_change_indication_1, tvb, ul_map_offset, 1, FALSE);
				/* get the HARQ Region Change Indication */
				harq_region_change_indication = (byte & 0x01);
				/* move to next byte */
				ul_map_offset++;
				nibble_offset = 0;
			}
			else
			{	/* display the UL-MAP type */
				proto_tree_add_item(tree, hf_culmap_ul_map_type, tvb, ul_map_offset, 1, FALSE);
				/* display the HARQ Region Change Indication */
				proto_tree_add_item(tree, hf_culmap_harq_region_change_indication, tvb, ul_map_offset, 1, FALSE);
				/* get the HARQ Region Change Indication */
				harq_region_change_indication = (byte & 0x10);
				nibble_offset = 1;
			}
			length = 1;
			if(harq_region_change_indication == 1)
			{
				if(nibble_offset & 1)
				{
					/* display the OFDMA symbol offset */
					proto_tree_add_item(tree, hf_culmap_uiuc_ofdma_symbol_offset_1, tvb, ul_map_offset, 2, FALSE);
					ul_map_offset++;
					/* display the subchannel offset */
					proto_tree_add_item(tree, hf_culmap_uiuc_subchannel_offset_1, tvb, ul_map_offset, 2, FALSE);
					ul_map_offset++;
					/* display the number of OFDMA symbols */
					proto_tree_add_item(tree, hf_culmap_uiuc_num_of_ofdma_symbols_1, tvb, ul_map_offset, 2, FALSE);
					ul_map_offset++;
					/* display the number of subchannels */
					proto_tree_add_item(tree, hf_culmap_uiuc_num_of_subchannels_1, tvb, ul_map_offset, 2, FALSE);
					ul_map_offset++;
				}
				else
				{	/* display the OFDMA symbol offset */
					proto_tree_add_item(tree, hf_culmap_uiuc_ofdma_symbol_offset, tvb, ul_map_offset, 1, FALSE);
					ul_map_offset++;
					/* display the subchannel offset */
					proto_tree_add_item(tree, hf_culmap_uiuc_subchannel_offset, tvb, ul_map_offset, 1, FALSE);
					ul_map_offset++;
					/* display the number of OFDMA symbols */
					proto_tree_add_item(tree, hf_culmap_uiuc_num_of_ofdma_symbols, tvb, ul_map_offset, 1, FALSE);
					ul_map_offset++;
					/* display the number of subchannels */
					proto_tree_add_item(tree, hf_culmap_uiuc_num_of_subchannels, tvb, ul_map_offset, 1, FALSE);
					ul_map_offset++;
				}
				length += 8;
			}
		break;
		case COMPACT_UL_MAP_TYPE_CQICH_REGION_IE:/* 6.3.2.3.43.7.6 */
			if(nibble_offset & 1)
			{	/* display the UL-MAP type */
				proto_tree_add_item(tree, hf_culmap_ul_map_type_1, tvb, ul_map_offset, 1, FALSE);
				/* display the CQI Region Change Indication */
				proto_tree_add_item(tree, hf_culmap_cqi_region_change_indication_1, tvb, ul_map_offset, 1, FALSE);
				/* get the CQI Region Change Indication */
				cqi_region_change_indication = (byte & 0x01);
				/* move to next byte */
				ul_map_offset++;
				nibble_offset = 0;
			}
			else
			{	/* display the UL-MAP type */
				proto_tree_add_item(tree, hf_culmap_ul_map_type, tvb, ul_map_offset, 1, FALSE);
				/* display the CQI Region Change Indication */
				proto_tree_add_item(tree, hf_culmap_cqi_region_change_indication, tvb, ul_map_offset, 1, FALSE);
				/* get the CQI Region Change Indication */
				cqi_region_change_indication = (byte & 0x10);
				nibble_offset = 1;
			}
			length = 1;
			if(cqi_region_change_indication == 1)
			{
				if(nibble_offset & 1)
				{
					/* display the OFDMA symbol offset */
					proto_tree_add_item(tree, hf_culmap_uiuc_ofdma_symbol_offset_1, tvb, ul_map_offset, 2, FALSE);
					ul_map_offset++;
					/* display the subchannel offset */
					proto_tree_add_item(tree, hf_culmap_uiuc_subchannel_offset_1, tvb, ul_map_offset, 2, FALSE);
					ul_map_offset++;
					/* display the number of OFDMA symbols */
					proto_tree_add_item(tree, hf_culmap_uiuc_num_of_ofdma_symbols_1, tvb, ul_map_offset, 2, FALSE);
					ul_map_offset++;
					/* display the number of subchannels */
					proto_tree_add_item(tree, hf_culmap_uiuc_num_of_subchannels_1, tvb, ul_map_offset, 2, FALSE);
					ul_map_offset++;
				}
				else
				{	/* display the OFDMA symbol offset */
					proto_tree_add_item(tree, hf_culmap_uiuc_ofdma_symbol_offset, tvb, ul_map_offset, 1, FALSE);
					ul_map_offset++;
					/* display the subchannel offset */
					proto_tree_add_item(tree, hf_culmap_uiuc_subchannel_offset, tvb, ul_map_offset, 1, FALSE);
					ul_map_offset++;
					/* display the number of OFDMA symbols */
					proto_tree_add_item(tree, hf_culmap_uiuc_num_of_ofdma_symbols, tvb, ul_map_offset, 1, FALSE);
					ul_map_offset++;
					/* display the number of subchannels */
					proto_tree_add_item(tree, hf_culmap_uiuc_num_of_subchannels, tvb, ul_map_offset, 1, FALSE);
					ul_map_offset++;
			

⌨️ 快捷键说明

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