aboutsummaryrefslogtreecommitdiffstats
path: root/plugins/epan/wimax/mac_hd_type2_decoder.c
diff options
context:
space:
mode:
authorJoão Valverde <joao.valverde@tecnico.ulisboa.pt>2018-01-15 12:40:55 +0000
committerJoão Valverde <j@v6e.pt>2018-01-16 08:51:37 +0000
commit5352ef42f94b5c14a24eb2e5559440c71fdcae8f (patch)
tree22901b1d228d76360b22af10021564bcee36390e /plugins/epan/wimax/mac_hd_type2_decoder.c
parenta069a4f856c29b25bae05f2a91d7b2b71e1905f3 (diff)
plugins: Add source tree subfolder for plugin library
This allows some simplification and makes things more consistent, particularly for loading plugins from the build dir. Also fixes the issue reported here: https://www.wireshark.org/lists/wireshark-dev/201801/msg00061.html Change-Id: I0d8a000ee679172bccad546a3b0c47a79486f44d Reviewed-on: https://code.wireshark.org/review/25329 Petri-Dish: João Valverde <j@v6e.pt> Reviewed-by: João Valverde <j@v6e.pt>
Diffstat (limited to 'plugins/epan/wimax/mac_hd_type2_decoder.c')
-rw-r--r--plugins/epan/wimax/mac_hd_type2_decoder.c1382
1 files changed, 1382 insertions, 0 deletions
diff --git a/plugins/epan/wimax/mac_hd_type2_decoder.c b/plugins/epan/wimax/mac_hd_type2_decoder.c
new file mode 100644
index 0000000000..4cb74c96b6
--- /dev/null
+++ b/plugins/epan/wimax/mac_hd_type2_decoder.c
@@ -0,0 +1,1382 @@
+/* mac_hd_type2_decoder.c
+ * WiMax MAC Type II Signaling Header decoder
+ *
+ * Copyright (c) 2007 by Intel Corporation.
+ *
+ * Author: Lu Pan <lu.pan@intel.com>
+ *
+ * Wireshark - Network traffic analyzer
+ * By Gerald Combs <gerald@wireshark.org>
+ * Copyright 1999 Gerald Combs
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+/* TODO: Add FT_UINT24 and FT_INT24 cases to gtk_widget_get_toplevel()
+ * to prevent having to make all the changes from BASE_DEC to BASE_HEX
+ * made to this file today: 10/20/06.
+ */
+
+/*
+#define DEBUG
+*/
+
+/* Include files */
+
+#include "config.h"
+
+#include <epan/packet.h>
+#include "wimax-int.h"
+
+extern gint proto_mac_header_generic_decoder;
+
+static gint proto_mac_header_type_2_decoder = -1;
+static gint ett_mac_header_type_2_decoder = -1;
+static gint hf_mac_header_type_2_value_bytes = -1;
+
+#define WIMAX_MAC_HEADER_SIZE 6
+
+/* WiMax MAC Header Type II Feedback Types */
+typedef enum
+{
+ CQI_MIMO_FB, /* 0 */
+ DL_AVG_CINR, /* 1 */
+ MIMO_COEF_FB, /* 2 */
+ PREF_DL_CHAN_DIUC_FB,/* 3 */
+ UL_TX_PWR, /* 4 */
+ PHY_CHAN_FB, /* 5 */
+ AMC_BAND_BITMAP, /* 6 */
+ SHORT_PRECODE_FB, /* 7 */
+ MULTI_TYPES_FB, /* 8 */
+ LONG_PRECODE_FB, /* 9 */
+ COMB_DL_AVG_CINR, /* 10 */
+ MIMO_CHAN_FB, /* 11 */
+ CINR_FB, /* 12 */
+ CL_MIMO_FB, /* 13 */
+ TYPE_II_FB_TYPE_MAX
+} TYPE_II_FB_TYPE_e;
+
+static const char *type2_fb_type_abbrv[TYPE_II_FB_TYPE_MAX] =
+{
+ "CQI and MIMO Feedback",
+ "DL average CINR",
+ "MIMO Coefficients Feedback",
+ "Preferred DL Channel DIUC Feedback",
+ "UL Transmission Power",
+ "PHY Channel Feedback",
+ "AMC Band Indication Bitmap",
+ "Life Span of Short-term Precoding Feedback",
+ "Multiple Types of Feedback",
+ "Long-term Precoding Feedback",
+ "Combined DL Average CINR of Active BSs",
+ "MIMO Channel Feedback",
+ "CINR Feedback",
+ "Close-loop MIMO Feedback"
+};
+
+/* WIMAX MAC HEADER TYPE II FILEDS */
+/* first byte */
+#define WIMAX_MAC_HEADER_TYPE_2_HT 0x80
+#define WIMAX_MAC_HEADER_TYPE_2_EC 0x40
+#define WIMAX_MAC_HEADER_TYPE_2_TYPE 0x20
+#define WIMAX_MAC_HEADER_TYPE_2_CII 0x10
+#define WIMAX_MAC_HEADER_TYPE_2_FB_TYPE 0x0F
+static int hf_mac_header_type_2_ht = -1;
+static int hf_mac_header_type_2_ec = -1;
+static int hf_mac_header_type_2_type = -1;
+static int hf_mac_header_type_2_cii = -1;
+static int hf_mac_header_type_2_fb_type = -1;
+
+/* 2nd to 5th bytes (varies by different fb types) */
+static int hf_mac_header_type_2_cid = -1;
+static int hf_mac_header_type_2_no_cid = -1;
+/* CQI and MIMO Feedback */
+/* 2nd & 3rd bytes */
+#define WIMAX_MAC_HEADER_TYPE_2_CQI_FB_TYPE 0xE000
+#define WIMAX_MAC_HEADER_TYPE_2_CQI_PAYLOAD 0x1F80
+#define WIMAX_MAC_HEADER_TYPE_2_CQI_RSV 0x007F
+static int hf_mac_header_type_2_cqi_fb_type = -1;
+static int hf_mac_header_type_2_cqi_payload = -1;
+static int hf_mac_header_type_2_cqi_rsv = -1;
+/* 4th & 5th without CID */
+/*#define WIMAX_MAC_HEADER_TYPE_2_NO_CID 0xFFFF*/
+
+/* DL average CINR */
+/* 2nd byte */
+#define WIMAX_MAC_HEADER_TYPE_2_DL_AVE_CINR 0xF800
+#define WIMAX_MAC_HEADER_TYPE_2_DL_AVE_RSV 0x07FF
+static int hf_mac_header_type_2_dl_ave_cinr = -1;
+static int hf_mac_header_type_2_dl_ave_rsv = -1;
+
+/* MIMO Coefficients Feedback */
+/* 2nd & 3rd bytes */
+#define WIMAX_MAC_HEADER_TYPE_2_MIMO_COEF_NI 0xC000
+#define WIMAX_MAC_HEADER_TYPE_2_MIMO_COEF_AI 0x3000
+#define WIMAX_MAC_HEADER_TYPE_2_MIMO_COEF 0x0F80
+#define WIMAX_MAC_HEADER_TYPE_2_MIMO_COEF_RSV 0x007F
+static int hf_mac_header_type_2_mimo_coef_ni = -1;
+static int hf_mac_header_type_2_mimo_coef_ai = -1;
+static int hf_mac_header_type_2_mimo_coef = -1;
+static int hf_mac_header_type_2_mimo_coef_rsv = -1;
+
+/* Preferred DL Channel DIUC Feedback */
+/* 2nd byte */
+#define WIMAX_MAC_HEADER_TYPE_2_DL_CHAN_DIUC 0xF000
+#define WIMAX_MAC_HEADER_TYPE_2_DL_CHAN_DCD 0x0F00
+#define WIMAX_MAC_HEADER_TYPE_2_DL_CHAN_RSV 0x00FF
+static int hf_mac_header_type_2_dl_chan_diuc = -1;
+static int hf_mac_header_type_2_dl_chan_dcd = -1;
+static int hf_mac_header_type_2_dl_chan_rsv = -1;
+
+/* UL Transmission Power */
+/* 2nd byte */
+#define WIMAX_MAC_HEADER_TYPE_2_UL_TX_PWR 0xFF00
+#define WIMAX_MAC_HEADER_TYPE_2_UL_TX_PWR_RSV 0x00FF
+static int hf_mac_header_type_2_ul_tx_pwr = -1;
+static int hf_mac_header_type_2_ul_tx_pwr_rsv = -1;
+
+/* PHY Channel Feedback */
+/* 2nd to 4th bytes */
+#define WIMAX_MAC_HEADER_TYPE_2_PHY_DIUC 0xF00000
+#define WIMAX_MAC_HEADER_TYPE_2_PHY_UL_TX_PWR 0x0FF000
+#define WIMAX_MAC_HEADER_TYPE_2_PHY_UL_HDRM 0x000FC0
+#define WIMAX_MAC_HEADER_TYPE_2_PHY_RSV 0x00003F
+static int hf_mac_header_type_2_phy_diuc = -1;
+static int hf_mac_header_type_2_phy_ul_tx_pwr = -1;
+static int hf_mac_header_type_2_phy_ul_hdrm = -1;
+static int hf_mac_header_type_2_phy_rsv = -1;
+
+/* AMC Band Indication Bitmap */
+/* 2nd to 5th bytes */
+#define WIMAX_MAC_HEADER_TYPE_2_AMC_BITMAP 0xFFF00000
+#define WIMAX_MAC_HEADER_TYPE_2_AMC_CQI_1 0x000F8000
+#define WIMAX_MAC_HEADER_TYPE_2_AMC_CQI_2 0x00007C00
+#define WIMAX_MAC_HEADER_TYPE_2_AMC_CQI_3 0x000003E0
+#define WIMAX_MAC_HEADER_TYPE_2_AMC_CQI_4 0x0000001F
+static int hf_mac_header_type_2_amc_bitmap = -1;
+static int hf_mac_header_type_2_amc_cqi_1 = -1;
+static int hf_mac_header_type_2_amc_cqi_2 = -1;
+static int hf_mac_header_type_2_amc_cqi_3 = -1;
+static int hf_mac_header_type_2_amc_cqi_4 = -1;
+
+/* Life Span of Short-term Precoding Feedback */
+/* 2nd byte */
+#define WIMAX_MAC_HEADER_TYPE_2_LIFE_SPAN 0xF000
+#define WIMAX_MAC_HEADER_TYPE_2_LIFE_SPAN_RSV 0x0FFF
+static int hf_mac_header_type_2_life_span = -1;
+static int hf_mac_header_type_2_life_span_rsv = -1;
+
+/* Multiple Types of Feedback */
+/* 2nd to 5th bytes ??? */
+#define WIMAX_MAC_HEADER_TYPE_2_MT_NUM_FB_TYPES 0xC0000000
+#define WIMAX_MAC_HEADER_TYPE_2_MT_OCCU_FB_TYPE 0x3C000000
+#define WIMAX_MAC_HEADER_TYPE_2_MT_FB_CONTENTS 0x03FFFFFF
+static int hf_mac_header_type_2_mt_num_fb_types = -1;
+static int hf_mac_header_type_2_mt_occu_fb_type = -1;
+static int hf_mac_header_type_2_mt_fb_contents = -1;
+
+/* Long-term Precoding Feedback */
+/* 2nd & 3rd bytes */
+#define WIMAX_MAC_HEADER_TYPE_2_LT_ID_FB 0xFC00
+#define WIMAX_MAC_HEADER_TYPE_2_LT_RANK 0x0300
+#define WIMAX_MAC_HEADER_TYPE_2_LT_FEC_QAM 0x00FC
+#define WIMAX_MAC_HEADER_TYPE_2_LT_RSV 0x0003
+static int hf_mac_header_type_2_lt_id_fb = -1;
+static int hf_mac_header_type_2_lt_rank = -1;
+static int hf_mac_header_type_2_lt_fec_qam = -1;
+static int hf_mac_header_type_2_lt_rsv = -1;
+
+/* Combined DL Average CINR of Active BSs */
+/* 2nd & 3rd bytes */
+#define WIMAX_MAC_HEADER_TYPE_2_COMB_DL_AVE 0xF800
+#define WIMAX_MAC_HEADER_TYPE_2_COMB_DL_RSV 0x0EFF
+static int hf_mac_header_type_2_comb_dl_ave = -1;
+static int hf_mac_header_type_2_comb_dl_rsv = -1;
+
+/* MIMO Channel Feedback */
+/* 2nd byte */
+#define WIMAX_MAC_HEADER_TYPE_2_DIUC 0xF0
+#define WIMAX_MAC_HEADER_TYPE_2_PBWI 0x0F
+/* 3rd to 5th bytes with CID */
+#define WIMAX_MAC_HEADER_TYPE_2_SLPB 0xFE0000
+#define WIMAX_MAC_HEADER_TYPE_2_PBRI_CID 0x010000
+#define WIMAX_MAC_HEADER_TYPE_2_CID 0x00FFFF
+/* 3rd to 5th bytes without CID */
+#define WIMAX_MAC_HEADER_TYPE_2_PBRI 0x018000
+#define WIMAX_MAC_HEADER_TYPE_2_CTI 0x007000
+#define WIMAX_MAC_HEADER_TYPE_2_AI_0 0x000800
+#define WIMAX_MAC_HEADER_TYPE_2_AI_1 0x000400
+#define WIMAX_MAC_HEADER_TYPE_2_AI_2 0x000200
+#define WIMAX_MAC_HEADER_TYPE_2_AI_3 0x000100
+#define WIMAX_MAC_HEADER_TYPE_2_MI 0x0000C0
+#define WIMAX_MAC_HEADER_TYPE_2_CT 0x000020
+#define WIMAX_MAC_HEADER_TYPE_2_CQI 0x00001F
+static int hf_mac_header_type_2_mimo_diuc = -1;
+static int hf_mac_header_type_2_mimo_pbwi = -1;
+static int hf_mac_header_type_2_mimo_slpb = -1;
+static int hf_mac_header_type_2_mimo_bpri = -1;
+static int hf_mac_header_type_2_mimo_bpri_cid = -1;
+static int hf_mac_header_type_2_mimo_cid = -1;
+static int hf_mac_header_type_2_mimo_cti = -1;
+static int hf_mac_header_type_2_mimo_ai_0 = -1;
+static int hf_mac_header_type_2_mimo_ai_1 = -1;
+static int hf_mac_header_type_2_mimo_ai_2 = -1;
+static int hf_mac_header_type_2_mimo_ai_3 = -1;
+static int hf_mac_header_type_2_mimo_mi = -1;
+static int hf_mac_header_type_2_mimo_ct = -1;
+static int hf_mac_header_type_2_mimo_cqi = -1;
+
+/* CINR Feedback */
+/* 2nd byte */
+/*#define WIMAX_MAC_HEADER_TYPE_2_CINR_MEAN 0xFF*/
+/* 3rd byte */
+/*#define WIMAX_MAC_HEADER_TYPE_2_CINR_DEVI 0xFF*/
+static int hf_mac_header_type_2_cinr_mean = -1;
+static int hf_mac_header_type_2_cinr_devi = -1;
+
+/* Close-loop MIMO Feedback */
+/* 2nd & 3rd bytes */
+#define WIMAX_MAC_HEADER_TYPE_2_CL_MIMO_TYPE 0xC000
+#define WIMAX_MAC_HEADER_TYPE_2_CL_MIMO_ANT_ID 0x3C00
+#define WIMAX_MAC_HEADER_TYPE_2_CL_MIMO_CQI 0x03E0
+#define WIMAX_MAC_HEADER_TYPE_2_CL_MIMO_RSV 0x008F
+#define WIMAX_MAC_HEADER_TYPE_2_CL_MIMO_STREAMS 0x3000
+#define WIMAX_MAC_HEADER_TYPE_2_CL_MIMO_ANT_SEL 0x0E00
+#define WIMAX_MAC_HEADER_TYPE_2_CL_MIMO_CQI_1 0x01F0
+#define WIMAX_MAC_HEADER_TYPE_2_CL_MIMO_RSV_1 0x000F
+#define WIMAX_MAC_HEADER_TYPE_2_CL_MIMO_CODEBOOK_ID 0x3F00
+#define WIMAX_MAC_HEADER_TYPE_2_CL_MIMO_CQI_2 0x00F8
+#define WIMAX_MAC_HEADER_TYPE_2_CL_MIMO_RSV_2 0x000E
+static int hf_mac_header_type_2_cl_mimo_type = -1;
+static int hf_mac_header_type_2_cl_mimo_ant_id = -1;
+static int hf_mac_header_type_2_cl_mimo_cqi = -1;
+static int hf_mac_header_type_2_cl_mimo_cqi_1 = -1;
+static int hf_mac_header_type_2_cl_mimo_cqi_2 = -1;
+static int hf_mac_header_type_2_cl_mimo_rsv = -1;
+static int hf_mac_header_type_2_cl_mimo_rsv_1 = -1;
+static int hf_mac_header_type_2_cl_mimo_rsv_2 = -1;
+static int hf_mac_header_type_2_cl_mimo_streams = -1;
+static int hf_mac_header_type_2_cl_mimo_ant_sel = -1;
+static int hf_mac_header_type_2_cl_mimo_codebook_id = -1;
+
+/* last byte */
+/*#define WIMAX_MAC_HEADER_TYPE_2_HCS 0xFF*/
+static int hf_mac_header_type_2_hcs = -1;
+
+/* CID Inclusion Indication messages */
+static const value_string cii_msgs[] =
+{
+ { 0, "without CID" },
+ { 1, "with CID" },
+ { 0, NULL}
+};
+
+/* Feedback Types */
+static const value_string fb_types[] =
+{
+ { 0, "CQI and MIMO Feedback" },
+ { 1, "DL average CINR" },
+ { 2, "MIMO Coefficients Feedback" },
+ { 3, "Preferred DL Channel DIUC Feedback" },
+ { 4, "UL Transmission Power" },
+ { 5, "PHY Channel Feedback" },
+ { 6, "AMC Band Indication Bitmap" },
+ { 7, "Life Span of Short-term Precoding Feedback" },
+ { 8, "Multiple Types of Feedback" },
+ { 9, "Long-term Precoding Feedback" },
+ { 10, "Combined DL Average CINR of Active BSs" },
+ { 11, "MIMO Channel Feedback" },
+ { 12, "CINR Feedback" },
+ { 13, "Close-loop MIMO Feedback" },
+ { 14, "Reserved" },
+ { 15, "Reserved" },
+ { 0, NULL}
+};
+
+/* Table of the Preferred Bandwidth Ratio of bandwidth over used channel bandwidth */
+static const value_string pbwi_table[] =
+{
+ { 0, "1" },
+ { 1, "3/4" },
+ { 2, "2/3" },
+ { 3, "1/2" },
+ { 4, "1/3" },
+ { 5, "1/4" },
+ { 6, "1/5" },
+ { 7, "1/6" },
+ { 8, "1/8" },
+ { 9, "1/10" },
+ { 10, "1/12" },
+ { 11, "1/16" },
+ { 12, "1/24" },
+ { 13, "1/32" },
+ { 14, "1/48" },
+ { 15, "1/64" },
+ { 0, NULL}
+};
+
+/* Burst Profile Ranking Indicator table */
+static const value_string bpri_table[] =
+{
+ { 0, "1st preferred burst profile" },
+ { 1, "2nd preferred burst profile" },
+ { 2, "3rd preferred burst profile" },
+ { 3, "4th preferred burst profile" },
+ { 0, NULL}
+};
+
+/* Coherent Time Index Table */
+static const value_string cti_table[] =
+{
+ { 0, "Infinite" },
+ { 1, "1 frame" },
+ { 2, "2 frames" },
+ { 3, "3 frames" },
+ { 4, "4 frames" },
+ { 5, "8 frames" },
+ { 6, "14 frames" },
+ { 7, "24 frames" },
+ { 0, NULL}
+};
+
+/* The MS Matrix Index Table */
+static const value_string mi_table[] =
+{
+ { 0, "No STC" },
+ { 1, "Matrix A" },
+ { 2, "Matrix B" },
+ { 3, "Matrix C" },
+ { 0, NULL}
+};
+
+/* CQI Feedback Types */
+static const value_string ct_msgs[] =
+{
+ { 0, "DL average feedback" },
+ { 1, "CQI feedback" },
+ { 0, NULL}
+};
+
+/* Antenna Indication messages */
+static const value_string ai_msgs[] =
+{
+ { 0, "Not applicable" },
+ { 1, "Applicable" },
+ { 0, NULL}
+};
+
+
+static int dissect_mac_header_type_2_decoder(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_)
+{
+ gint tvb_len, offset = 0;
+ guint cii_bit, first_byte, fb_type, mimo_type;
+ proto_item *parent_item = NULL;
+ proto_item *ti = NULL;
+ proto_tree *ti_tree = NULL;
+
+ { /* we are being asked for details */
+ /* Get the tvb reported length */
+ tvb_len = tvb_reported_length(tvb);
+ /* display the MAC Type II Header message */
+ ti = proto_tree_add_protocol_format(tree, proto_mac_header_type_2_decoder, tvb, offset, tvb_len, "Mac Type II Header (6 bytes)");
+ /* add subtree */
+ ti_tree = proto_item_add_subtree(ti, ett_mac_header_type_2_decoder);
+ if(tvb_len < WIMAX_MAC_HEADER_SIZE)
+ {
+ /* display the error message */
+ proto_tree_add_protocol_format(ti_tree, proto_mac_header_type_2_decoder, tvb, offset, tvb_len, "Error: the size of Mac Header Type II tvb is too small! (%u bytes)", tvb_len);
+ /* display the MAC Type II Header in Hex */
+ proto_tree_add_item(ti_tree, hf_mac_header_type_2_value_bytes, tvb, offset, tvb_len, ENC_NA);
+ return tvb_captured_length(tvb);
+ }
+#ifdef DEBUG
+ /* update the info column */
+ col_append_sep_str(pinfo->cinfo, COL_INFO, NULL, "MAC Signaling Header Type II");
+#endif
+ /* get the parent */
+ parent_item = proto_tree_get_parent(tree);
+ /* Decode and display the first byte of the header */
+ /* header type */
+ proto_tree_add_item(ti_tree, hf_mac_header_type_2_ht, tvb, offset, 1, ENC_BIG_ENDIAN);
+ /* encryption control */
+ proto_tree_add_item(ti_tree, hf_mac_header_type_2_ec, tvb, offset, 1, ENC_BIG_ENDIAN);
+ /* sub-type */
+ proto_tree_add_item(ti_tree, hf_mac_header_type_2_type, tvb, offset, 1, ENC_BIG_ENDIAN);
+ /* CID inclusion indication */
+ proto_tree_add_item(ti_tree, hf_mac_header_type_2_cii, tvb, offset, 1, ENC_BIG_ENDIAN);
+ /* feedback type */
+ proto_tree_add_item(ti_tree, hf_mac_header_type_2_fb_type, tvb, offset, 1, ENC_BIG_ENDIAN);
+ /* Get the first byte */
+ first_byte = tvb_get_guint8(tvb, offset);
+ /* get the CII field */
+ cii_bit = ((first_byte & WIMAX_MAC_HEADER_TYPE_2_CII)?1:0);
+ /* check the Type field */
+ if(!(first_byte & WIMAX_MAC_HEADER_TYPE_2_TYPE))
+ {
+ /* Get the feedback type */
+ fb_type = (first_byte & WIMAX_MAC_HEADER_TYPE_2_FB_TYPE);
+ if(fb_type < TYPE_II_FB_TYPE_MAX)
+ {
+ /* update the info column */
+ col_append_sep_str(pinfo->cinfo, COL_INFO, NULL, type2_fb_type_abbrv[fb_type]);
+ }
+ else
+ {
+ /* update the info column */
+ col_append_sep_str(pinfo->cinfo, COL_INFO, NULL, "Unknown type 2 fb type");
+ /* display the MAC Type I Header in Hex */
+ proto_tree_add_item(ti_tree, hf_mac_header_type_2_value_bytes, tvb, offset, tvb_len, ENC_NA);
+ return tvb_captured_length(tvb);
+ }
+ /* move to the second byte */
+ offset++;
+ /* add the MAC header info */
+ proto_item_append_text(parent_item, "%s", type2_fb_type_abbrv[fb_type]);
+ /* process the feedback header based on the fb type */
+ switch (fb_type)
+ {
+ case CQI_MIMO_FB:
+ /* Decode and display the CQI and MIMO feedback */
+ /* CQI feedback type */
+ proto_tree_add_item(ti_tree, hf_mac_header_type_2_cqi_fb_type, tvb, offset, 2, ENC_BIG_ENDIAN);
+ /* CQI payload */
+ proto_tree_add_item(ti_tree, hf_mac_header_type_2_cqi_payload, tvb, offset, 2, ENC_BIG_ENDIAN);
+ /* reserved */
+ proto_tree_add_item(ti_tree, hf_mac_header_type_2_cqi_rsv, tvb, offset, 2, ENC_BIG_ENDIAN);
+ /* check the CII field */
+ if(cii_bit)
+ { /* with CID */
+ /* CID */
+ proto_tree_add_item(ti_tree, hf_mac_header_type_2_cid, tvb, (offset+2), 2, ENC_BIG_ENDIAN);
+ }
+ else
+ { /* without CID */
+ /* reserved */
+ proto_tree_add_item(ti_tree, hf_mac_header_type_2_no_cid, tvb, (offset+2), 2, ENC_BIG_ENDIAN);
+ }
+ break;
+ case DL_AVG_CINR:
+ /* Decode and display the DL average CINR feedback */
+ /* DL average CINR payload */
+ proto_tree_add_item(ti_tree, hf_mac_header_type_2_dl_ave_cinr, tvb, offset, 2, ENC_BIG_ENDIAN);
+ /* reserved */
+ proto_tree_add_item(ti_tree, hf_mac_header_type_2_dl_ave_rsv, tvb, offset, 2, ENC_BIG_ENDIAN);
+ /* check the CII field */
+ if(cii_bit)
+ { /* with CID */
+ /* CID */
+ proto_tree_add_item(ti_tree, hf_mac_header_type_2_cid, tvb, (offset+2), 2, ENC_BIG_ENDIAN);
+ }
+ else
+ { /* without CID */
+ /* reserved */
+ proto_tree_add_item(ti_tree, hf_mac_header_type_2_no_cid, tvb, (offset+2), 2, ENC_BIG_ENDIAN);
+ }
+ break;
+ case MIMO_COEF_FB:
+ /* Decode and display the MIMO coefficients feedback */
+ /* number of index */
+ proto_tree_add_item(ti_tree, hf_mac_header_type_2_mimo_coef_ni, tvb, offset, 2, ENC_BIG_ENDIAN);
+ /* occurrences of antenna index */
+ proto_tree_add_item(ti_tree, hf_mac_header_type_2_mimo_coef_ai, tvb, offset, 2, ENC_BIG_ENDIAN);
+ /* MIMO coefficients */
+ proto_tree_add_item(ti_tree, hf_mac_header_type_2_mimo_coef, tvb, offset, 2, ENC_BIG_ENDIAN);
+ /* reserved */
+ proto_tree_add_item(ti_tree, hf_mac_header_type_2_mimo_coef_rsv, tvb, offset, 2, ENC_BIG_ENDIAN);
+ /* check the CII field */
+ if(cii_bit)
+ { /* with CID */
+ /* Decode and display the CID */
+ proto_tree_add_item(ti_tree, hf_mac_header_type_2_cid, tvb, (offset+2), 2, ENC_BIG_ENDIAN);
+ }
+ else
+ { /* without CID */
+ proto_tree_add_item(ti_tree, hf_mac_header_type_2_no_cid, tvb, (offset+2), 2, ENC_BIG_ENDIAN);
+ }
+ break;
+ case PREF_DL_CHAN_DIUC_FB:
+ /* Decode and display the Preffed DL Channel DIUC feedback */
+ /* Preferred DIUC */
+ proto_tree_add_item(ti_tree, hf_mac_header_type_2_dl_chan_diuc, tvb, offset, 2, ENC_BIG_ENDIAN);
+ /* DCD Change Count */
+ proto_tree_add_item(ti_tree, hf_mac_header_type_2_dl_chan_dcd, tvb, offset, 2, ENC_BIG_ENDIAN);
+ /* reserved */
+ proto_tree_add_item(ti_tree, hf_mac_header_type_2_dl_chan_rsv, tvb, offset, 2, ENC_BIG_ENDIAN);
+ /* check the CII field */
+ if(cii_bit)
+ { /* with CID */
+ /* CID */
+ proto_tree_add_item(ti_tree, hf_mac_header_type_2_cid, tvb, (offset+2), 2, ENC_BIG_ENDIAN);
+ }
+ else
+ { /* without CID */
+ /* reserved */
+ proto_tree_add_item(ti_tree, hf_mac_header_type_2_no_cid, tvb, (offset+2), 2, ENC_BIG_ENDIAN);
+ }
+ break;
+ case UL_TX_PWR:
+ /* Decode and display the UL TX Power feedback */
+ /* UL TX Power */
+ proto_tree_add_item(ti_tree, hf_mac_header_type_2_ul_tx_pwr, tvb, offset, 2, ENC_BIG_ENDIAN);
+ /* reserved */
+ proto_tree_add_item(ti_tree, hf_mac_header_type_2_ul_tx_pwr_rsv, tvb, offset, 2, ENC_BIG_ENDIAN);
+ /* check the CII field */
+ if(cii_bit)
+ { /* with CID */
+ /* CID */
+ proto_tree_add_item(ti_tree, hf_mac_header_type_2_cid, tvb, (offset+2), 2, ENC_BIG_ENDIAN);
+ }
+ else
+ { /* without CID */
+ /* reserved */
+ proto_tree_add_item(ti_tree, hf_mac_header_type_2_no_cid, tvb, (offset+2), 2, ENC_BIG_ENDIAN);
+ }
+ break;
+ case PHY_CHAN_FB:
+ /* Decode and display the PHY Channel feedback */
+ /* Preffed DIUC */
+ proto_tree_add_item(ti_tree, hf_mac_header_type_2_phy_diuc, tvb, offset, 2, ENC_BIG_ENDIAN);
+ /* UL TX Power */
+ proto_tree_add_item(ti_tree, hf_mac_header_type_2_phy_ul_tx_pwr, tvb, offset, 2, ENC_BIG_ENDIAN);
+ /* UL Headroom */
+ proto_tree_add_item(ti_tree, hf_mac_header_type_2_phy_ul_hdrm, tvb, offset, 2, ENC_BIG_ENDIAN);
+ /* reserved */
+ proto_tree_add_item(ti_tree, hf_mac_header_type_2_phy_rsv, tvb, offset, 2, ENC_BIG_ENDIAN);
+ /* check the CII field */
+ if(cii_bit)
+ { /* with CID */
+ /* CID */
+ proto_tree_add_item(ti_tree, hf_mac_header_type_2_cid, tvb, (offset+2), 2, ENC_BIG_ENDIAN);
+ }
+ else
+ { /* without CID */
+ /* reserved */
+ proto_tree_add_item(ti_tree, hf_mac_header_type_2_no_cid, tvb, (offset+2), 2, ENC_BIG_ENDIAN);
+ }
+ break;
+ case AMC_BAND_BITMAP:
+ /* Decode and display the AMC Band CQIs feedback */
+ /* AMC Band Indication Bitmap */
+ proto_tree_add_item(ti_tree, hf_mac_header_type_2_amc_bitmap, tvb, offset, 2, ENC_BIG_ENDIAN);
+ /* AMC CQI 1 */
+ proto_tree_add_item(ti_tree, hf_mac_header_type_2_amc_cqi_1, tvb, offset, 2, ENC_BIG_ENDIAN);
+ /* AMC CQI 2 */
+ proto_tree_add_item(ti_tree, hf_mac_header_type_2_amc_cqi_2, tvb, offset, 2, ENC_BIG_ENDIAN);
+ /* AMC CQI 3 */
+ proto_tree_add_item(ti_tree, hf_mac_header_type_2_amc_cqi_3, tvb, offset, 2, ENC_BIG_ENDIAN);
+ /* AMC CQI 4 */
+ proto_tree_add_item(ti_tree, hf_mac_header_type_2_amc_cqi_4, tvb, offset, 2, ENC_BIG_ENDIAN);
+#if 0
+ /* check the CII field */
+ if(cii_bit)
+ { /* with CID */
+ /* CID */
+ proto_tree_add_item(ti_tree, hf_mac_header_type_2_cid, tvb, (offset+2), 2, ENC_BIG_ENDIAN);
+ }
+ else
+ { /* without CID */
+ /* reserved */
+ proto_tree_add_item(ti_tree, hf_mac_header_type_2_no_cid, tvb, (offset+2), 2, ENC_BIG_ENDIAN);
+ }
+#endif
+ break;
+ case SHORT_PRECODE_FB:
+ /* Decode and display the Life Span of Short-term precoding feedback */
+ /* Life Span */
+ proto_tree_add_item(ti_tree, hf_mac_header_type_2_life_span, tvb, offset, 2, ENC_BIG_ENDIAN);
+ /* reserved */
+ proto_tree_add_item(ti_tree, hf_mac_header_type_2_life_span_rsv, tvb, offset, 2, ENC_BIG_ENDIAN);
+ /* check the CII field */
+ if(cii_bit)
+ { /* with CID */
+ /* CID */
+ proto_tree_add_item(ti_tree, hf_mac_header_type_2_cid, tvb, (offset+2), 2, ENC_BIG_ENDIAN);
+ }
+ else
+ { /* without CID */
+ /* reserved */
+ proto_tree_add_item(ti_tree, hf_mac_header_type_2_no_cid, tvb, (offset+2), 2, ENC_BIG_ENDIAN);
+ }
+ break;
+ case MULTI_TYPES_FB:
+ /* Decode and display the Multi types of feedback */
+ /* Number of feedback types */
+ proto_tree_add_item(ti_tree, hf_mac_header_type_2_mt_num_fb_types, tvb, offset, 4, ENC_BIG_ENDIAN);
+ /* Occurrences of feedback type */
+ proto_tree_add_item(ti_tree, hf_mac_header_type_2_mt_occu_fb_type, tvb, offset, 4, ENC_BIG_ENDIAN);
+ /* feedback contents */
+ proto_tree_add_item(ti_tree, hf_mac_header_type_2_mt_fb_contents, tvb, offset, 4, ENC_BIG_ENDIAN);
+#if 0
+ /* check the CII field */
+ if(cii_bit)
+ { /* with CID */
+ /* CID */
+ proto_tree_add_item(ti_tree, hf_mac_header_type_2_cid, tvb, (offset+2), 2, ENC_BIG_ENDIAN);
+ }
+ else
+ { /* without CID */
+ /* reserved */
+ proto_tree_add_item(ti_tree, hf_mac_header_type_2_no_cid, tvb, (offset+2), 2, ENC_BIG_ENDIAN);
+ }
+#endif
+ break;
+ case LONG_PRECODE_FB:
+ /* Decode and display the Long-term precoding feedback */
+ /* Feedback of index */
+ proto_tree_add_item(ti_tree, hf_mac_header_type_2_lt_id_fb, tvb, offset, 2, ENC_BIG_ENDIAN);
+ /* rank of prrecoding codebook */
+ proto_tree_add_item(ti_tree, hf_mac_header_type_2_lt_rank, tvb, offset, 2, ENC_BIG_ENDIAN);
+ /* EFC and QAM feedback */
+ proto_tree_add_item(ti_tree, hf_mac_header_type_2_lt_fec_qam, tvb, offset, 2, ENC_BIG_ENDIAN);
+ /* reserved */
+ proto_tree_add_item(ti_tree, hf_mac_header_type_2_lt_rsv, tvb, offset, 2, ENC_BIG_ENDIAN);
+ /* check the CII field */
+ if(cii_bit)
+ { /* with CID */
+ /* CID */
+ proto_tree_add_item(ti_tree, hf_mac_header_type_2_cid, tvb, (offset+2), 2, ENC_BIG_ENDIAN);
+ }
+ else
+ { /* without CID */
+ /* reserved */
+ proto_tree_add_item(ti_tree, hf_mac_header_type_2_no_cid, tvb, (offset+2), 2, ENC_BIG_ENDIAN);
+ }
+ break;
+ case COMB_DL_AVG_CINR:
+ /* Decode and display the Combined DL Average CINR feedback */
+ /* Combined DL average CINR of Active BSs */
+ proto_tree_add_item(ti_tree, hf_mac_header_type_2_comb_dl_ave, tvb, offset, 2, ENC_BIG_ENDIAN);
+ /* reserved */
+ proto_tree_add_item(ti_tree, hf_mac_header_type_2_comb_dl_rsv, tvb, offset, 2, ENC_BIG_ENDIAN);
+ /* check the CII field */
+ if(cii_bit)
+ { /* with CID */
+ /* CID */
+ proto_tree_add_item(ti_tree, hf_mac_header_type_2_cid, tvb, (offset+2), 2, ENC_BIG_ENDIAN);
+ }
+ else
+ { /* without CID */
+ /* reserved */
+ proto_tree_add_item(ti_tree, hf_mac_header_type_2_no_cid, tvb, (offset+2), 2, ENC_BIG_ENDIAN);
+ }
+ break;
+ case MIMO_CHAN_FB:
+ /* Decode and display the second byte of the header */
+ proto_tree_add_item(ti_tree, hf_mac_header_type_2_mimo_diuc, tvb, (offset+1), 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(ti_tree, hf_mac_header_type_2_mimo_pbwi, tvb, (offset+1), 1, ENC_BIG_ENDIAN);
+ /* Decode and display the 3rd to 5th bytes of the header */
+ /* Decode and display the SLPB */
+ proto_tree_add_item(ti_tree, hf_mac_header_type_2_mimo_slpb, tvb, offset, 3, ENC_BIG_ENDIAN);
+ /* check the CII field */
+ if(cii_bit)
+ { /* with CID */
+ /* Decode and display the BPRI */
+ proto_tree_add_item(ti_tree, hf_mac_header_type_2_mimo_bpri_cid, tvb, offset, 3, ENC_BIG_ENDIAN);
+ /* Decode and display the CID */
+ proto_tree_add_item(ti_tree, hf_mac_header_type_2_mimo_cid, tvb, offset, 3, ENC_BIG_ENDIAN);
+ }
+ else
+ { /* without CID */
+ /* Decode and display the BPRI */
+ proto_tree_add_item(ti_tree, hf_mac_header_type_2_mimo_bpri, tvb, offset, 3, ENC_BIG_ENDIAN);
+ /* Decode and display the CTI */
+ proto_tree_add_item(ti_tree, hf_mac_header_type_2_mimo_cti, tvb, offset, 3, ENC_BIG_ENDIAN);
+ /* Decode and display the AI */
+ proto_tree_add_item(ti_tree, hf_mac_header_type_2_mimo_ai_0, tvb, offset, 3, ENC_BIG_ENDIAN);
+ proto_tree_add_item(ti_tree, hf_mac_header_type_2_mimo_ai_1, tvb, offset, 3, ENC_BIG_ENDIAN);
+ proto_tree_add_item(ti_tree, hf_mac_header_type_2_mimo_ai_2, tvb, offset, 3, ENC_BIG_ENDIAN);
+ proto_tree_add_item(ti_tree, hf_mac_header_type_2_mimo_ai_3, tvb, offset, 3, ENC_BIG_ENDIAN);
+ /* Decode and display the MI */
+ proto_tree_add_item(ti_tree, hf_mac_header_type_2_mimo_mi, tvb, offset, 3, ENC_BIG_ENDIAN);
+ /* Decode and display the CT */
+ proto_tree_add_item(ti_tree, hf_mac_header_type_2_mimo_ct, tvb, offset, 3, ENC_BIG_ENDIAN);
+ /* Decode and display the CQI */
+ proto_tree_add_item(ti_tree, hf_mac_header_type_2_mimo_cqi, tvb, offset, 3, ENC_BIG_ENDIAN);
+ }
+ break;
+ case CINR_FB:
+ /* Decode and display the CINRC feedback */
+ /* CINR Mean */
+ proto_tree_add_item(ti_tree, hf_mac_header_type_2_cinr_mean, tvb, offset, 2, ENC_BIG_ENDIAN);
+ /* CINR Standard Deviation */
+ proto_tree_add_item(ti_tree, hf_mac_header_type_2_cinr_devi, tvb, offset, 2, ENC_BIG_ENDIAN);
+ /* check the CII field */
+ if(cii_bit)
+ { /* with CID */
+ /* Decode and display the CID */
+ proto_tree_add_item(ti_tree, hf_mac_header_type_2_cid, tvb, (offset+2), 2, ENC_BIG_ENDIAN);
+ }
+ else
+ { /* without CID */
+ /* reserved */
+ proto_tree_add_item(ti_tree, hf_mac_header_type_2_no_cid, tvb, (offset+2), 2, ENC_BIG_ENDIAN);
+ }
+ break;
+ case CL_MIMO_FB:
+ /* Get the MIMO type */
+ mimo_type = ((tvb_get_guint8(tvb, offset) & 0xC0) >> 6);
+ /* Decode and display the MIMO type */
+ proto_tree_add_item(ti_tree, hf_mac_header_type_2_cl_mimo_type, tvb, offset, 2, ENC_BIG_ENDIAN);
+ if(mimo_type == 1)
+ {
+ /* Decode and display the umber of streams */
+ proto_tree_add_item(ti_tree, hf_mac_header_type_2_cl_mimo_streams, tvb, offset, 2, ENC_BIG_ENDIAN);
+ /* Decode and display the antenna selection option index */
+ proto_tree_add_item(ti_tree, hf_mac_header_type_2_cl_mimo_ant_sel, tvb, offset, 2, ENC_BIG_ENDIAN);
+ /* Decode and display the average CQI */
+ proto_tree_add_item(ti_tree, hf_mac_header_type_2_cl_mimo_cqi_1, tvb, offset, 2, ENC_BIG_ENDIAN);
+ /* reserved */
+ proto_tree_add_item(ti_tree, hf_mac_header_type_2_cl_mimo_rsv_1, tvb, offset, 2, ENC_BIG_ENDIAN);
+ }
+ else if(mimo_type == 2)
+ {
+ /* Decode and display the umber of streams */
+ proto_tree_add_item(ti_tree, hf_mac_header_type_2_cl_mimo_streams, tvb, offset, 2, ENC_BIG_ENDIAN);
+ /* Decode and display the antenna selection option index */
+ proto_tree_add_item(ti_tree, hf_mac_header_type_2_cl_mimo_codebook_id, tvb, offset, 2, ENC_BIG_ENDIAN);
+ /* Decode and display the average CQI */
+ proto_tree_add_item(ti_tree, hf_mac_header_type_2_cl_mimo_cqi_2, tvb, offset, 2, ENC_BIG_ENDIAN);
+ /* reserved */
+ proto_tree_add_item(ti_tree, hf_mac_header_type_2_cl_mimo_rsv_2, tvb, offset, 2, ENC_BIG_ENDIAN);
+ }
+ else
+ {
+ /* Decode and display the antenna grouping index */
+ proto_tree_add_item(ti_tree, hf_mac_header_type_2_cl_mimo_ant_id, tvb, offset, 2, ENC_BIG_ENDIAN);
+ /* Decode and display the average CQI */
+ proto_tree_add_item(ti_tree, hf_mac_header_type_2_cl_mimo_cqi, tvb, offset, 2, ENC_BIG_ENDIAN);
+ /* reserved */
+ proto_tree_add_item(ti_tree, hf_mac_header_type_2_cl_mimo_rsv, tvb, offset, 2, ENC_BIG_ENDIAN);
+ }
+ /* check the CII field */
+ if(cii_bit)
+ { /* with CID */
+ /* Decode and display the CID */
+ proto_tree_add_item(ti_tree, hf_mac_header_type_2_cid, tvb, (offset+2), 2, ENC_BIG_ENDIAN);
+ }
+ else
+ { /* without CID */
+ /* reserved */
+ proto_tree_add_item(ti_tree, hf_mac_header_type_2_no_cid, tvb, (offset+2), 2, ENC_BIG_ENDIAN);
+ }
+ break;
+ default:
+ break;
+ }
+ /* Decode and display the HCS */
+ proto_tree_add_item(ti_tree, hf_mac_header_type_2_hcs, tvb, (offset+4), 1, ENC_BIG_ENDIAN);
+ }
+ else
+ {
+ /* update the info column */
+ col_append_sep_str(pinfo->cinfo, COL_INFO, NULL, "Error - Undefined Type");
+ }
+ }
+ return tvb_captured_length(tvb);
+}
+
+/* Register Wimax Mac Header Type II Protocol and Dissector */
+void wimax_proto_register_mac_header_type_2(void)
+{
+ /* MAC HEADER TYPE II display */
+ static hf_register_info hf[] =
+ {
+ {
+ &hf_mac_header_type_2_value_bytes,
+ {
+ "Values", "wmx.type2ValueBytes",
+ FT_BYTES, BASE_NONE, NULL, 0x0,
+ NULL, HFILL
+ }
+ },
+ {
+ &hf_mac_header_type_2_ht,
+ {
+ "MAC Header Type", "wmx.type2Ht",
+ FT_UINT8, BASE_DEC, NULL, WIMAX_MAC_HEADER_TYPE_2_HT,
+ NULL, HFILL
+ }
+ },
+ {
+ &hf_mac_header_type_2_ec,
+ {
+ "MAC Encryption Control", "wmx.type2Ec",
+ FT_UINT8, BASE_DEC, NULL, WIMAX_MAC_HEADER_TYPE_2_EC,
+ NULL, HFILL
+ }
+ },
+ {
+ &hf_mac_header_type_2_type,
+ {
+ "MAC Sub-Type", "wmx.type2Type",
+ FT_UINT8, BASE_DEC, NULL, WIMAX_MAC_HEADER_TYPE_2_TYPE,
+ NULL, HFILL
+ }
+ },
+ {
+ &hf_mac_header_type_2_cii,
+ {
+ "CID Inclusion Indication", "wmx.type2Cii",
+ FT_UINT8, BASE_DEC, VALS(cii_msgs), WIMAX_MAC_HEADER_TYPE_2_CII,
+ NULL, HFILL
+ }
+ },
+ {
+ &hf_mac_header_type_2_fb_type,
+ {
+ "Feedback Type", "wmx.type2FbType",
+ FT_UINT8, BASE_DEC, VALS(fb_types), WIMAX_MAC_HEADER_TYPE_2_FB_TYPE,
+ NULL, HFILL
+ }
+ },
+ {
+ &hf_mac_header_type_2_cqi_fb_type,
+ {
+ "Mimo Feedback Type", "wmx.type2MimoFbType",
+ FT_UINT16, BASE_DEC, NULL, WIMAX_MAC_HEADER_TYPE_2_CQI_FB_TYPE,
+ NULL, HFILL
+ }
+ },
+ {
+ &hf_mac_header_type_2_cqi_payload,
+ {
+ "CQI and Mimo Feedback Payload", "wmx.type2MimoFbPayload",
+ FT_UINT16, BASE_DEC, NULL, WIMAX_MAC_HEADER_TYPE_2_CQI_PAYLOAD,
+ NULL, HFILL
+ }
+ },
+ {
+ &hf_mac_header_type_2_cqi_rsv,
+ {
+ "Reserved", "wmx.type2MimoFbRsv",
+ FT_UINT16, BASE_DEC, NULL, WIMAX_MAC_HEADER_TYPE_2_CQI_RSV,
+ NULL, HFILL
+ }
+ },
+ {
+ &hf_mac_header_type_2_dl_ave_cinr,
+ {
+ "DL Average CINR", "wmx.type2DlAveCinr",
+ FT_UINT16, BASE_DEC, NULL, WIMAX_MAC_HEADER_TYPE_2_DL_AVE_CINR,
+ NULL, HFILL
+ }
+ },
+ {
+ &hf_mac_header_type_2_dl_ave_rsv,
+ {
+ "Reserved", "wmx.type2DlAveRsv",
+ FT_UINT16, BASE_DEC, NULL, WIMAX_MAC_HEADER_TYPE_2_DL_AVE_RSV,
+ NULL, HFILL
+ }
+ },
+ {
+ &hf_mac_header_type_2_mimo_coef_ni,
+ {
+ "Number of Index", "wmx.type2MimoCoefNi",
+ FT_UINT16, BASE_DEC, NULL, WIMAX_MAC_HEADER_TYPE_2_MIMO_COEF_NI,
+ NULL, HFILL
+ }
+ },
+ {
+ &hf_mac_header_type_2_mimo_coef_ai,
+ {
+ "Occurrences of Antenna Index", "wmx.type2MimoCoefAi",
+ FT_UINT16, BASE_DEC, NULL, WIMAX_MAC_HEADER_TYPE_2_MIMO_COEF_AI,
+ NULL, HFILL
+ }
+ },
+ {
+ &hf_mac_header_type_2_mimo_coef,
+ {
+ "MIMO Coefficients", "wmx.type2MimoCoef",
+ FT_UINT16, BASE_DEC, NULL, WIMAX_MAC_HEADER_TYPE_2_MIMO_COEF,
+ NULL, HFILL
+ }
+ },
+ {
+ &hf_mac_header_type_2_mimo_coef_rsv,
+ {
+ "Reserved", "wmx.type2MimoCoefRsv",
+ FT_UINT16, BASE_DEC, NULL, WIMAX_MAC_HEADER_TYPE_2_MIMO_COEF_RSV,
+ NULL, HFILL
+ }
+ },
+ {
+ &hf_mac_header_type_2_dl_chan_diuc,
+ {
+ "Preferred DIUC", "wmx.type2DlChanDiuc",
+ FT_UINT16, BASE_DEC, NULL, WIMAX_MAC_HEADER_TYPE_2_DL_CHAN_DIUC,
+ NULL, HFILL
+ }
+ },
+ {
+ &hf_mac_header_type_2_dl_chan_dcd,
+ {
+ "DCD Change Count", "wmx.type2DlChanDcd",
+ FT_UINT16, BASE_DEC, NULL, WIMAX_MAC_HEADER_TYPE_2_DL_CHAN_DCD,
+ NULL, HFILL
+ }
+ },
+ {
+ &hf_mac_header_type_2_dl_chan_rsv,
+ {
+ "Reserved", "wmx.type2DlChanRsv",
+ FT_UINT16, BASE_DEC, NULL, WIMAX_MAC_HEADER_TYPE_2_DL_CHAN_RSV,
+ NULL, HFILL
+ }
+ },
+ {
+ &hf_mac_header_type_2_ul_tx_pwr,
+ {
+ "UL TX Power", "wmx.type2UlTxPwr",
+ FT_UINT16, BASE_DEC, NULL, WIMAX_MAC_HEADER_TYPE_2_UL_TX_PWR,
+ NULL, HFILL
+ }
+ },
+ {
+ &hf_mac_header_type_2_ul_tx_pwr_rsv,
+ {
+ "Reserved", "wmx.type2UlTxPwrRsv",
+ FT_UINT16, BASE_DEC, NULL, WIMAX_MAC_HEADER_TYPE_2_UL_TX_PWR_RSV,
+ NULL, HFILL
+ }
+ },
+ {
+ &hf_mac_header_type_2_phy_diuc,
+ {
+ "Preferred DIUC Index", "wmx.type2PhyDiuc",
+ FT_UINT24, BASE_DEC, NULL, WIMAX_MAC_HEADER_TYPE_2_PHY_DIUC,
+ NULL, HFILL
+ }
+ },
+ {
+ &hf_mac_header_type_2_phy_ul_tx_pwr,
+ {
+ "UL TX Power", "wmx.type2PhyUlTxPwr",
+ FT_UINT24, BASE_DEC, NULL, WIMAX_MAC_HEADER_TYPE_2_PHY_UL_TX_PWR,
+ NULL, HFILL
+ }
+ },
+ {
+ &hf_mac_header_type_2_phy_ul_hdrm,
+ {
+ "UL Headroom", "wmx.type2PhyHdRm",
+ FT_UINT24, BASE_DEC, NULL, WIMAX_MAC_HEADER_TYPE_2_PHY_UL_HDRM,
+ NULL, HFILL
+ }
+ },
+ {
+ &hf_mac_header_type_2_phy_rsv,
+ {
+ "Reserved", "wmx.type2PhyRsv",
+ FT_UINT24, BASE_DEC, NULL, WIMAX_MAC_HEADER_TYPE_2_PHY_RSV,
+ NULL, HFILL
+ }
+ },
+ {
+ &hf_mac_header_type_2_amc_bitmap,
+ {
+ "AMC Band Indication Bitmap", "wmx.type2AmcBitmap",
+ FT_UINT32, BASE_DEC, NULL, WIMAX_MAC_HEADER_TYPE_2_AMC_BITMAP,
+ NULL, HFILL
+ }
+ },
+ {
+ &hf_mac_header_type_2_amc_cqi_1,
+ {
+ "CQI 1", "wmx.type2AmcCqi1",
+ FT_UINT32, BASE_DEC, NULL, WIMAX_MAC_HEADER_TYPE_2_AMC_CQI_1,
+ NULL, HFILL
+ }
+ },
+ {
+ &hf_mac_header_type_2_amc_cqi_2,
+ {
+ "CQI 2", "wmx.type2AmcCqi2",
+ FT_UINT32, BASE_DEC, NULL, WIMAX_MAC_HEADER_TYPE_2_AMC_CQI_2,
+ NULL, HFILL
+ }
+ },
+ {
+ &hf_mac_header_type_2_amc_cqi_3,
+ {
+ "CQI 3", "wmx.type2AmcCqi3",
+ FT_UINT32, BASE_DEC, NULL, WIMAX_MAC_HEADER_TYPE_2_AMC_CQI_3,
+ NULL, HFILL
+ }
+ },
+ {
+ &hf_mac_header_type_2_amc_cqi_4,
+ {
+ "CQI 4", "wmx.type2AmcCqi4",
+ FT_UINT32, BASE_DEC, NULL, WIMAX_MAC_HEADER_TYPE_2_AMC_CQI_4,
+ NULL, HFILL
+ }
+ },
+ {
+ &hf_mac_header_type_2_life_span,
+ {
+ "Life Span of Short-term", "wmx.type2LifeSpan",
+ FT_UINT16, BASE_DEC, NULL, WIMAX_MAC_HEADER_TYPE_2_LIFE_SPAN,
+ NULL, HFILL
+ }
+ },
+ {
+ &hf_mac_header_type_2_life_span_rsv,
+ {
+ "Reserved", "wmx.type2LifeSpanRsv",
+ FT_UINT16, BASE_DEC, NULL, WIMAX_MAC_HEADER_TYPE_2_LIFE_SPAN_RSV,
+ NULL, HFILL
+ }
+ },
+ {
+ &hf_mac_header_type_2_mt_num_fb_types,
+ {
+ "Number of Feedback Types", "wmx.type2MtNumFbTypes",
+ FT_UINT32, BASE_DEC, NULL, WIMAX_MAC_HEADER_TYPE_2_MT_NUM_FB_TYPES,
+ NULL, HFILL
+ }
+ },
+ {
+ &hf_mac_header_type_2_mt_occu_fb_type,
+ {
+ "Occurrences of Feedback Type", "wmx.type2MtOccuFbType",
+ FT_UINT32, BASE_DEC, NULL, WIMAX_MAC_HEADER_TYPE_2_MT_OCCU_FB_TYPE,
+ NULL, HFILL
+ }
+ },
+ {
+ &hf_mac_header_type_2_mt_fb_contents,
+ {
+ "Number of Feedback Types", "wmx.type2MtNumFbTypes",
+ FT_UINT32, BASE_HEX, NULL, WIMAX_MAC_HEADER_TYPE_2_MT_FB_CONTENTS,
+ NULL, HFILL
+ }
+ },
+ {
+ &hf_mac_header_type_2_lt_id_fb,
+ {
+ "Long-term Feedback Index", "wmx.type2LtFbId",
+ FT_UINT16, BASE_DEC, NULL, WIMAX_MAC_HEADER_TYPE_2_LT_ID_FB,
+ NULL, HFILL
+ }
+ },
+ {
+ &hf_mac_header_type_2_lt_rank,
+ {
+ "Rank of Precoding Codebook", "wmx.type2LtRank",
+ FT_UINT16, BASE_DEC, NULL, WIMAX_MAC_HEADER_TYPE_2_LT_RANK,
+ NULL, HFILL
+ }
+ },
+ {
+ &hf_mac_header_type_2_lt_fec_qam,
+ {
+ "FEC and QAM", "wmx.type2LtFecQam",
+ FT_UINT16, BASE_DEC, NULL, WIMAX_MAC_HEADER_TYPE_2_LT_FEC_QAM,
+ NULL, HFILL
+ }
+ },
+ {
+ &hf_mac_header_type_2_lt_rsv,
+ {
+ "Reserved", "wmx.type2LtFbId",
+ FT_UINT16, BASE_DEC, NULL, WIMAX_MAC_HEADER_TYPE_2_LT_RSV,
+ NULL, HFILL
+ }
+ },
+ {
+ &hf_mac_header_type_2_comb_dl_ave,
+ {
+ "Combined DL Average CINR of Active BSs", "wmx.type2CombDlAve",
+ FT_UINT16, BASE_DEC, NULL, WIMAX_MAC_HEADER_TYPE_2_COMB_DL_AVE,
+ NULL, HFILL
+ }
+ },
+ {
+ &hf_mac_header_type_2_comb_dl_rsv,
+ {
+ "Reserved", "wmx.type2CombDlRsv",
+ FT_UINT16, BASE_DEC, NULL, WIMAX_MAC_HEADER_TYPE_2_COMB_DL_RSV,
+ NULL, HFILL
+ }
+ },
+ {
+ &hf_mac_header_type_2_mimo_diuc,
+ {
+ "Preferred DIUC Index", "wmx.type2MimoDiuc",
+ FT_UINT8, BASE_DEC, NULL, WIMAX_MAC_HEADER_TYPE_2_DIUC,
+ NULL, HFILL
+ }
+ },
+ {
+ &hf_mac_header_type_2_mimo_pbwi,
+ {
+ "Preferred Bandwidth Index", "wmx.type2MimoPbwi",
+ FT_UINT8, BASE_DEC, VALS(pbwi_table), WIMAX_MAC_HEADER_TYPE_2_PBWI,
+ NULL, HFILL
+ }
+ },
+ {
+ &hf_mac_header_type_2_mimo_slpb,
+ {
+ "Starting Location of Preferred Bandwidth", "wmx.type2MimoSlpb",
+ FT_UINT24, BASE_DEC, NULL, WIMAX_MAC_HEADER_TYPE_2_SLPB,
+ NULL, HFILL
+ }
+ },
+ {
+ &hf_mac_header_type_2_mimo_bpri_cid,
+ {
+ "Burst Profile Ranking Indicator with CID", "wmx.type2MimoBpriCid",
+ FT_UINT24, BASE_HEX, VALS(bpri_table), WIMAX_MAC_HEADER_TYPE_2_PBRI_CID,
+ NULL, HFILL
+ }
+ },
+ {
+ &hf_mac_header_type_2_mimo_cid,
+ {
+ "Connection ID", "wmx.type2MimoCid",
+ FT_UINT24, BASE_DEC, NULL, WIMAX_MAC_HEADER_TYPE_2_CID,
+ NULL, HFILL
+ }
+ },
+ {
+ &hf_mac_header_type_2_mimo_bpri,
+ {
+ "Burst Profile Ranking Indicator without CID", "wmx.type2MimoBpri",
+ FT_UINT24, BASE_HEX, VALS(bpri_table), WIMAX_MAC_HEADER_TYPE_2_PBRI,
+ NULL, HFILL
+ }
+ },
+ {
+ &hf_mac_header_type_2_mimo_cti,
+ {
+ "Coherent Time Index", "wmx.type2MimoCti",
+ FT_UINT24, BASE_HEX, VALS(cti_table), WIMAX_MAC_HEADER_TYPE_2_CTI,
+ NULL, HFILL
+ }
+ },
+ {
+ &hf_mac_header_type_2_mimo_ai_0,
+ {
+ "Antenna 0 Indication", "wmx.type2MimoAi",
+ FT_UINT24, BASE_HEX, VALS(ai_msgs), WIMAX_MAC_HEADER_TYPE_2_AI_0,
+ NULL, HFILL
+ }
+ },
+ {
+ &hf_mac_header_type_2_mimo_ai_1,
+ {
+ "Antenna 1 Indication", "wmx.type2MimoAi",
+ FT_UINT24, BASE_HEX, VALS(ai_msgs), WIMAX_MAC_HEADER_TYPE_2_AI_1,
+ NULL, HFILL
+ }
+ },
+ {
+ &hf_mac_header_type_2_mimo_ai_2,
+ {
+ "Antenna 2 Indication", "wmx.type2MimoAi",
+ FT_UINT24, BASE_HEX, VALS(ai_msgs), WIMAX_MAC_HEADER_TYPE_2_AI_2,
+ NULL, HFILL
+ }
+ },
+ {
+ &hf_mac_header_type_2_mimo_ai_3,
+ {
+ "Antenna 3 Indication", "wmx.type2MimoAi",
+ FT_UINT24, BASE_HEX, VALS(ai_msgs), WIMAX_MAC_HEADER_TYPE_2_AI_3,
+ NULL, HFILL
+ }
+ },
+ {
+ &hf_mac_header_type_2_mimo_mi,
+ {
+ "MS Matrix Indicator", "wmx.type2MimoMi",
+ FT_UINT24, BASE_HEX, VALS(mi_table), WIMAX_MAC_HEADER_TYPE_2_MI,
+ NULL, HFILL
+ }
+ },
+ {
+ &hf_mac_header_type_2_mimo_ct,
+ {
+ "CQI Type", "wmx.type2MimoCt",
+ FT_UINT24, BASE_HEX, VALS(ct_msgs), WIMAX_MAC_HEADER_TYPE_2_CT,
+ NULL, HFILL
+ }
+ },
+ {
+ &hf_mac_header_type_2_mimo_cqi,
+ {
+ "CQI Feedback", "wmx.type2MimoCqi",
+ FT_UINT24, BASE_HEX, NULL, WIMAX_MAC_HEADER_TYPE_2_CQI,
+ NULL, HFILL
+ }
+ },
+ { &hf_mac_header_type_2_cinr_mean,
+ {
+ "CINR Mean", "wmx.type2CinrMean",
+ FT_UINT8, BASE_HEX, NULL, 0x0,
+ NULL, HFILL
+ }
+ },
+ {
+ &hf_mac_header_type_2_cinr_devi,
+ {
+ "CINR Standard Deviation", "wmx.type2CinrDevi",
+ FT_UINT8, BASE_HEX, NULL, 0x0,
+ NULL, HFILL
+ }
+ },
+ {
+ &hf_mac_header_type_2_cl_mimo_type,
+ {
+ "Closed-Loop MIMO Type", "wmx.type2ClMimoType",
+ FT_UINT16, BASE_HEX, NULL, WIMAX_MAC_HEADER_TYPE_2_CL_MIMO_TYPE,
+ NULL, HFILL
+ }
+ },
+ {
+ &hf_mac_header_type_2_cl_mimo_ant_id,
+ {
+ "Antenna Grouping Index", "wmx.type2ClMimoAntId",
+ FT_UINT16, BASE_DEC, NULL, WIMAX_MAC_HEADER_TYPE_2_CL_MIMO_ANT_ID,
+ NULL, HFILL
+ }
+ },
+ {
+ &hf_mac_header_type_2_cl_mimo_cqi,
+ {
+ "Average CQI", "wmx.type2ClMimoCqi",
+ FT_UINT16, BASE_DEC, NULL, WIMAX_MAC_HEADER_TYPE_2_CL_MIMO_CQI,
+ NULL, HFILL
+ }
+ },
+ {
+ &hf_mac_header_type_2_cl_mimo_cqi_1,
+ {
+ "Average CQI", "wmx.type2ClMimoCqi",
+ FT_UINT16, BASE_DEC, NULL, WIMAX_MAC_HEADER_TYPE_2_CL_MIMO_CQI_1,
+ NULL, HFILL
+ }
+ },
+ {
+ &hf_mac_header_type_2_cl_mimo_cqi_2,
+ {
+ "Average CQI", "wmx.type2ClMimoCqi",
+ FT_UINT16, BASE_DEC, NULL, WIMAX_MAC_HEADER_TYPE_2_CL_MIMO_CQI_2,
+ NULL, HFILL
+ }
+ },
+ {
+ &hf_mac_header_type_2_cl_mimo_rsv,
+ {
+ "Reserved", "wmx.type2ClMimoRsv",
+ FT_UINT16, BASE_DEC, NULL, WIMAX_MAC_HEADER_TYPE_2_CL_MIMO_RSV,
+ NULL, HFILL
+ }
+ },
+ {
+ &hf_mac_header_type_2_cl_mimo_rsv_1,
+ {
+ "Reserved", "wmx.type2ClMimoRsv",
+ FT_UINT16, BASE_DEC, NULL, WIMAX_MAC_HEADER_TYPE_2_CL_MIMO_RSV_1,
+ NULL, HFILL
+ }
+ },
+ {
+ &hf_mac_header_type_2_cl_mimo_rsv_2,
+ {
+ "Reserved", "wmx.type2ClMimoRsv",
+ FT_UINT16, BASE_DEC, NULL, WIMAX_MAC_HEADER_TYPE_2_CL_MIMO_RSV_2,
+ NULL, HFILL
+ }
+ },
+ {
+ &hf_mac_header_type_2_cl_mimo_streams,
+ {
+ "Number of Streams", "wmx.type2ClMimoStreams",
+ FT_UINT16, BASE_DEC, NULL, WIMAX_MAC_HEADER_TYPE_2_CL_MIMO_STREAMS,
+ NULL, HFILL
+ }
+ },
+ {
+ &hf_mac_header_type_2_cl_mimo_ant_sel,
+ {
+ "Antenna Selection Option Index", "wmx.type2ClMimoAntSel",
+ FT_UINT16, BASE_DEC, NULL, WIMAX_MAC_HEADER_TYPE_2_CL_MIMO_ANT_SEL,
+ NULL, HFILL
+ }
+ },
+ {
+ &hf_mac_header_type_2_cl_mimo_codebook_id,
+ {
+ "Codebook Index", "wmx.type2ClMimoCodeBkId",
+ FT_UINT16, BASE_DEC, NULL, WIMAX_MAC_HEADER_TYPE_2_CL_MIMO_CODEBOOK_ID,
+ NULL, HFILL
+ }
+ },
+ {
+ &hf_mac_header_type_2_cid,
+ {
+ "Connection ID", "wmx.type2Cid",
+ FT_UINT16, BASE_DEC, NULL, 0x0,
+ NULL, HFILL
+ }
+ },
+ {
+ &hf_mac_header_type_2_no_cid,
+ {
+ "Reserved", "wmx.type2NoCid",
+ FT_UINT16, BASE_HEX, NULL, 0x0,
+ NULL, HFILL
+ }
+ },
+ {
+ &hf_mac_header_type_2_hcs,
+ {
+ "Header Check Sequence", "wmx.type2Hcs",
+ FT_UINT8, BASE_HEX, NULL, 0x0,
+ NULL, HFILL
+ }
+ }
+ };
+
+ /* Setup protocol subtree array */
+ static gint *ett[] =
+ {
+ &ett_mac_header_type_2_decoder,
+ };
+
+ proto_mac_header_type_2_decoder = proto_mac_header_generic_decoder;
+
+ proto_register_field_array(proto_mac_header_type_2_decoder, hf, array_length(hf));
+ proto_register_subtree_array(ett, array_length(ett));
+
+ register_dissector("mac_header_type_2_handler", dissect_mac_header_type_2_decoder, proto_mac_header_type_2_decoder);
+}
+
+/*
+ * Editor modelines - http://www.wireshark.org/tools/modelines.html
+ *
+ * Local variables:
+ * c-basic-offset: 8
+ * tab-width: 8
+ * indent-tabs-mode: t
+ * End:
+ *
+ * vi: set shiftwidth=8 tabstop=8 noexpandtab:
+ * :indentSize=8:tabSize=8:noTabs=false:
+ */