Revert "TODO epan/dissectors/asn1/kerberos/packet-kerberos-template.c new GSS flags"
[wireshark-sm.git] / plugins / epan / wimax / msg_ucd.c
blob0779f4ab5f619a95e476541790bd5fa430b8dc00
1 /* msg_ucd.c
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
15 /* Include files */
17 #include "config.h"
20 #define DEBUG
23 #include <epan/packet.h>
24 #include <epan/tfs.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;
43 /* fix fields */
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;
125 #if 0
126 static const value_string vals_dcd_burst_tcs[] =
128 {0, "TCS disabled"},
129 {1, "TCS enabled"},
130 {0, NULL}
132 #endif
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"},
150 {14, "Reserved"},
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"},
189 {0, NULL}
192 static const value_string vals_ucd_cqich_size[] =
194 {0, "0 bits"},
195 {1, "3 bits"},
196 {2, "4 bits"},
197 {3, "5 bits"},
198 {4, "6 bits"},
199 {5, "7 bits"},
200 {6, "8 bits"},
201 {7, "9 bits"},
202 {0, NULL}
205 static const value_string vals_yes_no_str[] =
207 {0, "No"},
208 {1, "Yes"},
209 {0, NULL}
213 /* UCD dissector */
214 static int dissect_mac_mgmt_msg_ucd_decoder(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_)
216 unsigned offset = 0;
217 unsigned tvb_len, length;
218 int tlv_type, tlv_len, tlv_offset, tlv_value_offset;
219 tlv_info_t tlv_info;
220 char* proto_str;
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);
238 offset++;
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));
243 offset++;
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));
248 offset++;
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));
253 offset++;
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));
258 offset++;
260 while(offset < tvb_len)
262 proto_tree *tlv_tree;
263 proto_item *tlv_item1;
264 unsigned ul_burst_uiuc;
265 unsigned utemp;
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);
276 break;
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);
282 #endif
283 /* update the offset */
284 offset += tlv_value_offset;
285 /* process UCD TLV Encoded information */
286 if (include_cor2_changes)
288 switch (tlv_type)
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);
293 break;
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);
298 break;
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);
303 break;
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);
308 break;
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);
313 break;
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);
318 break;
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);
323 break;
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);
328 break;
332 switch (tlv_type)
334 case UCD_UPLINK_BURST_PROFILE:
336 /* get the UIUC */
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);
348 if(tlv_type == -1)
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);
352 break;
354 /* get the TLV length */
355 length = get_tlv_length(&tlv_info);
357 switch (tlv_type)
359 case UCD_BURST_FEC:
361 add_tlv_subtree(&tlv_info, tlv_tree, hf_ucd_burst_fec, tvb, (offset+tlv_offset), ENC_BIG_ENDIAN);
362 break;
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);
367 break;
369 #if 0 /* for OFDM */
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);
373 break;
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);
378 break;
380 #endif
381 default:
382 /* ??? */
383 break;
385 tlv_offset += (length+get_tlv_value_offset(&tlv_info));
387 break;
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);
392 break;
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);
397 break;
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);
402 break;
404 case UCD_FREQUENCY:
406 add_tlv_subtree(&tlv_info, ucd_tree, hf_ucd_freq, tvb, offset-tlv_value_offset, ENC_BIG_ENDIAN);
407 break;
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));
414 break;
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));
421 break;
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);
426 break;
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);
431 break;
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);
436 break;
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);
441 break;
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);
446 break;
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);
451 break;
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);
456 break;
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);
461 break;
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);
466 break;
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);
471 break;
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);
476 break;
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);
487 break;
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);
496 break;
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);
501 break;
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);
506 break;
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);
511 break;
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);
516 break;
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);
521 break;
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);
526 break;
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);
531 break;
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);
536 break;
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);
541 break;
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);
546 break;
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);
558 break;
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);
563 break;
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));
570 break;
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));
577 break;
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));
584 break;
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));
591 break;
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);
596 break;
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);
601 break;
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);
606 break;
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);
611 break;
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));
618 break;
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));
626 break;
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);
631 break;
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);
637 break;
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);
642 break;
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);
658 break;
660 default:
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) */
665 offset += tlv_len;
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)
674 /* UCD display */
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
734 &hf_ucd_burst_fec,
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
761 #if 0
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}
770 #endif
772 &hf_ucd_bw_req_size,
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
786 &hf_ucd_freq,
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
821 &hf_ucd_invalid_tlv,
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
869 #if 0
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
877 #endif
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
928 &hf_ucd_res_timeout,
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
962 #if 0
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
984 #endif
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
1034 #if 0
1036 &hf_ucd_unknown_type,
1038 "Unknown UCD Type", "wmx.ucd.unknown_tlv_type",
1039 FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL
1042 #endif
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 */
1214 static int *ett[] =
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
1238 * Local variables:
1239 * c-basic-offset: 8
1240 * tab-width: 8
1241 * indent-tabs-mode: t
1242 * End:
1244 * vi: set shiftwidth=8 tabstop=8 noexpandtab:
1245 * :indentSize=8:tabSize=8:noTabs=false: