?? plugins-wimax-wimax_compact_dlmap_ie_decoder.c
字號:
proto_tree_add_item(tree, hf_cdlmap_dl_map_type_1, tvb, dl_map_offset, 1, FALSE);
/* display the UL-MAP append */
proto_tree_add_item(tree, hf_cdlmap_ul_map_append_1, tvb, dl_map_offset, 1, FALSE);
/* move to next byte */
dl_map_offset++;
nibble_offset = 0;
}
else
{ /* display the DL-MAP type */
proto_tree_add_item(tree, hf_cdlmap_dl_map_type, tvb, dl_map_offset, 1, FALSE);
/* display the UL-MAP append */
proto_tree_add_item(tree, hf_cdlmap_ul_map_append, tvb, dl_map_offset, 1, FALSE);
nibble_offset = 1;
}
length = 1;
/* decode RCID IE */
nibble_length = wimax_compact_dlmap_rcid_ie_decoder(tree, pinfo, tvb, dl_map_offset, nibble_offset);
length += nibble_length;
dl_map_offset += (nibble_length >> 1);
nibble_offset = (nibble_length & 1);
/* check harq mode */
if(!harq_mode)
{ /* display the Nep and Nsch Code */
if(nibble_offset & 1)
{
proto_tree_add_item(tree, hf_cdlmap_nep_code_1, tvb, dl_map_offset, 1, FALSE);
/* move to next byte */
dl_map_offset++;
proto_tree_add_item(tree, hf_cdlmap_nsch_code, tvb, dl_map_offset, 1, FALSE);
}
else
{
proto_tree_add_item(tree, hf_cdlmap_nep_code, tvb, dl_map_offset, 1, FALSE);
proto_tree_add_item(tree, hf_cdlmap_nsch_code_1, tvb, dl_map_offset, 1, FALSE);
/* move to next byte */
dl_map_offset++;
}
length += 2;
}
else if(harq_mode == 1)
{ /* display the Shortened DIUC and Companded SC */
if(nibble_offset & 1)
{
proto_tree_add_item(tree, hf_cdlmap_shortened_diuc_1, tvb, dl_map_offset, 2, FALSE);
proto_tree_add_item(tree, hf_cdlmap_companded_sc_1, tvb, dl_map_offset, 2, FALSE);
}
else
{
proto_tree_add_item(tree, hf_cdlmap_shortened_diuc, tvb, dl_map_offset, 1, FALSE);
proto_tree_add_item(tree, hf_cdlmap_companded_sc, tvb, dl_map_offset, 1, FALSE);
}
/* move to next byte */
dl_map_offset++;
length += 2;
}
/* display BIN offset */
if(nibble_offset & 1)
{
proto_tree_add_item(tree, hf_cdlmap_bin_offset_1, tvb, dl_map_offset, 2, FALSE);
/* move to next byte */
dl_map_offset++;
}
else
{
proto_tree_add_item(tree, hf_cdlmap_bin_offset, tvb, dl_map_offset, 1, FALSE);
/* move to next byte */
dl_map_offset++;
}
length += 2;
/* decode HARQ Control IE */
nibble_length = wimax_compact_dlmap_harq_control_ie_decoder(tree, pinfo, tvb, dl_map_offset, nibble_offset);
length += nibble_length;
dl_map_offset += ((nibble_offset + nibble_length) >> 1);
nibble_offset = ((nibble_offset + nibble_length) & 1);
/* decode CQICH Control IE */
nibble_length = wimax_compact_dlmap_cqich_control_ie_decoder(tree, pinfo, tvb, dl_map_offset, nibble_offset);
length += nibble_length;
dl_map_offset += ((nibble_offset + nibble_length) >> 1);
nibble_offset = ((nibble_offset + nibble_length) & 1);
if(ul_map_append)
{ /* check harq mode */
if(harq_mode == 1)
{ /* display the Shortened DIUC and Companded SC */
if(nibble_offset & 1)
{
proto_tree_add_item(tree, hf_cdlmap_shortened_diuc_1, tvb, dl_map_offset, 2, FALSE);
proto_tree_add_item(tree, hf_cdlmap_companded_sc_1, tvb, dl_map_offset, 2, FALSE);
}
else
{
proto_tree_add_item(tree, hf_cdlmap_shortened_diuc, tvb, dl_map_offset, 1, FALSE);
proto_tree_add_item(tree, hf_cdlmap_companded_sc, tvb, dl_map_offset, 1, FALSE);
}
/* move to next byte */
dl_map_offset++;
length += 2;
}
else if(!harq_mode)
{ /* display the Nep and Nsch Code */
if(nibble_offset & 1)
{
proto_tree_add_item(tree, hf_cdlmap_nep_code_1, tvb, dl_map_offset, 1, FALSE);
/* move to next byte */
dl_map_offset++;
proto_tree_add_item(tree, hf_cdlmap_nsch_code, tvb, dl_map_offset, 1, FALSE);
}
else
{
proto_tree_add_item(tree, hf_cdlmap_nep_code, tvb, dl_map_offset, 1, FALSE);
proto_tree_add_item(tree, hf_cdlmap_nsch_code_1, tvb, dl_map_offset, 1, FALSE);
/* move to next byte */
dl_map_offset++;
}
length += 2;
}
/* display BIN offset */
if(nibble_offset & 1)
{
proto_tree_add_item(tree, hf_cdlmap_bin_offset_1, tvb, dl_map_offset, 2, FALSE);
/* move to next byte */
dl_map_offset++;
}
else
{
proto_tree_add_item(tree, hf_cdlmap_bin_offset, tvb, dl_map_offset, 1, FALSE);
/* move to next byte */
dl_map_offset++;
}
length += 2;
/* decode HARQ Control IE */
nibble_length = wimax_compact_dlmap_harq_control_ie_decoder(tree, pinfo, tvb, dl_map_offset, nibble_offset);
length += nibble_length;
}
break;
case COMPACT_DL_MAP_TYPE_UIUC:/* 6.3.2.3.43.6.4 */
if(nibble_offset & 1)
{ /* display the DL-MAP type */
proto_tree_add_item(tree, hf_cdlmap_dl_map_type_1, tvb, dl_map_offset, 1, FALSE);
/* display the reserved */
proto_tree_add_item(tree, hf_cdlmap_reserved_1, tvb, dl_map_offset, 1, FALSE);
/* move to next byte */
dl_map_offset++;
/* get the new byte */
byte = tvb_get_guint8(tvb, dl_map_offset);
/* get the DIUC */
diuc = ((byte & MSB_NIBBLE_MASK) >> 4);
/* display the DIUC */
proto_tree_add_item(tree, hf_cdlmap_diuc, tvb, dl_map_offset, 1, FALSE);
}
else
{
/* display the DL-MAP type */
proto_tree_add_item(tree, hf_cdlmap_dl_map_type, tvb, dl_map_offset, 1, FALSE);
/* display the reserved */
proto_tree_add_item(tree, hf_cdlmap_reserved, tvb, dl_map_offset, 1, FALSE);
/* get the DIUC */
diuc = (tvb_get_guint8(tvb, dl_map_offset) & LSB_NIBBLE_MASK);
/* display the DIUC */
proto_tree_add_item(tree, hf_cdlmap_diuc_1, tvb, dl_map_offset, 1, FALSE);
/* move to next byte */
dl_map_offset++;
}
length = 2;
if(diuc == 15)
{ /* Extended DIUC dependent IE */
nibble_length = wimax_extended_diuc_dependent_ie_decoder(tree, pinfo, tvb, dl_map_offset, nibble_offset);
length += nibble_length;
dl_map_offset += (nibble_length >> 1);
nibble_offset = (nibble_length & 1);
}
else
{ /* decode RCID IE */
nibble_length = wimax_compact_dlmap_rcid_ie_decoder(tree, pinfo, tvb, dl_map_offset, nibble_offset);
length += nibble_length;
dl_map_offset += (nibble_length >> 1);
nibble_offset = (nibble_length & 1);
/* display Number of subchannels */
if(nibble_offset & 1)
proto_tree_add_item(tree, hf_cdlmap_diuc_num_of_subchannels_1, tvb, dl_map_offset, 1, FALSE);
else
proto_tree_add_item(tree, hf_cdlmap_diuc_num_of_subchannels, tvb, dl_map_offset, 1, FALSE);
length += 2;
/* display the repetition coding indication and reserved bits */
if(nibble_offset & 1)
{
proto_tree_add_item(tree, hf_cdlmap_diuc_repetition_coding_indication_1, tvb, dl_map_offset, 1, FALSE);
proto_tree_add_item(tree, hf_cdlmap_diuc_reserved_1, tvb, dl_map_offset, 1, FALSE);
}
else
{
proto_tree_add_item(tree, hf_cdlmap_diuc_repetition_coding_indication, tvb, dl_map_offset, 1, FALSE);
proto_tree_add_item(tree, hf_cdlmap_diuc_reserved, tvb, dl_map_offset, 1, FALSE);
}
length += 1;
}
/* decode HARQ Control IE */
nibble_length = wimax_compact_dlmap_harq_control_ie_decoder(tree, pinfo, tvb, dl_map_offset, nibble_offset);
length += nibble_length;
dl_map_offset += ((nibble_offset + nibble_length) >> 1);
nibble_offset = ((nibble_offset + nibble_length) & 1);
/* decode CQICH Control IE */
nibble_length = wimax_compact_dlmap_cqich_control_ie_decoder(tree, pinfo, tvb, dl_map_offset, nibble_offset);
length += nibble_length;
break;
case COMPACT_DL_MAP_TYPE_FORMAT_CONF_IE:/* 6.3.2.3.43.2 */
/* decode the format configuration IE */
nibble_length = wimax_compact_dlmap_format_configuration_ie_decoder(tree, pinfo, tvb, dl_map_offset, nibble_offset);
length = nibble_length;
break;
case COMPACT_DL_MAP_TYPE_HARQ_ACK_BITMAP_IE:/* 6.3.2.3.43.6.5 */
if(nibble_offset & 1)
{ /* display the DL-MAP type */
proto_tree_add_item(tree, hf_cdlmap_dl_map_type_1, tvb, dl_map_offset, 1, FALSE);
/* display the reserved */
proto_tree_add_item(tree, hf_cdlmap_reserved_1, tvb, dl_map_offset, 1, FALSE);
length = 1;
/* move to next byte */
dl_map_offset++;
/* get the bit map length */
byte = tvb_get_guint8(tvb, dl_map_offset);
bit_map_length = ((byte & MSB_NIBBLE_MASK) >> 4);
/* display BITMAP Length */
proto_tree_add_item(tree, hf_cdlmap_bit_map_length, tvb, dl_map_offset, 1, FALSE);
/* display BITMAP */
proto_tree_add_item(tree, hf_cdlmap_bit_map, tvb, dl_map_offset, bit_map_length + 1, FALSE);
length += (1 + bit_map_length * 2);
}
else
{
/* display the DL-MAP type */
proto_tree_add_item(tree, hf_cdlmap_dl_map_type, tvb, dl_map_offset, 1, FALSE);
/* display the reserved */
proto_tree_add_item(tree, hf_cdlmap_reserved, tvb, dl_map_offset, 1, FALSE);
/* display BITMAP Length */
proto_tree_add_item(tree, hf_cdlmap_bit_map_length_1, tvb, dl_map_offset, 1, FALSE);
length = 2;
/* get the bit map length */
bit_map_length = (byte & LSB_NIBBLE_MASK);
/* move to next byte */
dl_map_offset++;
/* display BITMAP */
proto_tree_add_item(tree, hf_cdlmap_bit_map, tvb, dl_map_offset, bit_map_length, FALSE);
length += (bit_map_length * 2);
}
break;
case COMPACT_DL_MAP_TYPE_EXTENSION:/* 6.3.2.3.43.6.6 */
/* decode the Compact DL-MAP externsion IE */
nibble_length = wimax_cdlmap_extension_ie_decoder(tree, pinfo, tvb, dl_map_offset, nibble_offset);//, cqich_indicator);
length = nibble_length;
break;
default:/* Reserved Type */
/* display the reserved type */
proto_tree_add_item(tree, hf_cdlmap_reserved_type_1, tvb, dl_map_offset, 1, FALSE);
length = 1;
break;
}
/* Update the nibble_offset and length */
return length;
}
/* Format Configuration IE shifts */
#define CID_TYPE_SHIFT 30
#define SAFETY_PATTERN_SHIFT 25
#define BAND_AMC_SUBCHANNEL_TYPE_SHIFT 23
#define MAX_LOGICAL_BANDS_SHIFT 21
#define NUM_BROADCAST_SYMBOLS_SHIFT 16
#define NUM_DL_AMC_SYMBOLS_SHIFT 10
#define NUM_UL_AMC_SYMBOLS_SHIFT 4
#define CID_TYPE_SHIFT_1 (CID_TYPE_SHIFT-NUM_UL_AMC_SYMBOLS_SHIFT)
#define SAFETY_PATTERN_SHIFT_1 (SAFETY_PATTERN_SHIFT-NUM_UL_AMC_SYMBOLS_SHIFT)
#define BAND_AMC_SUBCHANNEL_TYPE_SHIFT_1 (BAND_AMC_SUBCHANNEL_TYPE_SHIFT-NUM_UL_AMC_SYMBOLS_SHIFT)
#define MAX_LOGICAL_BANDS_SHIFT_1 (MAX_LOGICAL_BANDS_SHIFT-NUM_UL_AMC_SYMBOLS_SHIFT)
#define NUM_BROADCAST_SYMBOLS_SHIFT_1 (NUM_BROADCAST_SYMBOLS_SHIFT-NUM_UL_AMC_SYMBOLS_SHIFT)
#define NUM_DL_AMC_SYMBOLS_SHIFT_1 (NUM_DL_AMC_SYMBOLS_SHIFT-NUM_UL_AMC_SYMBOLS_SHIFT)
//#define NUM_UL_AMC_SYMBOLS_SHIFT_1 0
/* Compact DL-MAP Format Configuration IE (6.3.2.3.43.2) decoder */
static guint wimax_compact_dlmap_format_configuration_ie_decoder(proto_tree *tree, packet_info *pinfo, tvbuff_t *tvb, guint offset, guint nibble_offset)
{
guint length = 0;
guint dl_map_type, new_format_ind;
guint dl_map_offset;
guint32 tvb_value;
UNREFERENCED_PARAMETER(pinfo);
#ifdef DEBUG
/* update the info column */
if (check_col(pinfo->cinfo, COL_INFO))
{
col_append_sep_str(pinfo->cinfo, COL_INFO, NULL, "Format Configuration IE");
}
#endif
/* set the local offset */
dl_map_offset = offset;
/* Get the first byte */
tvb_value = tvb_get_guint8(tvb, dl_map_offset);
if(nibble_offset & 1)
{ /* get the DL-MAP type */
dl_map_type = ((tvb_value & DL_MAP_TYPE_MASK_1) >> 1);
/* ensure the dl-map type is Format Configuration IE */
if(dl_map_type != COMPACT_DL_MAP_TYPE_FORMAT_CONF_IE)
return 0;
new_format_ind = (tvb_value & 0x01);
/* display the DL-MAP type */
proto_tree_add_item(tree, hf_format_config_ie_dl_map_type_1, tvb, dl_map_offset, 1, FALSE);
/* display the New format Indication */
proto_tree_add_item(tree, hf_format_config_ie_new_format_indication_1, tvb, dl_map_offset, 1, FALSE);
/* update the length in nibble */
length = 1;
/* move to next byte */
dl_map_offset++;
if(new_format_ind)
{ /* display the CID Type */
proto_tree_add_item(tree, hf_format_config_ie_cid_type, tvb, dl_map_offset, 4, FALSE);
/* display the Safety Pattern */
proto_tree_add_item(tree, hf_format_config_ie_safety_pattern, tvb, dl_map_offset, 4, FALSE);
/* display the Subchannel pattern */
proto_tree_add_item(tree, hf_format_config_ie_subchannel_type, tvb, dl_map_offset, 4, FALSE);
/* display the max logical bands */
proto_tree_add_item(tree, hf_format_config_ie_max_logical_bands, tvb, dl_map_offset, 4, FALSE);
/* display the number of broadcast symbols */
proto_tree_add_item(tree, hf_format_config_ie_num_of_broadcast_symbol, tvb, dl_map_offset, 4, FALSE);
/* display the number of dl band AMC symbols */
proto_tree_add_item(tree, hf_format_config_ie_num_of_dl_band_amc_symbol, tvb, dl_map_offset, 4, FALSE);
/* display the number of ul band AMC symbols */
proto_tree_add_item(tree, hf_format_config_ie_num_of_ul_band_amc_symbol, tvb, dl_map_offset, 4, FALSE);
/* update the length in nibble */
length += 7;
/* Get the next 32-bit word */
tvb_value = tvb_get_ntohl(tvb, dl_map_offset);
/* get the CID type */
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -