diff options
author | Anders Broman <anders.broman@ericsson.com> | 2012-11-30 09:42:58 +0000 |
---|---|---|
committer | Anders Broman <anders.broman@ericsson.com> | 2012-11-30 09:42:58 +0000 |
commit | 79d8f9f5f97df714eae8117bd4a96dc06a71fd30 (patch) | |
tree | 732b94e506e7bd09794ba77b0af0b80069530a11 /epan | |
parent | 91576e1f70f9abb339769e3babbd09d7f6e913cd (diff) |
From Mike Morrin:
The gsm rlcmac dissector truncates the 12 bit BSNs to 8 bits when storing them.
Fix this and the handling of BSN2 is refactored to clarify the difference between BSN2 (the stored value) and BSN2_offset (the value transferred at the air interface).
svn path=/trunk/; revision=46301
Diffstat (limited to 'epan')
-rw-r--r-- | epan/dissectors/packet-gsm_rlcmac.c | 32 | ||||
-rw-r--r-- | epan/dissectors/packet-gsm_rlcmac.h | 16 |
2 files changed, 23 insertions, 25 deletions
diff --git a/epan/dissectors/packet-gsm_rlcmac.c b/epan/dissectors/packet-gsm_rlcmac.c index 8adb17fae4..1d0bd78e44 100644 --- a/epan/dissectors/packet-gsm_rlcmac.c +++ b/epan/dissectors/packet-gsm_rlcmac.c @@ -123,7 +123,7 @@ static int hf_uplink_tfi = -1; static int hf_downlink_tfi = -1; static int hf_page_mode = -1; static int hf_bsn = -1; -static int hf_bsn2 = -1; +static int hf_bsn2_offset = -1; static int hf_e = -1; static int hf_li= -1; static int hf_pi= -1; @@ -6084,10 +6084,10 @@ CSN_DESCR_BEGIN (UL_Data_Block_EGPRS_Header_Type1_t) M_SPLIT_BITS (UL_Data_Block_EGPRS_Header_Type1_t, BSN1, bits_spec_ul_bsn1, 11, &hf_bsn), M_BITS_CRUMB (UL_Data_Block_EGPRS_Header_Type1_t, BSN1, bits_spec_ul_bsn1, 1, &hf_bsn), M_BITS_CRUMB (UL_Data_Block_EGPRS_Header_Type1_t, TFI, bits_spec_ul_tfi, 0, &hf_uplink_tfi), - M_SPLIT_BITS (UL_Data_Block_EGPRS_Header_Type1_t, BSN2, bits_spec_ul_bsn2, 10, &hf_bsn2), - M_BITS_CRUMB (UL_Data_Block_EGPRS_Header_Type1_t, BSN2, bits_spec_ul_bsn2, 1, &hf_bsn2), + M_SPLIT_BITS (UL_Data_Block_EGPRS_Header_Type1_t, BSN2_offset, bits_spec_ul_bsn2, 10, &hf_bsn2_offset), + M_BITS_CRUMB (UL_Data_Block_EGPRS_Header_Type1_t, BSN2_offset, bits_spec_ul_bsn2, 1, &hf_bsn2_offset), M_BITS_CRUMB (UL_Data_Block_EGPRS_Header_Type1_t, BSN1, bits_spec_ul_bsn1, 0, &hf_bsn), - M_BITS_CRUMB (UL_Data_Block_EGPRS_Header_Type1_t, BSN2, bits_spec_ul_bsn2, 0, &hf_bsn2), + M_BITS_CRUMB (UL_Data_Block_EGPRS_Header_Type1_t, BSN2_offset, bits_spec_ul_bsn2, 0, &hf_bsn2_offset), M_UINT (UL_Data_Block_EGPRS_Header_Type1_t, SPARE1, 1, &hf_ul_data_spare), M_UINT (UL_Data_Block_EGPRS_Header_Type1_t, PI, 1, &hf_pi), M_UINT (UL_Data_Block_EGPRS_Header_Type1_t, RSB, 1, &hf_rsb), @@ -6186,11 +6186,11 @@ CSN_DESCR_BEGIN (DL_Data_Block_EGPRS_Header_Type1_t) M_UINT (DL_Data_Block_EGPRS_Header_Type1_t, Power_Reduction, 2, &hf_dl_ctrl_pr), M_BITS_CRUMB (DL_Data_Block_EGPRS_Header_Type1_t, TFI, bits_spec_dl_tfi, 0, &hf_downlink_tfi), M_BITS_CRUMB (DL_Data_Block_EGPRS_Header_Type1_t, BSN1, bits_spec_dl_type1_bsn1, 1, &hf_bsn), - M_SPLIT_BITS (DL_Data_Block_EGPRS_Header_Type1_t, BSN2, bits_spec_dl_type1_bsn2, 11, &hf_bsn2), - M_BITS_CRUMB (DL_Data_Block_EGPRS_Header_Type1_t, BSN2, bits_spec_dl_type1_bsn2, 1, &hf_bsn2), + M_SPLIT_BITS (DL_Data_Block_EGPRS_Header_Type1_t, BSN2_offset, bits_spec_dl_type1_bsn2, 11, &hf_bsn2_offset), + M_BITS_CRUMB (DL_Data_Block_EGPRS_Header_Type1_t, BSN2_offset, bits_spec_dl_type1_bsn2, 1, &hf_bsn2_offset), M_BITS_CRUMB (DL_Data_Block_EGPRS_Header_Type1_t, BSN1, bits_spec_dl_type1_bsn1, 0, &hf_bsn), M_UINT (DL_Data_Block_EGPRS_Header_Type1_t, CPS, 5, &hf_cps1), - M_BITS_CRUMB (DL_Data_Block_EGPRS_Header_Type1_t, BSN2, bits_spec_dl_type1_bsn2, 0, &hf_bsn2), + M_BITS_CRUMB (DL_Data_Block_EGPRS_Header_Type1_t, BSN2_offset, bits_spec_dl_type1_bsn2, 0, &hf_bsn2_offset), CSN_DESCR_END (DL_Data_Block_EGPRS_Header_Type1_t) CSN_DESCR_BEGIN (DL_Data_Block_EGPRS_Header_Type2_t) @@ -7411,7 +7411,8 @@ dissect_egprs_dl_header_block(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tre break; } ((RlcMacPrivateData_t *)(pinfo->private_data))->u.egprs_dl_header_info.bsn1 = data->u.DL_Data_Block_EGPRS_Header.BSN1; - ((RlcMacPrivateData_t *)(pinfo->private_data))->u.egprs_dl_header_info.bsn2 = data->u.DL_Data_Block_EGPRS_Header.BSN2; + ((RlcMacPrivateData_t *)(pinfo->private_data))->u.egprs_dl_header_info.bsn2 = + (data->u.DL_Data_Block_EGPRS_Header.BSN1 + data->u.DL_Data_Block_EGPRS_Header.BSN2_offset) % 2048; } } @@ -7594,7 +7595,8 @@ dissect_egprs_ul_header_block(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tre ((RlcMacPrivateData_t *)(pinfo->private_data))->u.egprs_ul_header_info.pi = data->u.UL_Data_Block_EGPRS_Header.PI; ((RlcMacPrivateData_t *)(pinfo->private_data))->u.egprs_ul_header_info.bsn1 = data->u.UL_Data_Block_EGPRS_Header.BSN1; - ((RlcMacPrivateData_t *)(pinfo->private_data))->u.egprs_ul_header_info.bsn2 = data->u.UL_Data_Block_EGPRS_Header.BSN2; + ((RlcMacPrivateData_t *)(pinfo->private_data))->u.egprs_ul_header_info.bsn2 = + (data->u.UL_Data_Block_EGPRS_Header.BSN1 + data->u.UL_Data_Block_EGPRS_Header.BSN2_offset) % 2048; } } @@ -7609,7 +7611,7 @@ dissect_egprs_ul_data_block(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint64 e, tlli_i; guint16 block_number; - block_number = (data->flags & GSM_RLC_MAC_EGPRS_BLOCK2)?(egprs_ul_header_info->bsn1 + egprs_ul_header_info->bsn2) % 1024:egprs_ul_header_info->bsn1; + block_number = (data->flags & GSM_RLC_MAC_EGPRS_BLOCK2)?egprs_ul_header_info->bsn2:egprs_ul_header_info->bsn1; col_append_sep_str(pinfo->cinfo, COL_INFO, ":", "DATA BLOCK"); ti = proto_tree_add_protocol_format(tree, proto_gsm_rlcmac, tvb, offset, -1, @@ -7668,11 +7670,7 @@ dissect_egprs_dl_data_block(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint8 li_count = array_length(li_array); guint64 fbi, e; - block_number = egprs_dl_header_info->bsn1; - if (data->flags & GSM_RLC_MAC_EGPRS_BLOCK2) - { - block_number = (block_number + egprs_dl_header_info->bsn2) % 1024; - } + block_number = (data->flags & GSM_RLC_MAC_EGPRS_BLOCK2)?egprs_dl_header_info->bsn2:egprs_dl_header_info->bsn1; col_append_sep_str(pinfo->cinfo, COL_INFO, ":", "DATA BLOCK"); ti = proto_tree_add_protocol_format(tree, proto_gsm_rlcmac, tvb, offset, -1, @@ -7837,8 +7835,8 @@ proto_register_gsm_rlcmac(void) NULL, HFILL } }, - { &hf_bsn2, - { "BSN 2 offset", "gsm_rlcmac.bsn2", + { &hf_bsn2_offset, + { "BSN 2 offset", "gsm_rlcmac.bsn2_offset", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } diff --git a/epan/dissectors/packet-gsm_rlcmac.h b/epan/dissectors/packet-gsm_rlcmac.h index ae7e2dcab7..36fe54c711 100644 --- a/epan/dissectors/packet-gsm_rlcmac.h +++ b/epan/dissectors/packet-gsm_rlcmac.h @@ -4873,8 +4873,8 @@ typedef struct guint8 RRBP; guint8 ES_P; guint8 USF; - guint8 BSN1; - guint8 BSN2; + guint16 BSN1; + guint16 BSN2_offset; guint8 Power_Reduction; guint8 SPB; guint8 CPS; @@ -4891,8 +4891,8 @@ typedef struct guint8 Countdown_Value; guint8 SI; guint8 R; - guint8 BSN1; - guint8 BSN2; + guint16 BSN1; + guint16 BSN2_offset; guint8 PI; guint8 RSB; guint8 SPB; @@ -5080,15 +5080,15 @@ typedef struct typedef struct { - guint8 bsn1; - guint8 bsn2; + guint16 bsn1; + guint16 bsn2; guint8 pi; }egprs_ul_header_info_t; typedef struct { - guint8 bsn1; - guint8 bsn2; + guint16 bsn1; + guint16 bsn2; }egprs_dl_header_info_t; typedef struct |