2 * WiMax MAC Management UCD Message decoder
4 * Copyright (c) 2007 by Intel Corporation.
6 * Author: Lu Pan <lu.pan@intel.com>
8 * Wireshark - Network traffic analyzer
9 * By Gerald Combs <gerald@wireshark.org>
10 * Copyright 1999 Gerald Combs
12 * SPDX-License-Identifier: GPL-2.0-or-later
23 #include <epan/packet.h>
25 #include <epan/unit_strings.h>
27 #include <wsutil/array.h>
28 #include "wimax_tlv.h"
29 #include "wimax_mac.h"
30 #include "wimax_utils.h"
31 #include "wimax_prefs.h"
33 void proto_register_mac_mgmt_msg_ucd(void);
34 void proto_reg_handoff_mac_mgmt_msg_ucd(void);
36 static dissector_handle_t ucd_handle
;
38 unsigned cqich_id_size
; /* Set for CQICH_Alloc_IE */
40 static int proto_mac_mgmt_msg_ucd_decoder
;
41 static int ett_mac_mgmt_msg_ucd_decoder
;
44 static int hf_ucd_res_timeout
;
45 static int hf_ucd_bw_req_size
;
46 static int hf_ucd_ranging_req_size
;
47 static int hf_ucd_freq
;
48 /* static int hf_ucd_subchan_params_num_chan; */
49 static int hf_ucd_ul_allocated_subchannles_bitmap
;
50 /* static int hf_ucd_subchan_params_num_sym; */
51 /* static int hf_ucd_subchan_codes; */
53 static int hf_ucd_ul_burst_reserved
;
54 static int hf_ucd_ul_burst_uiuc
;
55 static int hf_ucd_burst_fec
;
56 static int hf_ucd_burst_ranging_data_ratio
;
57 /*static int hf_ucd_burst_power_boost;
58 *static int hf_ucd_burst_tcs_enable;
61 static int hf_ucd_tlv_t_159_band_amc_allocation_threshold
;
62 static int hf_ucd_tlv_t_158_optional_permutation_ul_allocated_subchannels_bitmap
;
63 static int hf_ucd_tlv_t_160_band_amc_release_threshold
;
64 static int hf_ucd_tlv_t_161_band_amc_allocation_timer
;
65 static int hf_ucd_tlv_t_162_band_amc_release_timer
;
66 static int hf_ucd_tlv_t_163_band_status_report_max_period
;
67 static int hf_ucd_tlv_t_164_band_amc_retry_timer
;
68 static int hf_ucd_tlv_t_171_harq_ack_delay_dl_burst
;
69 static int hf_ucd_tlv_t_170_safety_channel_retry_timer
;
70 static int hf_ucd_tlv_t_172_cqich_band_amc_transition_delay
;
71 static int hf_ucd_tlv_t_174_maximum_retransmission
;
72 static int hf_ucd_tlv_t_177_normalized_cn_override2
;
73 static int hf_ucd_tlv_t_177_normalized_cn_override2_first_line
;
74 static int hf_ucd_tlv_t_177_normalized_cn_override2_list
;
75 static int hf_ucd_tlv_t_176_size_of_cqich_id_field
;
76 static int hf_ucd_tlv_t_186_upper_bound_aas_preamble
;
77 static int hf_ucd_tlv_t_187_lower_bound_aas_preamble
;
78 static int hf_ucd_tlv_t_188_allow_aas_beam_select_message
;
79 static int hf_ucd_tlv_t_189_use_cqich_indication_flag
;
80 static int hf_ucd_tlv_t_190_ms_specific_up_power_addjustment_step
;
81 static int hf_ucd_tlv_t_191_ms_specific_down_power_addjustment_step
;
82 static int hf_ucd_tlv_t_192_min_level_power_offset_adjustment
;
83 static int hf_ucd_tlv_t_193_max_level_power_offset_adjustment
;
84 static int hf_ucd_tlv_t_194_handover_ranging_codes
;
85 static int hf_ucd_tlv_t_195_initial_ranging_interval
;
86 static int hf_ucd_tlv_t_196_tx_power_report
;
87 static int hf_ucd_tlv_t_196_tx_power_report_threshold
;
88 static int hf_ucd_tlv_t_196_tx_power_report_interval
;
89 static int hf_ucd_tlv_t_196_tx_power_report_a_p_avg
;
90 static int hf_ucd_tlv_t_196_tx_power_report_threshold_icqch
;
91 static int hf_ucd_tlv_t_196_tx_power_report_interval_icqch
;
92 static int hf_ucd_tlv_t_196_tx_power_report_a_p_avg_icqch
;
93 /* static int hf_ucd_tlv_t_197_normalized_cn_channel_sounding; */
94 static int hf_ucd_tlv_t_202_uplink_burst_profile_for_multiple_fec_types
;
95 static int hf_ucd_tlv_t_203_ul_pusc_subchannel_rotation
;
96 static int hf_ucd_tlv_t_205_relative_power_offset_ul_harq_burst
;
97 static int hf_ucd_tlv_t_206_relative_power_offset_ul_burst_containing_mac_mgmt_msg
;
98 static int hf_ucd_tlv_t_207_ul_initial_transmit_timing
;
99 static int hf_ucd_tlv_t_210_fast_feedback_region
;
100 static int hf_ucd_tlv_t_211_harq_ack_region
;
101 static int hf_ucd_tlv_t_212_ranging_region
;
102 static int hf_ucd_tlv_t_213_sounding_region
;
103 static int hf_ucd_tlv_t_150_initial_ranging_codes
;
104 static int hf_ucd_tlv_t_151_periodic_ranging_codes
;
105 static int hf_ucd_tlv_t_152_bandwidth_request_codes
;
106 static int hf_ucd_tlv_t_155_start_of_ranging_codes_group
;
107 static int hf_ucd_tlv_t_156_permutation_base
;
108 static int hf_ucd_ho_ranging_start
;
109 static int hf_ucd_ho_ranging_end
;
110 static int hf_ucd_initial_range_backoff_start
;
111 static int hf_ucd_initial_range_backoff_end
;
112 static int hf_ucd_bandwidth_backoff_start
;
113 static int hf_ucd_bandwidth_backoff_end
;
114 static int hf_ucd_periodic_ranging_backoff_start
;
115 static int hf_ucd_periodic_ranging_backoff_end
;
116 static int hf_ucd_config_change_count
;
117 static int hf_ucd_ranging_backoff_start
;
118 static int hf_ucd_ranging_backoff_end
;
119 static int hf_ucd_request_backoff_start
;
120 static int hf_ucd_request_backoff_end
;
122 /* static int hf_ucd_unknown_type; */
123 static int hf_ucd_invalid_tlv
;
126 static const value_string vals_dcd_burst_tcs
[] =
134 static const value_string vals_dcd_burst_fec
[] =
136 { 0, "QPSK (CC) 1/2"},
137 { 1, "QPSK (CC) 3/4"},
138 { 2, "16-QAM (CC) 1/2"},
139 { 3, "16-QAM (CC) 3/4"},
140 { 4, "64-QAM (CC) 1/2"},
141 { 5, "64-QAM (CC) 2/3"},
142 { 6, "64-QAM (CC) 3/4"},
143 { 7, "QPSK (BTC) 1/2"},
144 { 8, "QPSK (BTC) 3/4 or 2/3"},
145 { 9, "16-QAM (BTC) 3/5"},
146 {10, "16-QAM (BTC) 4/5"},
147 {11, "64-QAM (BTC) 2/3 or 5/8"},
148 {12, "64-QAM (BTC) 5/6 or 4/5"},
149 {13, "QPSK (CTC) 1/2"},
151 {15, "QPSK (CTC) 3/4"},
152 {16, "16-QAM (CTC) 1/2"},
153 {17, "16-QAM (CTC) 3/4"},
154 {18, "64-QAM (CTC) 1/2"},
155 {19, "64-QAM (CTC) 2/3"},
156 {20, "64-QAM (CTC) 3/4"},
157 {21, "64-QAM (CTC) 5/6"},
158 {22, "QPSK (ZT CC) 1/2"},
159 {23, "QPSK (ZT CC) 3/4"},
160 {24, "16-QAM (ZT CC) 1/2"},
161 {25, "16-QAM (ZT CC) 3/4"},
162 {26, "64-QAM (ZT CC) 1/2"},
163 {27, "64-QAM (ZT CC) 2/3"},
164 {28, "64-QAM (ZT CC) 3/4"},
165 {29, "QPSK (LDPC) 1/2"},
166 {30, "QPSK (LDPC) 2/3 A code"},
167 {31, "16-QAM (LDPC) 3/4 A code"},
168 {32, "16-QAM (LDPC) 1/2"},
169 {33, "16-QAM (LDPC) 2/3 A code"},
170 {34, "16-QAM (LDPC) 3/4 A code"},
171 {35, "64-QAM (LDPC) 1/2"},
172 {36, "64-QAM (LDPC) 2/3 A code"},
173 {37, "64-QAM (LDPC) 3/4 A code"},
174 {38, "QPSK (LDPC) 2/3 B code"},
175 {39, "QPSK (LDPC) 3/4 B code"},
176 {40, "16-QAM (LDPC) 2/3 B code"},
177 {41, "16-QAM (LDPC) 3/4 B code"},
178 {42, "64-QAM (LDPC) 2/3 B code"},
179 {43, "64-QAM (LDPC) 3/4 B code"},
180 {44, "QPSK (CC with optional interleaver) 1/2"},
181 {45, "QPSK (CC with optional interleaver) 3/4"},
182 {46, "16-QAM (CC with optional interleaver) 1/2"},
183 {47, "16-QAM (CC optional interleaver) 0%00"},
184 {48, "64-QAM (CC with optional interleaver) 2/3"},
185 {49, "64-QAM (CC with optional interleaver) 3/4"},
186 {50, "QPSK (LDPC) 5/6"},
187 {51, "16-QAM (LDPC) 5/6"},
188 {52, "64-QAM (LDPC) 5/6"},
192 static const value_string vals_ucd_cqich_size
[] =
205 static const value_string vals_yes_no_str
[] =
214 static int dissect_mac_mgmt_msg_ucd_decoder(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void* data _U_
)
217 unsigned tvb_len
, length
;
218 int tlv_type
, tlv_len
, tlv_offset
, tlv_value_offset
;
222 { /* we are being asked for details */
223 proto_item
*ucd_item
;
224 proto_tree
*ucd_tree
;
225 unsigned ucd_ranging_backoff_start
;
226 unsigned ucd_ranging_backoff_end
;
227 unsigned ucd_request_backoff_start
;
228 unsigned ucd_request_backoff_end
;
230 tvb_len
= tvb_reported_length(tvb
);
231 /* display MAC payload type UCD */
232 ucd_item
= proto_tree_add_protocol_format(tree
, proto_mac_mgmt_msg_ucd_decoder
, tvb
, offset
, -1, "Uplink Channel Descriptor (UCD)");
233 ucd_tree
= proto_item_add_subtree(ucd_item
, ett_mac_mgmt_msg_ucd_decoder
);
235 /* Decode and display the Uplink Channel Descriptor (UCD) */
236 /* display the Configuration Change Count */
237 proto_tree_add_item(ucd_tree
, hf_ucd_config_change_count
, tvb
, offset
, 1, ENC_NA
);
240 /* get the ranging backoff start */
241 ucd_ranging_backoff_start
= tvb_get_uint8(tvb
, offset
);
242 proto_tree_add_uint_format_value(ucd_tree
, hf_ucd_ranging_backoff_start
, tvb
, offset
, 1, (1 << ucd_ranging_backoff_start
), "2^%u = %u", ucd_ranging_backoff_start
, (1 << ucd_ranging_backoff_start
));
245 /* get the ranging backoff end */
246 ucd_ranging_backoff_end
= tvb_get_uint8(tvb
, offset
);
247 proto_tree_add_uint_format_value(ucd_tree
, hf_ucd_ranging_backoff_end
, tvb
, offset
, 1, (1 << ucd_ranging_backoff_end
), "2^%u = %u", ucd_ranging_backoff_end
, (1 << ucd_ranging_backoff_end
));
250 /* get the request backoff start */
251 ucd_request_backoff_start
= tvb_get_uint8(tvb
, offset
);
252 proto_tree_add_uint_format_value(ucd_tree
, hf_ucd_request_backoff_start
, tvb
, offset
, 1, (1 << ucd_request_backoff_start
), "2^%u = %u", ucd_request_backoff_start
, (1 << ucd_request_backoff_start
));
255 /* get the request backoff end */
256 ucd_request_backoff_end
= tvb_get_uint8(tvb
, offset
);
257 proto_tree_add_uint_format_value(ucd_tree
, hf_ucd_request_backoff_end
, tvb
, offset
, 1, (1 << ucd_request_backoff_end
), "2^%u = %u", ucd_request_backoff_end
, (1 << ucd_request_backoff_end
));
260 while(offset
< tvb_len
)
262 proto_tree
*tlv_tree
;
263 proto_item
*tlv_item1
;
264 unsigned ul_burst_uiuc
;
266 /* get the TLV information */
267 init_tlv_info(&tlv_info
, tvb
, offset
);
268 /* get the TLV type */
269 tlv_type
= get_tlv_type(&tlv_info
);
270 /* get the TLV length */
271 tlv_len
= get_tlv_length(&tlv_info
);
272 if(tlv_type
== -1 || tlv_len
> MAX_TLV_LEN
|| tlv_len
< 1)
273 { /* invalid tlv info */
274 col_append_sep_str(pinfo
->cinfo
, COL_INFO
, NULL
, "UCD TLV error");
275 proto_tree_add_item(ucd_tree
,hf_ucd_invalid_tlv
, tvb
, offset
, (tvb_len
- offset
), ENC_NA
);
278 /* get the TLV value offset */
279 tlv_value_offset
= get_tlv_value_offset(&tlv_info
);
280 #ifdef DEBUG /* for debug only */
281 proto_tree_add_protocol_format(ucd_tree
, proto_mac_mgmt_msg_ucd_decoder
, tvb
, offset
, (tlv_len
+ tlv_value_offset
), "UCD Type: %u (%u bytes, offset=%u, tvb_len=%u)", tlv_type
, tlv_len
, offset
, tvb_len
);
283 /* update the offset */
284 offset
+= tlv_value_offset
;
285 /* process UCD TLV Encoded information */
286 if (include_cor2_changes
)
290 case UCD_TLV_T_203_UL_PUSC_SUBCHANNEL_ROTATION
:
292 add_tlv_subtree(&tlv_info
, ucd_tree
, hf_ucd_tlv_t_203_ul_pusc_subchannel_rotation
, tvb
, offset
-tlv_value_offset
, ENC_BIG_ENDIAN
);
295 case UCD_TLV_T_205_RELATIVE_POWER_OFFSET_UL_HARQ_BURST
:
297 add_tlv_subtree(&tlv_info
, ucd_tree
, hf_ucd_tlv_t_205_relative_power_offset_ul_harq_burst
, tvb
, offset
-tlv_value_offset
, ENC_BIG_ENDIAN
);
300 case UCD_TLV_T_206_RELATIVE_POWER_OFFSET_UL_BURST_CONTAINING_MAC_MGMT_MSG
:
302 add_tlv_subtree(&tlv_info
, ucd_tree
, hf_ucd_tlv_t_206_relative_power_offset_ul_burst_containing_mac_mgmt_msg
, tvb
, offset
-tlv_value_offset
, ENC_BIG_ENDIAN
);
305 case UCD_TLV_T_207_UL_INITIAL_TRANSMIT_TIMING
:
307 add_tlv_subtree(&tlv_info
, ucd_tree
, hf_ucd_tlv_t_207_ul_initial_transmit_timing
, tvb
, offset
-tlv_value_offset
, ENC_BIG_ENDIAN
);
310 case UCD_TLV_T_210_FAST_FEEDBACK_REGION
:
312 add_tlv_subtree(&tlv_info
, ucd_tree
, hf_ucd_tlv_t_210_fast_feedback_region
, tvb
, offset
-tlv_value_offset
, ENC_NA
);
315 case UCD_TLV_T_211_HARQ_ACK_REGION
:
317 add_tlv_subtree(&tlv_info
, ucd_tree
, hf_ucd_tlv_t_211_harq_ack_region
, tvb
, offset
-tlv_value_offset
, ENC_NA
);
320 case UCD_TLV_T_212_RANGING_REGION
:
322 add_tlv_subtree(&tlv_info
, ucd_tree
, hf_ucd_tlv_t_212_ranging_region
, tvb
, offset
-tlv_value_offset
, ENC_NA
);
325 case UCD_TLV_T_213_SOUNDING_REGION
:
327 add_tlv_subtree(&tlv_info
, ucd_tree
, hf_ucd_tlv_t_213_sounding_region
, tvb
, offset
-tlv_value_offset
, ENC_NA
);
334 case UCD_UPLINK_BURST_PROFILE
:
337 ul_burst_uiuc
= tvb_get_uint8(tvb
, offset
) & 0x0F;
338 /* add TLV subtree */
339 proto_str
= wmem_strdup_printf(pinfo
->pool
, "Uplink Burst Profile (UIUC = %u)", ul_burst_uiuc
);
340 tlv_tree
= add_protocol_subtree(&tlv_info
, ett_mac_mgmt_msg_ucd_decoder
, ucd_tree
, proto_mac_mgmt_msg_ucd_decoder
, tvb
, offset
-tlv_value_offset
, tlv_len
, proto_str
);
341 proto_tree_add_item(tlv_tree
, hf_ucd_ul_burst_reserved
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
342 proto_tree_add_item(tlv_tree
, hf_ucd_ul_burst_uiuc
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
343 for (tlv_offset
= 1; tlv_offset
< tlv_len
;)
344 { /* get the TLV information */
345 init_tlv_info(&tlv_info
, tvb
, (offset
+tlv_offset
));
346 /* get the TLV type */
347 tlv_type
= get_tlv_type(&tlv_info
);
349 { /* invalid tlv info */
350 col_append_sep_str(pinfo
->cinfo
, COL_INFO
, NULL
, "UL Burst Profile error");
351 proto_tree_add_item(tlv_tree
, hf_ucd_invalid_tlv
, tvb
, offset
, (tlv_len
- offset
- tlv_offset
), ENC_NA
);
354 /* get the TLV length */
355 length
= get_tlv_length(&tlv_info
);
361 add_tlv_subtree(&tlv_info
, tlv_tree
, hf_ucd_burst_fec
, tvb
, (offset
+tlv_offset
), ENC_BIG_ENDIAN
);
364 case UCD_BURST_RANGING_DATA_RATIO
:
366 add_tlv_subtree(&tlv_info
, tlv_tree
, hf_ucd_burst_ranging_data_ratio
, tvb
, (offset
+tlv_offset
), ENC_BIG_ENDIAN
);
370 case UCD_BURST_POWER_BOOST
:
372 add_tlv_subtree(&tlv_info
, tlv_tree
, hf_ucd_burst_power_boost
, tvb
, (offset
+tlv_offset
), ENC_BIG_ENDIAN
);
375 case UCD_BURST_TCS_ENABLE
:
377 add_tlv_subtree(&tlv_info
, tlv_tree
, hf_ucd_burst_tcs_enable
, tvb
, (offset
+tlv_offset
), 1, ENC_BIG_ENDIAN
);
385 tlv_offset
+= (length
+get_tlv_value_offset(&tlv_info
));
389 case UCD_RESERVATION_TIMEOUT
:
391 add_tlv_subtree(&tlv_info
, ucd_tree
, hf_ucd_res_timeout
, tvb
, offset
-tlv_value_offset
, ENC_BIG_ENDIAN
);
394 case UCD_BW_REQ_SIZE
:
396 add_tlv_subtree(&tlv_info
, ucd_tree
, hf_ucd_bw_req_size
, tvb
, offset
-tlv_value_offset
, ENC_BIG_ENDIAN
);
399 case UCD_RANGING_REQ_SIZE
:
401 add_tlv_subtree(&tlv_info
, ucd_tree
, hf_ucd_ranging_req_size
, tvb
, offset
-tlv_value_offset
, ENC_BIG_ENDIAN
);
406 add_tlv_subtree(&tlv_info
, ucd_tree
, hf_ucd_freq
, tvb
, offset
-tlv_value_offset
, ENC_BIG_ENDIAN
);
409 case UCD_TLV_T_7_HO_RANGING_START
:
411 tlv_tree
= add_tlv_subtree_no_item(&tlv_info
, ucd_tree
, hf_ucd_ho_ranging_start
, tvb
, offset
-tlv_value_offset
);
412 utemp
= tvb_get_uint8(tvb
, offset
);
413 proto_tree_add_uint_format_value(tlv_tree
, hf_ucd_ho_ranging_start
, tvb
, offset
, tvb_len
, utemp
, "2^%u = %u", utemp
, (1 << utemp
));
416 case UCD_TLV_T_8_RANGING_HO_END
:
418 tlv_tree
= add_tlv_subtree_no_item(&tlv_info
, ucd_tree
, hf_ucd_ho_ranging_end
, tvb
, offset
-tlv_value_offset
);
419 utemp
= tvb_get_uint8(tvb
, offset
);
420 proto_tree_add_uint_format_value(tlv_tree
, hf_ucd_ho_ranging_end
, tvb
, offset
, tvb_len
, utemp
, "2^%u = %u", utemp
, (1 << utemp
));
423 case UCD_TLV_T_158_OPTIONAL_PERMUTATION_UL_ALLOCATED_SUBCHANNELS_BITMAP
:
425 add_tlv_subtree(&tlv_info
, ucd_tree
, hf_ucd_tlv_t_158_optional_permutation_ul_allocated_subchannels_bitmap
, tvb
, offset
-tlv_value_offset
, ENC_NA
);
428 case UCD_TLV_T_159_BAND_AMC_ALLOCATION_THRESHHOLD
:
430 add_tlv_subtree(&tlv_info
, ucd_tree
, hf_ucd_tlv_t_159_band_amc_allocation_threshold
, tvb
, offset
-tlv_value_offset
, ENC_BIG_ENDIAN
);
433 case UCD_TLV_T_160_BAND_AMC_RELEASE_THRESHOLD
:
435 add_tlv_subtree(&tlv_info
, ucd_tree
, hf_ucd_tlv_t_160_band_amc_release_threshold
, tvb
, offset
-tlv_value_offset
, ENC_BIG_ENDIAN
);
438 case UCD_TLV_T_161_BAND_AMC_ALLOCATION_TIMER
:
440 add_tlv_subtree(&tlv_info
, ucd_tree
, hf_ucd_tlv_t_161_band_amc_allocation_timer
, tvb
, offset
-tlv_value_offset
, ENC_BIG_ENDIAN
);
443 case UCD_TLV_T_162_BAND_AMC_RELEASE_TIMER
:
445 add_tlv_subtree(&tlv_info
, ucd_tree
, hf_ucd_tlv_t_162_band_amc_release_timer
, tvb
, offset
-tlv_value_offset
, ENC_BIG_ENDIAN
);
448 case UCD_TLV_T_163_BAND_STATUS_REPORT_MAX_PERIOD
:
450 add_tlv_subtree(&tlv_info
, ucd_tree
, hf_ucd_tlv_t_163_band_status_report_max_period
, tvb
, offset
-tlv_value_offset
, ENC_BIG_ENDIAN
);
453 case UCD_TLV_T_164_BAND_AMC_RETRY_TIMER
:
455 add_tlv_subtree(&tlv_info
, ucd_tree
, hf_ucd_tlv_t_164_band_amc_retry_timer
, tvb
, offset
-tlv_value_offset
, ENC_BIG_ENDIAN
);
458 case UCD_TLV_T_170_SAFETY_CHANNEL_RETRY_TIMER
:
460 add_tlv_subtree(&tlv_info
, ucd_tree
, hf_ucd_tlv_t_170_safety_channel_retry_timer
, tvb
, offset
-tlv_value_offset
, ENC_BIG_ENDIAN
);
463 case UCD_TLV_T_171_HARQ_ACK_DELAY_FOR_DL_BURST
:
465 add_tlv_subtree(&tlv_info
, ucd_tree
, hf_ucd_tlv_t_171_harq_ack_delay_dl_burst
, tvb
, offset
-tlv_value_offset
, ENC_BIG_ENDIAN
);
468 case UCD_TLV_T_172_CQICH_BAND_AMC_TRANSITION_DELAY
:
470 add_tlv_subtree(&tlv_info
, ucd_tree
, hf_ucd_tlv_t_172_cqich_band_amc_transition_delay
, tvb
, offset
-tlv_value_offset
, ENC_BIG_ENDIAN
);
473 case UCD_TLV_T_174_MAXIMUM_RETRANSMISSION
:
475 add_tlv_subtree(&tlv_info
, ucd_tree
, hf_ucd_tlv_t_174_maximum_retransmission
, tvb
, offset
-tlv_value_offset
, ENC_BIG_ENDIAN
);
478 case UCD_TLV_T_176_SIZE_OF_CQICH_ID_FIELD
:
480 utemp
= tvb_get_uint8(tvb
, offset
);
481 cqich_id_size
= 0; /* Default is 0 */
482 if (utemp
&& utemp
< 8) {
483 /* Set for CQICH_Alloc_IE */
484 cqich_id_size
= utemp
+ 2;
486 add_tlv_subtree(&tlv_info
, ucd_tree
, hf_ucd_tlv_t_176_size_of_cqich_id_field
, tvb
, offset
-tlv_value_offset
, ENC_BIG_ENDIAN
);
489 case UCD_TLV_T_177_NORMALIZED_CN_OVERRIDE_2
:
491 /* add TLV subtree */
492 tlv_item1
= add_tlv_subtree(&tlv_info
, ucd_tree
, hf_ucd_tlv_t_177_normalized_cn_override2
, tvb
, offset
-tlv_value_offset
, ENC_NA
|ENC_ASCII
);
493 tlv_tree
= proto_item_add_subtree(tlv_item1
, ett_mac_mgmt_msg_ucd_decoder
);
494 proto_tree_add_item(tlv_tree
, hf_ucd_tlv_t_177_normalized_cn_override2_first_line
, tvb
, offset
+ 2, 1, ENC_BIG_ENDIAN
);
495 proto_tree_add_item(tlv_tree
, hf_ucd_tlv_t_177_normalized_cn_override2_list
, tvb
, offset
+ 3, 7, ENC_ASCII
|ENC_NA
);
498 case UCD_TLV_T_186_UPPER_BOUND__AAS_PREAMBLE
:
500 add_tlv_subtree(&tlv_info
, ucd_tree
, hf_ucd_tlv_t_186_upper_bound_aas_preamble
, tvb
, offset
-tlv_value_offset
, ENC_BIG_ENDIAN
);
503 case UCD_TLV_T_187_LOWER_BOUND_AAS_PREAMBLE
:
505 add_tlv_subtree(&tlv_info
, ucd_tree
, hf_ucd_tlv_t_187_lower_bound_aas_preamble
, tvb
, offset
-tlv_value_offset
, ENC_BIG_ENDIAN
);
508 case UCD_TLV_T_188_ALLOW_AAS_BEAM_SELECT_MESSAGE
:
510 add_tlv_subtree(&tlv_info
, ucd_tree
, hf_ucd_tlv_t_188_allow_aas_beam_select_message
, tvb
, offset
-tlv_value_offset
, ENC_BIG_ENDIAN
);
513 case UCD_TLV_T_189_USE_CQICH_INDICATION_FLAG
:
515 add_tlv_subtree(&tlv_info
, ucd_tree
, hf_ucd_tlv_t_189_use_cqich_indication_flag
, tvb
, offset
-tlv_value_offset
, ENC_BIG_ENDIAN
);
518 case UCD_TLV_T_190_MS_SPECIFIC_UP_POWER_OFFSET_ADJUSTMENT_STEP
:
520 add_tlv_subtree(&tlv_info
, ucd_tree
, hf_ucd_tlv_t_190_ms_specific_up_power_addjustment_step
, tvb
, offset
-tlv_value_offset
, ENC_BIG_ENDIAN
);
523 case UCD_TLV_T_191_MS_SPECIFIC_DOWN_POWER_OFSET_ADJUSTMENT_STEP
:
525 add_tlv_subtree(&tlv_info
, ucd_tree
, hf_ucd_tlv_t_191_ms_specific_down_power_addjustment_step
, tvb
, offset
-tlv_value_offset
, ENC_BIG_ENDIAN
);
528 case UCD_TLV_T_192_MIN_LEVEL_POWER_OFFSET_ADJUSTMENT
:
530 add_tlv_subtree(&tlv_info
, ucd_tree
, hf_ucd_tlv_t_192_min_level_power_offset_adjustment
, tvb
, offset
-tlv_value_offset
, ENC_BIG_ENDIAN
);
533 case UCD_TLV_T_193_MAX_LEVEL_POWER_OFFSETR_ADJUSTMENT
:
535 add_tlv_subtree(&tlv_info
, ucd_tree
, hf_ucd_tlv_t_193_max_level_power_offset_adjustment
, tvb
, offset
-tlv_value_offset
, ENC_BIG_ENDIAN
);
538 case UCD_TLV_T_194_HANDOVER_RANGING_CODES
:
540 add_tlv_subtree(&tlv_info
, ucd_tree
, hf_ucd_tlv_t_194_handover_ranging_codes
, tvb
, offset
-tlv_value_offset
, ENC_BIG_ENDIAN
);
543 case UCD_TLV_T_195_INITIAL_RANGING_INTERVAL
:
545 add_tlv_subtree(&tlv_info
, ucd_tree
, hf_ucd_tlv_t_195_initial_ranging_interval
, tvb
, offset
-tlv_value_offset
, ENC_BIG_ENDIAN
);
548 case UCD_TLV_T_196_TX_POWER_REPORT
:
550 tlv_item1
= add_tlv_subtree(&tlv_info
, ucd_tree
, hf_ucd_tlv_t_196_tx_power_report
, tvb
, offset
-tlv_value_offset
, ENC_BIG_ENDIAN
);
551 tlv_tree
= proto_item_add_subtree(tlv_item1
, ett_mac_mgmt_msg_ucd_decoder
);
552 proto_tree_add_item(tlv_tree
, hf_ucd_tlv_t_196_tx_power_report_threshold
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
553 proto_tree_add_item(tlv_tree
, hf_ucd_tlv_t_196_tx_power_report_interval
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
554 proto_tree_add_item(tlv_tree
, hf_ucd_tlv_t_196_tx_power_report_a_p_avg
, tvb
, (offset
+ 1), 1, ENC_BIG_ENDIAN
);
555 proto_tree_add_item(tlv_tree
, hf_ucd_tlv_t_196_tx_power_report_threshold_icqch
, tvb
, (offset
+ 1), 1, ENC_BIG_ENDIAN
);
556 proto_tree_add_item(tlv_tree
, hf_ucd_tlv_t_196_tx_power_report_interval_icqch
, tvb
, (offset
+ 2), 1, ENC_BIG_ENDIAN
);
557 proto_tree_add_item(tlv_tree
, hf_ucd_tlv_t_196_tx_power_report_a_p_avg_icqch
, tvb
, (offset
+ 2), 1, ENC_BIG_ENDIAN
);
560 case UCD_TLV_T_197_NORMALIZED_CN_FOR_CHANNEL_SOUNDING
:
562 add_tlv_subtree(&tlv_info
, ucd_tree
, hf_ucd_tlv_t_195_initial_ranging_interval
, tvb
, offset
-tlv_value_offset
, ENC_BIG_ENDIAN
);
565 case UCD_TLV_T_198_INTIAL_RANGING_BACKOFF_START
:
567 tlv_tree
= add_tlv_subtree_no_item(&tlv_info
, ucd_tree
, hf_ucd_initial_range_backoff_start
, tvb
, offset
-tlv_value_offset
);
568 utemp
= tvb_get_uint8(tvb
, offset
);
569 proto_tree_add_uint_format_value(tlv_tree
, hf_ucd_initial_range_backoff_start
, tvb
, offset
, tvb_len
, utemp
, "2^%u = %u", utemp
, (1 << utemp
));
572 case UCD_TLV_T_199_INITIAL_RANGING_BACKOFF_END
:
574 tlv_tree
= add_tlv_subtree_no_item(&tlv_info
, ucd_tree
, hf_ucd_initial_range_backoff_end
, tvb
, offset
-tlv_value_offset
);
575 utemp
= tvb_get_uint8(tvb
, offset
);
576 proto_tree_add_uint_format_value(tlv_tree
, hf_ucd_initial_range_backoff_end
, tvb
, offset
, tvb_len
, utemp
, "2^%u = %u", utemp
, (1 << utemp
));
579 case UCD_TLV_T_200_BANDWIDTH_REQUESET_BACKOFF_START
:
581 tlv_tree
= add_tlv_subtree_no_item(&tlv_info
, ucd_tree
, hf_ucd_bandwidth_backoff_start
, tvb
, offset
-tlv_value_offset
);
582 utemp
= tvb_get_uint8(tvb
, offset
);
583 proto_tree_add_uint_format_value(tlv_tree
, hf_ucd_bandwidth_backoff_start
, tvb
, offset
, tvb_len
, utemp
, "2^%u = %u", utemp
, (1 << utemp
));
586 case UCD_TLV_T_201_BANDWIDTH_REQUEST_BACKOFF_END
:
588 tlv_tree
= add_tlv_subtree_no_item(&tlv_info
, ucd_tree
, hf_ucd_bandwidth_backoff_end
, tvb
, offset
-tlv_value_offset
);
589 utemp
= tvb_get_uint8(tvb
, offset
);
590 proto_tree_add_uint_format_value(tlv_tree
, hf_ucd_bandwidth_backoff_end
, tvb
, offset
, tvb_len
, utemp
, "2^%u = %u", utemp
, (1 << utemp
));
593 case UCD_TLV_T_202_UPLINK_BURST_PROFILE_FOR_MULTIPLE_FEC_TYPES
:
595 add_tlv_subtree(&tlv_info
, ucd_tree
, hf_ucd_tlv_t_202_uplink_burst_profile_for_multiple_fec_types
, tvb
, offset
-tlv_value_offset
, ENC_BIG_ENDIAN
);
598 case UCD_INITIAL_RANGING_CODES
:
600 add_tlv_subtree(&tlv_info
, ucd_tree
, hf_ucd_tlv_t_150_initial_ranging_codes
, tvb
, offset
-tlv_value_offset
, ENC_BIG_ENDIAN
);
603 case UCD_PERIODIC_RANGING_CODES
:
605 add_tlv_subtree(&tlv_info
, ucd_tree
, hf_ucd_tlv_t_151_periodic_ranging_codes
, tvb
, offset
-tlv_value_offset
, ENC_BIG_ENDIAN
);
608 case UCD_BANDWIDTH_REQUEST_CODES
:
610 add_tlv_subtree(&tlv_info
, ucd_tree
, hf_ucd_tlv_t_152_bandwidth_request_codes
, tvb
, offset
-tlv_value_offset
, ENC_BIG_ENDIAN
);
613 case UCD_PERIODIC_RANGING_BACKOFF_START
:
615 tlv_tree
= add_tlv_subtree_no_item(&tlv_info
, ucd_tree
, hf_ucd_periodic_ranging_backoff_start
, tvb
, offset
-tlv_value_offset
);
616 utemp
= tvb_get_uint8(tvb
, offset
);
617 proto_tree_add_uint_format_value(tlv_tree
, hf_ucd_periodic_ranging_backoff_start
, tvb
, offset
, tvb_len
, utemp
, "2^%u = %u", utemp
, (1 << utemp
));
621 case UCD_PERIODIC_RANGING_BACKOFF_END
:
623 tlv_tree
= add_tlv_subtree_no_item(&tlv_info
, ucd_tree
, hf_ucd_periodic_ranging_backoff_end
, tvb
, offset
-tlv_value_offset
);
624 utemp
= tvb_get_uint8(tvb
, offset
);
625 proto_tree_add_uint_format_value(tlv_tree
, hf_ucd_periodic_ranging_backoff_end
, tvb
, offset
, tvb_len
, utemp
, "2^%u = %u", utemp
, (1 << utemp
));
628 case UCD_START_OF_RANGING_CODES_GROUP
:
630 add_tlv_subtree(&tlv_info
, ucd_tree
, hf_ucd_tlv_t_155_start_of_ranging_codes_group
, tvb
, offset
-tlv_value_offset
, ENC_BIG_ENDIAN
);
634 case UCD_PERMUTATION_BASE
:
636 add_tlv_subtree(&tlv_info
, ucd_tree
, hf_ucd_tlv_t_156_permutation_base
, tvb
, offset
-tlv_value_offset
, ENC_BIG_ENDIAN
);
639 case UCD_UL_ALLOCATED_SUBCHANNELS_BITMAP
:
641 add_tlv_subtree(&tlv_info
, ucd_tree
, hf_ucd_ul_allocated_subchannles_bitmap
, tvb
, offset
-tlv_value_offset
, ENC_NA
);
644 case UCD_TLV_T_203_UL_PUSC_SUBCHANNEL_ROTATION
:
645 case UCD_TLV_T_205_RELATIVE_POWER_OFFSET_UL_HARQ_BURST
:
646 case UCD_TLV_T_206_RELATIVE_POWER_OFFSET_UL_BURST_CONTAINING_MAC_MGMT_MSG
:
647 case UCD_TLV_T_207_UL_INITIAL_TRANSMIT_TIMING
:
648 case UCD_TLV_T_210_FAST_FEEDBACK_REGION
:
649 case UCD_TLV_T_211_HARQ_ACK_REGION
:
650 case UCD_TLV_T_212_RANGING_REGION
:
651 case UCD_TLV_T_213_SOUNDING_REGION
:
653 /* Unknown TLV type if cor2 not enabled. */
654 if (!include_cor2_changes
)
656 add_tlv_subtree(&tlv_info
, ucd_tree
, hf_ucd_invalid_tlv
, tvb
, offset
-tlv_value_offset
, ENC_NA
);
662 add_tlv_subtree(&tlv_info
, ucd_tree
, hf_ucd_invalid_tlv
, tvb
, offset
-tlv_value_offset
, ENC_NA
);
664 } /* end of switch(tlv_type) */
666 } /* end of TLV process while loop */
668 return tvb_captured_length(tvb
);
671 /* Register Wimax Mac Payload Protocol and Dissector */
672 void proto_register_mac_mgmt_msg_ucd(void)
675 static hf_register_info hf
[] =
678 &hf_ucd_tlv_t_188_allow_aas_beam_select_message
,
680 "Allow AAS Beam Select Message", "wmx.ucd.allow_aas_beam_select_message",
681 FT_INT8
, BASE_DEC
, VALS(vals_yes_no_str
), 0, NULL
, HFILL
685 &hf_ucd_tlv_t_159_band_amc_allocation_threshold
,
687 "Band AMC Allocation Threshold", "wmx.ucd.band_amc.allocation_threshold",
688 FT_UINT8
, BASE_HEX
|BASE_UNIT_STRING
, UNS(&wimax_units_db
), 0, NULL
, HFILL
692 &hf_ucd_tlv_t_161_band_amc_allocation_timer
,
694 "Band AMC Allocation Timer", "wmx.ucd.band_amc.allocation_timer",
695 FT_UINT8
, BASE_HEX
|BASE_UNIT_STRING
, UNS(&wimax_units_frame_frames
), 0, NULL
, HFILL
699 &hf_ucd_tlv_t_160_band_amc_release_threshold
,
701 "Band AMC Release Threshold", "wmx.ucd.band_amc.release_threshold",
702 FT_UINT8
, BASE_HEX
|BASE_UNIT_STRING
, UNS(&wimax_units_db
), 0, NULL
, HFILL
706 &hf_ucd_tlv_t_162_band_amc_release_timer
,
708 "Band AMC Release Timer", "wmx.ucd.band_amc.release_timer",
709 FT_UINT8
, BASE_HEX
|BASE_UNIT_STRING
, UNS(&wimax_units_frame_frames
), 0, NULL
, HFILL
713 &hf_ucd_tlv_t_164_band_amc_retry_timer
,
715 "Band AMC Retry Timer", "wmx.ucd.band_amc.retry_timer",
716 FT_UINT8
, BASE_HEX
|BASE_UNIT_STRING
, UNS(&wimax_units_frame_frames
), 0, NULL
, HFILL
720 &hf_ucd_tlv_t_163_band_status_report_max_period
,
722 "Band Status Report MAC Period", "wmx.ucd.band_status.report_max_period",
723 FT_UINT8
, BASE_DEC
|BASE_UNIT_STRING
, UNS(&wimax_units_frame_frames
), 0, NULL
, HFILL
727 &hf_ucd_tlv_t_152_bandwidth_request_codes
,
729 "Bandwidth Request Codes", "wmx.ucd.bandwidth_request",
730 FT_UINT8
, BASE_HEX
, NULL
, 0, NULL
, HFILL
736 "FEC Code Type", "wmx.ucd.burst.fec",
737 FT_UINT8
, BASE_HEX
, VALS(vals_dcd_burst_fec
), 0, NULL
, HFILL
741 &hf_ucd_burst_ranging_data_ratio
,
743 "Ranging Data Ratio", "wmx.ucd.burst.ranging_data_ratio",
744 FT_UINT8
, BASE_DEC
|BASE_UNIT_STRING
, UNS(&wimax_units_db
), 0, NULL
, HFILL
748 &hf_ucd_ul_burst_reserved
,
750 "Reserved", "wmx.ucd.burst.reserved",
751 FT_UINT8
, BASE_HEX
, NULL
, 0xF0, NULL
, HFILL
755 &hf_ucd_ul_burst_uiuc
,
757 "UIUC", "wmx.ucd.burst.uiuc",
758 FT_UINT8
, BASE_DEC
, NULL
, 0x0F, NULL
, HFILL
763 &hf_ucd_burst_power_boost
,
764 {"Focused Contention Power Boost", "wmx.ucd.burst.power_boost", FT_UINT8
, BASE_HEX
|BASE_UNIT_STRING
, UNS(&wimax_units_db
), 0, NULL
, HFILL
}
767 &hf_ucd_burst_tcs_enable
,
768 {"TCS", "wmx.ucd.burst.tcs", FT_UINT8
, BASE_DEC
, VALS(vals_dcd_burst_tcs
), 0, NULL
, HFILL
}
774 "Bandwidth Request Opportunity Size", "wmx.ucd.bw_req_size",
775 FT_UINT16
, BASE_DEC
|BASE_UNIT_STRING
, UNS(&wimax_units_ps
), 0, NULL
, HFILL
779 &hf_ucd_tlv_t_172_cqich_band_amc_transition_delay
,
781 "CQICH Band AMC-Transition Delay", "wmx.ucd.cqich_band_amc_transition_delay",
782 FT_UINT8
, BASE_DEC
|BASE_UNIT_STRING
, UNS(&wimax_units_frame_frames
), 0, NULL
, HFILL
788 "Frequency", "wmx.ucd.frequency",
789 FT_UINT32
, BASE_DEC
|BASE_UNIT_STRING
, UNS(&wimax_units_khz
), 0, NULL
, HFILL
793 &hf_ucd_tlv_t_194_handover_ranging_codes
,
795 "Handover Ranging Codes", "wmx.ucd.handover_ranging_codes",
796 FT_INT8
, BASE_DEC
, NULL
, 0, NULL
, HFILL
800 &hf_ucd_tlv_t_171_harq_ack_delay_dl_burst
,
802 "HARQ ACK Delay for DL Burst", "wmx.ucd.harq_ack_delay_dl_burst",
803 FT_UINT8
, BASE_DEC
|BASE_UNIT_STRING
, UNS(&wimax_units_frame_offset
), 0, NULL
, HFILL
807 &hf_ucd_tlv_t_150_initial_ranging_codes
,
809 "Initial Ranging Codes", "wmx.ucd.initial_ranging_codes",
810 FT_UINT8
, BASE_HEX
, NULL
, 0, NULL
, HFILL
814 &hf_ucd_tlv_t_195_initial_ranging_interval
,
816 "Number of Frames Between Initial Ranging Interval Allocation", "wmx.ucd.initial_ranging_interval",
817 FT_INT8
, BASE_DEC
, NULL
, 0, NULL
, HFILL
823 "Invalid TLV", "wmx.ucd.invalid_tlv",
824 FT_BYTES
, BASE_NONE
, NULL
, 0, NULL
, HFILL
828 &hf_ucd_tlv_t_187_lower_bound_aas_preamble
,
830 "Lower Bound AAS Preamble (in units of 0.25 dB)", "wmx.ucd.lower_bound_aas_preamble",
831 FT_INT8
, BASE_DEC
, NULL
, 0, NULL
, HFILL
835 &hf_ucd_tlv_t_192_min_level_power_offset_adjustment
,
837 "Minimum Level of Power Offset Adjustment (in units of 0.1 dB)", "wmx.ucd.min_level_power_offset_adjustment",
838 FT_INT8
, BASE_DEC
, NULL
, 0, NULL
, HFILL
842 &hf_ucd_tlv_t_193_max_level_power_offset_adjustment
,
844 "Maximum Level of Power Offset Adjustment (in units of 0.1 dB)", "wmx.ucd.max_level_power_offset_adjustment",
845 FT_INT8
, BASE_DEC
, NULL
, 0, NULL
, HFILL
849 &hf_ucd_tlv_t_174_maximum_retransmission
,
851 "Maximum Number of Retransmission in UL-HARQ", "wmx.ucd.max_number_of_retransmission_in_ul_harq",
852 FT_UINT8
, BASE_DEC
, NULL
, 0, NULL
, HFILL
856 &hf_ucd_tlv_t_191_ms_specific_down_power_addjustment_step
,
858 "MS-specific Down Power Offset Adjustment Step (in units of 0.01 dB)", "wmx.ucd.ms_specific_down_power_offset_adjustment_step",
859 FT_UINT8
, BASE_HEX
, NULL
, 0, NULL
, HFILL
863 &hf_ucd_tlv_t_190_ms_specific_up_power_addjustment_step
,
865 "MS-specific Up Power Offset Adjustment Step (in units of 0.01 dB)", "wmx.ucd.ms_specific_up_power_offset_adjustment_step",
866 FT_UINT8
, BASE_HEX
, NULL
, 0, NULL
, HFILL
871 &hf_ucd_tlv_t_197_normalized_cn_channel_sounding
,
873 "Normalized C/N for Channel Sounding", "wmx.ucd.normalized_cn.channel_sounding",
874 FT_UINT8
, BASE_HEX
, NULL
, 0, NULL
, HFILL
879 &hf_ucd_tlv_t_177_normalized_cn_override2
,
881 "Normalized C/N Override 2", "wmx.ucd.normalized_cn.override_2",
882 FT_STRING
, BASE_NONE
, NULL
, 0, NULL
, HFILL
886 &hf_ucd_tlv_t_177_normalized_cn_override2_first_line
,
888 "Normalized C/N Value", "wmx.ucd.normalized_cn.override_first_line",
889 FT_UINT8
, BASE_HEX
, NULL
, 0, NULL
, HFILL
893 &hf_ucd_tlv_t_177_normalized_cn_override2_list
,
895 "Normalized C/N Value List", "wmx.ucd.normalized_cn.override_list",
896 FT_STRING
, BASE_NONE
, NULL
, 0, NULL
, HFILL
900 &hf_ucd_tlv_t_158_optional_permutation_ul_allocated_subchannels_bitmap
,
902 "Optional permutation UL allocated subchannels bitmap", "wmx.ucd.optional_permutation_ul_allocated_subchannels_bitmap",
903 FT_BYTES
, BASE_NONE
, NULL
, 0, NULL
, HFILL
907 &hf_ucd_tlv_t_151_periodic_ranging_codes
,
909 "Periodic Ranging Codes", "wmx.ucd.periodic_ranging_codes",
910 FT_UINT8
, BASE_HEX
, NULL
, 0, NULL
, HFILL
914 &hf_ucd_tlv_t_156_permutation_base
,
916 "Permutation Base", "wmx.ucd.permutation_base",
917 FT_UINT8
, BASE_DEC
, NULL
, 0, NULL
, HFILL
921 &hf_ucd_ranging_req_size
,
923 "Ranging Request Opportunity Size", "wmx.ucd.ranging_req_size",
924 FT_UINT16
, BASE_DEC
|BASE_UNIT_STRING
, UNS(&wimax_units_db
), 0, NULL
, HFILL
930 "Contention-based Reservation Timeout", "wmx.ucd.res_timeout",
931 FT_UINT8
, BASE_DEC
, NULL
, 0, NULL
, HFILL
935 &hf_ucd_tlv_t_170_safety_channel_retry_timer
,
937 "Safety Channel Release Timer", "wmx.ucd.safety_channel_release_timer",
938 FT_UINT8
, BASE_HEX
|BASE_UNIT_STRING
, UNS(&wimax_units_frame_frames
), 0, NULL
, HFILL
942 &hf_ucd_tlv_t_176_size_of_cqich_id_field
,
944 "Size of CQICH_ID Field", "wmx.ucd.size_of_cqich_id_field",
945 FT_UINT8
, BASE_DEC
, VALS(vals_ucd_cqich_size
), 0, NULL
, HFILL
949 &hf_ucd_tlv_t_155_start_of_ranging_codes_group
,
951 "Start of Ranging Codes Group", "wmx.ucd.start_of_ranging_codes_group",
952 FT_UINT8
, BASE_DEC
, NULL
, 0, NULL
, HFILL
956 &hf_ucd_ul_allocated_subchannles_bitmap
,
958 "UL Allocated Subchannels Bitmap", "wmx.ucd.subchan.bitmap",
959 FT_BYTES
, BASE_NONE
, NULL
, 0, NULL
, HFILL
964 &hf_ucd_subchan_codes
,
966 "Periodic Ranging Codes", "wmx.ucd.subchan.codes",
967 FT_UINT8
, BASE_HEX
, NULL
, 0, NULL
, HFILL
971 &hf_ucd_subchan_params_num_chan
,
973 "Number of Subchannels", "wmx.ucd.subchan.num_chan",
974 FT_UINT8
, BASE_DEC
, NULL
, 0, NULL
, HFILL
978 &hf_ucd_subchan_params_num_sym
,
980 "Number of OFDMA Symbols", "wmx.ucd.subchan.num_sym",
981 FT_UINT8
, BASE_DEC
, NULL
, 0, NULL
, HFILL
986 &hf_ucd_tlv_t_196_tx_power_report
,
988 "Tx Power Report", "wmx.ucd.tx_power_report",
989 FT_UINT24
, BASE_HEX
, NULL
, 0, NULL
, HFILL
993 &hf_ucd_tlv_t_196_tx_power_report_a_p_avg
,
995 "A p_avg (in multiples of 1/16)", "wmx.ucd.tx_power_report.a_p_avg",
996 FT_UINT8
, BASE_DEC
, NULL
, 0xF0, NULL
, HFILL
1000 &hf_ucd_tlv_t_196_tx_power_report_a_p_avg_icqch
,
1002 "A p_avg (in multiples of 1/16) when ICQCH is allocated", "wmx.ucd.tx_power_report.a_p_avg_icqch",
1003 FT_UINT8
, BASE_DEC
, NULL
, 0x0F, NULL
, HFILL
1007 &hf_ucd_tlv_t_196_tx_power_report_interval
,
1009 "Interval (expressed as power of 2)", "wmx.ucd.tx_power_report.interval",
1010 FT_UINT8
, BASE_DEC
, NULL
, 0x0F, NULL
, HFILL
1014 &hf_ucd_tlv_t_196_tx_power_report_interval_icqch
,
1016 "Interval When ICQCH is Allocated (expressed as power of 2)", "wmx.ucd.tx_power_report.interval_icqch",
1017 FT_UINT8
, BASE_DEC
, NULL
, 0xF0, NULL
, HFILL
1021 &hf_ucd_tlv_t_196_tx_power_report_threshold
,
1023 "Threshold", "wmx.ucd.tx_power_report.threshold",
1024 FT_UINT8
, BASE_DEC
, NULL
, 0xF0, NULL
, HFILL
1028 &hf_ucd_tlv_t_196_tx_power_report_threshold_icqch
,
1030 "Threshold When ICQCH is Allocated to SS (in dB)", "wmx.ucd.tx_power_report.threshold_icqch",
1031 FT_UINT8
, BASE_DEC
, NULL
, 0x0F, NULL
, HFILL
1036 &hf_ucd_unknown_type
,
1038 "Unknown UCD Type", "wmx.ucd.unknown_tlv_type",
1039 FT_BYTES
, BASE_NONE
, NULL
, 0, NULL
, HFILL
1044 &hf_ucd_tlv_t_202_uplink_burst_profile_for_multiple_fec_types
,
1046 "Uplink Burst Profile for Multiple FEC Types", "wmx.ucd.uplink_burst_profile.multiple_fec_types",
1047 FT_UINT8
, BASE_HEX
, NULL
, 0, NULL
, HFILL
1051 &hf_ucd_tlv_t_203_ul_pusc_subchannel_rotation
,
1053 "Uplink PUSC Subchannel Rotation", "wmx.ucd.uplink_burst_profile.ul_pusc_subchannel_rotation",
1054 FT_UINT8
, BASE_HEX
, NULL
, 0, NULL
, HFILL
1058 &hf_ucd_tlv_t_205_relative_power_offset_ul_harq_burst
,
1060 "Relative Power Offset UL HARQ Burst", "wmx.ucd.uplink_burst_profile.relative_power_offset_ul_harq_burst",
1061 FT_UINT8
, BASE_HEX
, NULL
, 0, NULL
, HFILL
1065 &hf_ucd_tlv_t_206_relative_power_offset_ul_burst_containing_mac_mgmt_msg
,
1067 "Relative Power Offset UL Burst Containing MAC Mgmt Msg", "wmx.ucd.uplink_burst_profile.relative_power_offset_ul_burst_mac_mgmt_msg",
1068 FT_UINT8
, BASE_HEX
, NULL
, 0, NULL
, HFILL
1072 &hf_ucd_tlv_t_207_ul_initial_transmit_timing
,
1074 "UL Initial Transmit Timing", "wmx.ucd.uplink_burst_profile.ul_initial_transmit_timing",
1075 FT_UINT8
, BASE_HEX
, NULL
, 0, NULL
, HFILL
1079 &hf_ucd_tlv_t_210_fast_feedback_region
,
1081 "Fast Feedback Region", "wmx.ucd.uplink_burst_profile.fast_feedback_region",
1082 FT_BYTES
, BASE_NONE
, NULL
, 0, NULL
, HFILL
1086 &hf_ucd_tlv_t_211_harq_ack_region
,
1088 "HARQ ACK Region", "wmx.ucd.uplink_burst_profile.harq_ack_region",
1089 FT_BYTES
, BASE_NONE
, NULL
, 0, NULL
, HFILL
1093 &hf_ucd_tlv_t_212_ranging_region
,
1095 "Ranging Region", "wmx.ucd.uplink_burst_profile.ranging_region",
1096 FT_BYTES
, BASE_NONE
, NULL
, 0, NULL
, HFILL
1100 &hf_ucd_tlv_t_213_sounding_region
,
1102 "Sounding Region", "wmx.ucd.uplink_burst_profile.sounding_region",
1103 FT_BYTES
, BASE_NONE
, NULL
, 0, NULL
, HFILL
1107 &hf_ucd_tlv_t_186_upper_bound_aas_preamble
,
1109 "Upper Bound AAS Preamble (in units of 0.25 dB)", "wmx.ucd.upper_bound_aas_preamble",
1110 FT_INT8
, BASE_DEC
, NULL
, 0, NULL
, HFILL
1114 &hf_ucd_tlv_t_189_use_cqich_indication_flag
,
1116 "Use CQICH Indication Flag", "wmx.ucd.use_cqich_indication_flag",
1117 FT_UINT8
, BASE_HEX
, NULL
, 0, NULL
, HFILL
1121 &hf_ucd_ho_ranging_start
,
1123 "Initial Backoff Window Size for MS Performing Initial During Handover Process", "wmx.ucd.ho_ranging_start",
1124 FT_UINT8
, BASE_DEC
, NULL
, 0, NULL
, HFILL
1128 &hf_ucd_ho_ranging_end
,
1130 "Final Backoff Window Size for MS Performing Initial During Handover Process", "wmx.ucd.ho_ranging_end",
1131 FT_UINT8
, BASE_DEC
, NULL
, 0, NULL
, HFILL
1135 &hf_ucd_initial_range_backoff_start
,
1137 "Initial Ranging Backoff Start", "wmx.ucd.initial_range_backoff_start",
1138 FT_UINT8
, BASE_DEC
, NULL
, 0, NULL
, HFILL
1142 &hf_ucd_initial_range_backoff_end
,
1144 "Initial Ranging Backoff End", "wmx.ucd.initial_range_backoff_end",
1145 FT_UINT8
, BASE_DEC
, NULL
, 0, NULL
, HFILL
1149 &hf_ucd_bandwidth_backoff_start
,
1151 "Bandwidth Request Backoff Start", "wmx.ucd.bandwidth_backoff_start",
1152 FT_UINT8
, BASE_DEC
, NULL
, 0, NULL
, HFILL
1156 &hf_ucd_bandwidth_backoff_end
,
1158 "Bandwidth Request Backoff End", "wmx.ucd.bandwidth_backoff_end",
1159 FT_UINT8
, BASE_DEC
, NULL
, 0, NULL
, HFILL
1163 &hf_ucd_periodic_ranging_backoff_start
,
1165 "Periodic Ranging Backoff Start", "wmx.ucd.periodic_ranging_backoff_start",
1166 FT_UINT8
, BASE_DEC
, NULL
, 0, NULL
, HFILL
1170 &hf_ucd_periodic_ranging_backoff_end
,
1172 "Periodic Ranging Backoff End", "wmx.ucd.periodic_ranging_backoff_end",
1173 FT_UINT8
, BASE_DEC
, NULL
, 0, NULL
, HFILL
1177 &hf_ucd_config_change_count
,
1179 "Configuration Change Count", "wmx.ucd.config_change_count",
1180 FT_UINT8
, BASE_DEC
, NULL
, 0, NULL
, HFILL
1184 &hf_ucd_ranging_backoff_start
,
1186 "Ranging Backoff Start", "wmx.ucd.ranging_backoff_start",
1187 FT_UINT8
, BASE_DEC
, NULL
, 0, NULL
, HFILL
1191 &hf_ucd_ranging_backoff_end
,
1193 "Ranging Backoff End", "wmx.ucd.ranging_backoff_end",
1194 FT_UINT8
, BASE_DEC
, NULL
, 0, NULL
, HFILL
1198 &hf_ucd_request_backoff_start
,
1200 "Request Backoff Start", "wmx.ucd.request_backoff_start",
1201 FT_UINT8
, BASE_DEC
, NULL
, 0, NULL
, HFILL
1205 &hf_ucd_request_backoff_end
,
1207 "Request Backoff End", "wmx.ucd.request_backoff_end",
1208 FT_UINT8
, BASE_DEC
, NULL
, 0, NULL
, HFILL
1213 /* Setup protocol subtree array */
1216 &ett_mac_mgmt_msg_ucd_decoder
,
1219 proto_mac_mgmt_msg_ucd_decoder
= proto_register_protocol (
1220 "WiMax UCD Messages", /* name */
1221 "WiMax UCD", /* short name */
1222 "wmx.ucd" /* abbrev */
1225 proto_register_field_array(proto_mac_mgmt_msg_ucd_decoder
, hf
, array_length(hf
));
1226 proto_register_subtree_array(ett
, array_length(ett
));
1227 ucd_handle
= register_dissector("mac_mgmt_msg_ucd_handler", dissect_mac_mgmt_msg_ucd_decoder
, proto_mac_mgmt_msg_ucd_decoder
);
1230 void proto_reg_handoff_mac_mgmt_msg_ucd(void)
1232 dissector_add_uint("wmx.mgmtmsg", MAC_MGMT_MSG_UCD
, ucd_handle
);
1236 * Editor modelines - https://www.wireshark.org/tools/modelines.html
1241 * indent-tabs-mode: t
1244 * vi: set shiftwidth=8 tabstop=8 noexpandtab:
1245 * :indentSize=8:tabSize=8:noTabs=false: