diff options
author | Ivan Kluchnikov <kluchnikovi@gmail.com> | 2012-10-10 19:43:37 +0400 |
---|---|---|
committer | Ivan Kluchnikov <kluchnikovi@gmail.com> | 2012-10-10 19:43:37 +0400 |
commit | 701d9f83f84aa8c51b49c23f196776b56fda15e0 (patch) | |
tree | 7e107394bb4165941b6c67e3e685f74e60d55241 /src/gsm_rlcmac.cpp | |
parent | 9eb552b2399a714495cff4b7dc38c70b133342bb (diff) |
Ported fixes and improvements from Wireshark for RLC/MAC control block decoding. Part 1.
Generic improvements to the csn.1 dissector include:
• Added a flag to the type descriptor structure so that any type can (potentially) flagged as xxx_OR_NULL. This was specifically needed for UINT_OR_NULL for the ms capabilities struct.
• Changed the CSN_SERIALIZE so that the length of the length field can be specified.
• For CSN_NEXT_EXIST removed the requirement that the next type be CSN_END, to allow truncation of multiple IEs.
• For CSN_LEFT_ALIGNED_VAR_BITMAP corrected the handling of bit_offset.
• Added a new type CSN_PADDING_BITS to make inspection of padding bits more convenient.
• Improved the CSN_RECURSIVE_TARRAY_1 to show the array index.
Improvements to the gsm_rlcmac dissector include:
• Rework the definition of EGPRS Ack/Nack Description so that the length IE (and absence thereof) is handled correctly.
• Added Padding Bits definitions to all PDUs
• Change the Multislot_capability_t and Content_t definitions to allow truncation at any IE
Diffstat (limited to 'src/gsm_rlcmac.cpp')
-rw-r--r-- | src/gsm_rlcmac.cpp | 192 |
1 files changed, 135 insertions, 57 deletions
diff --git a/src/gsm_rlcmac.cpp b/src/gsm_rlcmac.cpp index e4afd7b9..a39a5c06 100644 --- a/src/gsm_rlcmac.cpp +++ b/src/gsm_rlcmac.cpp @@ -166,22 +166,47 @@ CSN_DESCR_BEGIN(Channel_Quality_Report_t) M_UINT (Channel_Quality_Report_t, Slot[7].I_LEVEL_TN, 4), CSN_DESCR_END (Channel_Quality_Report_t) -/*< EGPRS Ack/Nack Description >*/ +/*< EGPRS Ack/Nack Description struct >*/ static const -CSN_DESCR_BEGIN (EGPRS_AckNack_t) - M_NEXT_EXIST (EGPRS_AckNack_t, Exist_LENGTH, 1), - M_UINT (EGPRS_AckNack_t, LENGTH, 8), +CSN_DESCR_BEGIN (EGPRS_AckNack_Desc_t) + M_UINT (EGPRS_AckNack_Desc_t, FINAL_ACK_INDICATION, 1), + M_UINT (EGPRS_AckNack_Desc_t, BEGINNING_OF_WINDOW, 1), + M_UINT (EGPRS_AckNack_Desc_t, END_OF_WINDOW, 1), + M_UINT (EGPRS_AckNack_Desc_t, STARTING_SEQUENCE_NUMBER, 11), - M_UINT (EGPRS_AckNack_t, FINAL_ACK_INDICATION, 1), - M_UINT (EGPRS_AckNack_t, BEGINNING_OF_WINDOW, 1), - M_UINT (EGPRS_AckNack_t, END_OF_WINDOW, 1), - M_UINT (EGPRS_AckNack_t, STARTING_SEQUENCE_NUMBER, 11), + M_NEXT_EXIST (EGPRS_AckNack_Desc_t, Exist_CRBB, 3), + M_UINT (EGPRS_AckNack_Desc_t, CRBB_LENGTH, 7), + M_UINT (EGPRS_AckNack_Desc_t, CRBB_STARTING_COLOR_CODE, 1), + M_LEFT_VAR_BMP (EGPRS_AckNack_Desc_t, CRBB, CRBB_LENGTH, 0), - M_NEXT_EXIST (EGPRS_AckNack_t, Exist_CRBB, 3), - M_UINT (EGPRS_AckNack_t, CRBB_LENGTH, 7), - M_UINT (EGPRS_AckNack_t, CRBB_STARTING_COLOR_CODE, 1), - M_LEFT_VAR_BMP (EGPRS_AckNack_t, CRBB, CRBB_LENGTH, 0), -CSN_DESCR_END (EGPRS_AckNack_t) + M_LEFT_VAR_BMP_1(EGPRS_AckNack_Desc_t, URBB, URBB_LENGTH, 0), +CSN_DESCR_END (EGPRS_AckNack_Desc_t) + +/*< EGPRS Ack/Nack Description IE >*/ +gint16 Egprs_Ack_Nack_Desc_w_len_Dissector(csnStream_t* ar, bitvec *vector, unsigned& readIndex, void* data) +{ + if (ar->direction == 0) + { + return csnStreamEncoder(ar, CSNDESCR(EGPRS_AckNack_Desc_t), vector, readIndex, data); + } + else + { + return csnStreamDecoder(ar, CSNDESCR(EGPRS_AckNack_Desc_t), vector, readIndex, data); + } +} + +/* this intermediate structure is only required because M_SERIALIZE cannot be used as a member of M_UNION */ +static const +CSN_DESCR_BEGIN(EGPRS_AckNack_w_len_t) + M_SERIALIZE (EGPRS_AckNack_w_len_t, Desc, 8, Egprs_Ack_Nack_Desc_w_len_Dissector), +CSN_DESCR_END (EGPRS_AckNack_w_len_t) + +static const +CSN_DESCR_BEGIN(EGPRS_AckNack_t) + M_UNION (EGPRS_AckNack_t, 2), + M_TYPE (EGPRS_AckNack_t, Desc, EGPRS_AckNack_Desc_t), + M_TYPE (EGPRS_AckNack_t, Desc, EGPRS_AckNack_w_len_t), +CSN_DESCR_END (EGPRS_AckNack_t) /*<P1 Rest Octets>*/ /*<P2 Rest Octets>*/ @@ -517,6 +542,7 @@ CSN_DESCR_BEGIN(Packet_Polling_Request_t) M_UINT (Packet_Polling_Request_t, PAGE_MODE, 2), M_TYPE (Packet_Polling_Request_t, ID, PacketPollingID_t), M_BIT (Packet_Polling_Request_t, TYPE_OF_ACK), + M_PADDING_BITS(Packet_Polling_Request_t), CSN_DESCR_END (Packet_Polling_Request_t) static const @@ -652,6 +678,7 @@ CSN_DESCR_BEGIN(Packet_TBF_Release_t) M_BIT (Packet_TBF_Release_t, UPLINK_RELEASE), M_BIT (Packet_TBF_Release_t, DOWNLINK_RELEASE), M_UINT (Packet_TBF_Release_t, TBF_RELEASE_CAUSE, 4), + M_PADDING_BITS(Packet_TBF_Release_t ), CSN_DESCR_END (Packet_TBF_Release_t) /*< Packet Control Acknowledgement message content >*/ @@ -684,6 +711,7 @@ CSN_DESCR_BEGIN (Packet_Control_Acknowledgement_t) M_UINT (Packet_Control_Acknowledgement_t, CTRL_ACK, 2), M_NEXT_EXIST_OR_NULL (Packet_Control_Acknowledgement_t, Exist_AdditionsR5, 1), M_TYPE (Packet_Control_Acknowledgement_t, AdditionsR5, Packet_Control_Acknowledgement_AdditionsR5_t), + M_PADDING_BITS (Packet_Control_Acknowledgement_t), CSN_DESCR_END (Packet_Control_Acknowledgement_t) /*< Packet Downlink Dummy Control Block message content >*/ @@ -694,6 +722,7 @@ CSN_DESCR_BEGIN(Packet_Downlink_Dummy_Control_Block_t) M_NEXT_EXIST (Packet_Downlink_Dummy_Control_Block_t, Exist_PERSISTENCE_LEVEL, 1), M_UINT_ARRAY (Packet_Downlink_Dummy_Control_Block_t, PERSISTENCE_LEVEL, 4, 4), + M_PADDING_BITS(Packet_Downlink_Dummy_Control_Block_t ), CSN_DESCR_END (Packet_Downlink_Dummy_Control_Block_t) /*< Packet Uplink Dummy Control Block message content >*/ @@ -706,6 +735,7 @@ CSN_DESCR_BEGIN(Packet_Uplink_Dummy_Control_Block_t) M_UINT (Packet_Uplink_Dummy_Control_Block_t, MESSAGE_TYPE, 6), M_UINT (Packet_Uplink_Dummy_Control_Block_t, TLLI, 32), /*M_FIXED (Packet_Uplink_Dummy_Control_Block_t, 1, 0),*/ + M_PADDING_BITS(Packet_Uplink_Dummy_Control_Block_t), CSN_DESCR_END (Packet_Uplink_Dummy_Control_Block_t) static const @@ -728,7 +758,7 @@ gint16 Receive_N_PDU_Number_list_Dissector(csnStream_t* ar, bitvec *vector, unsi static const CSN_DESCR_BEGIN(Receive_N_PDU_Number_list_t) - M_SERIALIZE (Receive_N_PDU_Number_list_t, IEI, Receive_N_PDU_Number_list_Dissector), + M_SERIALIZE (Receive_N_PDU_Number_list_t, IEI, 7, Receive_N_PDU_Number_list_Dissector), M_VAR_TARRAY (Receive_N_PDU_Number_list_t, Receive_N_PDU_Number, Receive_N_PDU_Number_t, Count_Receive_N_PDU_Number), CSN_DESCR_END (Receive_N_PDU_Number_list_t) @@ -747,25 +777,25 @@ CSN_DESCR_END (DTM_EGPRS_HighMultislotClass_t) static const CSN_DESCR_BEGIN (Multislot_capability_t) - M_NEXT_EXIST (Multislot_capability_t, Exist_HSCSD_multislot_class, 1), + M_NEXT_EXIST_OR_NULL(Multislot_capability_t, Exist_HSCSD_multislot_class, 1), M_UINT (Multislot_capability_t, HSCSD_multislot_class, 5), - M_NEXT_EXIST (Multislot_capability_t, Exist_GPRS_multislot_class, 2), + M_NEXT_EXIST_OR_NULL(Multislot_capability_t, Exist_GPRS_multislot_class, 2), M_UINT (Multislot_capability_t, GPRS_multislot_class, 5), M_UINT (Multislot_capability_t, GPRS_Extended_Dynamic_Allocation_Capability, 1), - M_NEXT_EXIST (Multislot_capability_t, Exist_SM, 2), + M_NEXT_EXIST_OR_NULL(Multislot_capability_t, Exist_SM, 2), M_UINT (Multislot_capability_t, SMS_VALUE, 4), M_UINT (Multislot_capability_t, SM_VALUE, 4), - M_NEXT_EXIST (Multislot_capability_t, Exist_ECSD_multislot_class, 1), + M_NEXT_EXIST_OR_NULL(Multislot_capability_t, Exist_ECSD_multislot_class, 1), M_UINT (Multislot_capability_t, ECSD_multislot_class, 5), - M_NEXT_EXIST (Multislot_capability_t, Exist_EGPRS_multislot_class, 2), + M_NEXT_EXIST_OR_NULL(Multislot_capability_t, Exist_EGPRS_multislot_class, 2), M_UINT (Multislot_capability_t, EGPRS_multislot_class, 5), M_UINT (Multislot_capability_t, EGPRS_Extended_Dynamic_Allocation_Capability, 1), - M_NEXT_EXIST (Multislot_capability_t, Exist_DTM_GPRS_multislot_class, 3), + M_NEXT_EXIST_OR_NULL(Multislot_capability_t, Exist_DTM_GPRS_multislot_class, 3), M_UINT (Multislot_capability_t, DTM_GPRS_multislot_class, 2), M_UINT (Multislot_capability_t, Single_Slot_DTM, 1), M_TYPE (Multislot_capability_t, DTM_EGPRS_Params, DTM_EGPRS_t), @@ -775,54 +805,54 @@ static const CSN_DESCR_BEGIN (Content_t) M_UINT (Content_t, RF_Power_Capability, 3), - M_NEXT_EXIST (Content_t, Exist_A5_bits, 1), - M_UINT (Content_t, A5_bits, 7), + M_NEXT_EXIST_OR_NULL(Content_t, Exist_A5_bits, 1), + M_UINT_OR_NULL (Content_t, A5_bits, 7), - M_UINT (Content_t, ES_IND, 1), - M_UINT (Content_t, PS, 1), - M_UINT (Content_t, VGCS, 1), - M_UINT (Content_t, VBS, 1), + M_UINT_OR_NULL (Content_t, ES_IND, 1), + M_UINT_OR_NULL (Content_t, PS, 1), + M_UINT_OR_NULL (Content_t, VGCS, 1), + M_UINT_OR_NULL (Content_t, VBS, 1), M_NEXT_EXIST_OR_NULL(Content_t, Exist_Multislot_capability, 1), M_TYPE (Content_t, Multislot_capability, Multislot_capability_t), - M_NEXT_EXIST (Content_t, Exist_Eight_PSK_Power_Capability, 1), + M_NEXT_EXIST_OR_NULL(Content_t, Exist_Eight_PSK_Power_Capability, 1), M_UINT (Content_t, Eight_PSK_Power_Capability, 2), - M_UINT (Content_t, COMPACT_Interference_Measurement_Capability, 1), - M_UINT (Content_t, Revision_Level_Indicator, 1), - M_UINT (Content_t, UMTS_FDD_Radio_Access_Technology_Capability, 1), - M_UINT (Content_t, UMTS_384_TDD_Radio_Access_Technology_Capability, 1), - M_UINT (Content_t, CDMA2000_Radio_Access_Technology_Capability, 1), + M_UINT_OR_NULL (Content_t, COMPACT_Interference_Measurement_Capability, 1), + M_UINT_OR_NULL (Content_t, Revision_Level_Indicator, 1), + M_UINT_OR_NULL (Content_t, UMTS_FDD_Radio_Access_Technology_Capability, 1), + M_UINT_OR_NULL (Content_t, UMTS_384_TDD_Radio_Access_Technology_Capability, 1), + M_UINT_OR_NULL (Content_t, CDMA2000_Radio_Access_Technology_Capability, 1), - M_UINT (Content_t, UMTS_128_TDD_Radio_Access_Technology_Capability, 1), - M_UINT (Content_t, GERAN_Feature_Package_1, 1), + M_UINT_OR_NULL (Content_t, UMTS_128_TDD_Radio_Access_Technology_Capability, 1), + M_UINT_OR_NULL (Content_t, GERAN_Feature_Package_1, 1), - M_NEXT_EXIST (Content_t, Exist_Extended_DTM_multislot_class, 2), + M_NEXT_EXIST_OR_NULL(Content_t, Exist_Extended_DTM_multislot_class, 2), M_UINT (Content_t, Extended_DTM_GPRS_multislot_class, 2), M_UINT (Content_t, Extended_DTM_EGPRS_multislot_class, 2), - M_UINT (Content_t, Modulation_based_multislot_class_support, 1), + M_UINT_OR_NULL (Content_t, Modulation_based_multislot_class_support, 1), - M_NEXT_EXIST (Content_t, Exist_HighMultislotCapability, 1), + M_NEXT_EXIST_OR_NULL(Content_t, Exist_HighMultislotCapability, 1), M_UINT (Content_t, HighMultislotCapability, 2), - M_NEXT_EXIST (Content_t, Exist_GERAN_lu_ModeCapability, 1), + M_NEXT_EXIST_OR_NULL(Content_t, Exist_GERAN_lu_ModeCapability, 1), M_UINT (Content_t, GERAN_lu_ModeCapability, 4), - M_UINT (Content_t, GMSK_MultislotPowerProfile, 2), - M_UINT (Content_t, EightPSK_MultislotProfile, 2), + M_UINT_OR_NULL (Content_t, GMSK_MultislotPowerProfile, 2), + M_UINT_OR_NULL (Content_t, EightPSK_MultislotProfile, 2), - M_UINT (Content_t, MultipleTBF_Capability, 1), - M_UINT (Content_t, DownlinkAdvancedReceiverPerformance, 2), - M_UINT (Content_t, ExtendedRLC_MAC_ControlMessageSegmentionsCapability, 1), - M_UINT (Content_t, DTM_EnhancementsCapability, 1), + M_UINT_OR_NULL (Content_t, MultipleTBF_Capability, 1), + M_UINT_OR_NULL (Content_t, DownlinkAdvancedReceiverPerformance, 2), + M_UINT_OR_NULL (Content_t, ExtendedRLC_MAC_ControlMessageSegmentionsCapability, 1), + M_UINT_OR_NULL (Content_t, DTM_EnhancementsCapability, 1), - M_NEXT_EXIST (Content_t, Exist_DTM_GPRS_HighMultislotClass, 2), + M_NEXT_EXIST_OR_NULL(Content_t, Exist_DTM_GPRS_HighMultislotClass, 2), M_UINT (Content_t, DTM_GPRS_HighMultislotClass, 3), M_TYPE (Content_t, DTM_EGPRS_HighMultislotClass, DTM_EGPRS_HighMultislotClass_t), - M_UINT (Content_t, PS_HandoverCapability, 1), + M_UINT_OR_NULL (Content_t, PS_HandoverCapability, 1), CSN_DESCR_END (Content_t) gint16 Content_Dissector(csnStream_t* ar, bitvec *vector, unsigned& readIndex, void* data) @@ -864,12 +894,12 @@ gint16 Additional_access_technologies_Dissector(csnStream_t* ar, bitvec* vector, static const CSN_ChoiceElement_t MS_RA_capability_value_Choice[] = { - {4, AccTech_GSMP, M_SERIALIZE (MS_RA_capability_value_t, u.Content, Content_Dissector)}, /* Long Form */ - {4, AccTech_GSME, M_SERIALIZE (MS_RA_capability_value_t, u.Content, Content_Dissector)}, /* Long Form */ - {4, AccTech_GSM1800, M_SERIALIZE (MS_RA_capability_value_t, u.Content, Content_Dissector)}, /* Long Form */ - {4, AccTech_GSM1900, M_SERIALIZE (MS_RA_capability_value_t, u.Content, Content_Dissector)}, /* Long Form */ - {4, AccTech_GSM850, M_SERIALIZE (MS_RA_capability_value_t, u.Content, Content_Dissector)}, /* Long Form */ - {4, AccTech_GSMOther, M_SERIALIZE (MS_RA_capability_value_t, u.Additional_access_technologies, Additional_access_technologies_Dissector)}, /* Short Form */ + {4, AccTech_GSMP, M_SERIALIZE (MS_RA_capability_value_t, u.Content, 7, Content_Dissector)}, /* Long Form */ + {4, AccTech_GSME, M_SERIALIZE (MS_RA_capability_value_t, u.Content, 7, Content_Dissector)}, /* Long Form */ + {4, AccTech_GSM1800, M_SERIALIZE (MS_RA_capability_value_t, u.Content, 7, Content_Dissector)}, /* Long Form */ + {4, AccTech_GSM1900, M_SERIALIZE (MS_RA_capability_value_t, u.Content, 7, Content_Dissector)}, /* Long Form */ + {4, AccTech_GSM850, M_SERIALIZE (MS_RA_capability_value_t, u.Content, 7, Content_Dissector)}, /* Long Form */ + {4, AccTech_GSMOther, M_SERIALIZE (MS_RA_capability_value_t, u.Additional_access_technologies, 7, Additional_access_technologies_Dissector)}, /* Short Form */ }; static const @@ -883,7 +913,7 @@ CSN_DESCR_BEGIN (MS_Radio_Access_capability_t) /*M_UINT (MS_Radio_Access_capability_t, IEI, 8),*/ /*M_UINT (MS_Radio_Access_capability_t, Length, 8),*/ - M_REC_TARRAY_1(MS_Radio_Access_capability_t, MS_RA_capability_value[0], MS_RA_capability_value_t, Count_MS_RA_capability_value), + M_REC_TARRAY_1(MS_Radio_Access_capability_t, MS_RA_capability_value, MS_RA_capability_value_t, Count_MS_RA_capability_value), CSN_DESCR_END (MS_Radio_Access_capability_t) /*< MS Classmark 3 IE >*/ @@ -1111,6 +1141,7 @@ CSN_DESCR_BEGIN (Packet_Resource_Request_t) M_NEXT_EXIST_OR_NULL(Packet_Resource_Request_t, Exist_AdditionsR99, 1), M_TYPE (Packet_Resource_Request_t, AdditionsR99, PRR_AdditionsR99_t), + M_PADDING_BITS (Packet_Resource_Request_t), CSN_DESCR_END (Packet_Resource_Request_t) /*< Packet Mobile TBF Status message content > */ @@ -1128,6 +1159,7 @@ CSN_DESCR_BEGIN(Packet_Mobile_TBF_Status_t) M_NEXT_EXIST (Packet_Mobile_TBF_Status_t, Exist_STATUS_MESSAGE_TYPE, 1), M_UINT (Packet_Mobile_TBF_Status_t, STATUS_MESSAGE_TYPE, 6), + M_PADDING_BITS(Packet_Mobile_TBF_Status_t), CSN_DESCR_END (Packet_Mobile_TBF_Status_t) /*< Packet PSI Status message content > */ @@ -1166,6 +1198,7 @@ CSN_DESCR_BEGIN(Packet_PSI_Status_t) M_UINT (Packet_PSI_Status_t, PBCCH_CHANGE_MARK, 3), M_TYPE (Packet_PSI_Status_t, PSI_Message_List, PSI_Message_List_t), M_TYPE (Packet_PSI_Status_t, Unknown_PSI_Message_List, Unknown_PSI_Message_List_t), + M_PADDING_BITS(Packet_PSI_Status_t), CSN_DESCR_END (Packet_PSI_Status_t) /* < Packet SI Status message content > */ @@ -1202,6 +1235,7 @@ CSN_DESCR_BEGIN(Packet_SI_Status_t) M_UINT (Packet_SI_Status_t, BCCH_CHANGE_MARK, 3), M_TYPE (Packet_SI_Status_t, SI_Message_List, SI_Message_List_t), M_TYPE (Packet_SI_Status_t, Unknown_SI_Message_List, Unknown_SI_Message_List_t), + M_PADDING_BITS(Packet_SI_Status_t), CSN_DESCR_END (Packet_SI_Status_t) /* < Packet Downlink Ack/Nack message content > */ @@ -1227,6 +1261,7 @@ CSN_DESCR_BEGIN (Packet_Downlink_Ack_Nack_t) M_NEXT_EXIST_OR_NULL(Packet_Downlink_Ack_Nack_t, Exist_AdditionsR99, 1), M_TYPE (Packet_Downlink_Ack_Nack_t, AdditionsR99, PD_AckNack_AdditionsR99_t), + M_PADDING_BITS (Packet_Downlink_Ack_Nack_t), CSN_DESCR_END (Packet_Downlink_Ack_Nack_t) @@ -1263,7 +1298,7 @@ CSN_DESCR_BEGIN(EGPRS_PD_AckNack_t) M_TYPE (EGPRS_PD_AckNack_t, EGPRS_AckNack, EGPRS_AckNack_t), /* M_CALLBACK (EGPRS_PD_AckNack_t, (void*)24, EGPRS_AckNack, EGPRS_AckNack), */ - M_LEFT_VAR_BMP (EGPRS_PD_AckNack_t, EGPRS_AckNack.URBB, EGPRS_AckNack.URBB_LENGTH, 0), + M_PADDING_BITS(EGPRS_PD_AckNack_t), CSN_DESCR_END (EGPRS_PD_AckNack_t) @@ -1360,6 +1395,8 @@ CSN_DESCR_BEGIN(Packet_Cell_Change_Failure_t) M_NEXT_EXIST_OR_NULL (Packet_Cell_Change_Failure_t, Exist_AdditionsR99, 1), M_TYPE (Packet_Cell_Change_Failure_t, AdditionsR99, PCCF_AdditionsR99_t), + + M_PADDING_BITS (Packet_Cell_Change_Failure_t), CSN_DESCR_END (Packet_Cell_Change_Failure_t) /*< Packet Uplink Ack/Nack message content > */ @@ -1452,7 +1489,6 @@ CSN_DESCR_BEGIN(PU_AckNack_EGPRS_00_t) M_TYPE (PU_AckNack_EGPRS_00_t, EGPRS_AckNack, EGPRS_AckNack_t), /* M_CALLBACK (PU_AckNack_EGPRS_00_t, (void*)24, EGPRS_AckNack, EGPRS_AckNack), */ - M_LEFT_VAR_BMP (PU_AckNack_EGPRS_00_t, EGPRS_AckNack.URBB, EGPRS_AckNack.URBB_LENGTH, 0), CSN_DESCR_END (PU_AckNack_EGPRS_00_t) static const @@ -1475,6 +1511,7 @@ CSN_DESCR_BEGIN(Packet_Uplink_Ack_Nack_t) M_UNION (Packet_Uplink_Ack_Nack_t, 2), M_TYPE (Packet_Uplink_Ack_Nack_t, u.PU_AckNack_GPRS_Struct, PU_AckNack_GPRS_t), M_TYPE (Packet_Uplink_Ack_Nack_t, u.PU_AckNack_EGPRS_Struct, PU_AckNack_EGPRS_t), + M_PADDING_BITS(Packet_Uplink_Ack_Nack_t ), CSN_DESCR_END (Packet_Uplink_Ack_Nack_t) /*< Packet Uplink Assignment message content > */ @@ -1813,6 +1850,8 @@ CSN_DESCR_BEGIN(Packet_Uplink_Assignment_t) M_UNION (Packet_Uplink_Assignment_t, 2), M_TYPE (Packet_Uplink_Assignment_t, u.PUA_GPRS_Struct, PUA_GPRS_t), M_TYPE (Packet_Uplink_Assignment_t, u.PUA_EGPRS_Struct, PUA_EGPRS_t), + + M_PADDING_BITS(Packet_Uplink_Assignment_t ), CSN_DESCR_END (Packet_Uplink_Assignment_t) /*< Packet Downlink Assignment message content > */ @@ -1890,6 +1929,8 @@ CSN_DESCR_BEGIN (Packet_Downlink_Assignment_t) M_NEXT_EXIST_OR_NULL(Packet_Downlink_Assignment_t, Exist_AdditionsR99, 1), M_TYPE (Packet_Downlink_Assignment_t, AdditionsR99, PDA_AdditionsR99_t), + + M_PADDING_BITS (Packet_Downlink_Assignment_t), CSN_DESCR_END (Packet_Downlink_Assignment_t) typedef Packet_Downlink_Assignment_t pdlaCheck_t; @@ -2034,6 +2075,7 @@ CSN_DESCR_BEGIN(Packet_Paging_Request_t) M_UINT (Packet_Paging_Request_t, NLN, 2), M_REC_TARRAY (Packet_Paging_Request_t, Repeated_Page_info, Repeated_Page_info_t, Count_Repeated_Page_info), + M_PADDING_BITS(Packet_Paging_Request_t), CSN_DESCR_END (Packet_Paging_Request_t) static const @@ -2043,6 +2085,7 @@ CSN_DESCR_BEGIN(Packet_PDCH_Release_t) M_FIXED (Packet_PDCH_Release_t, 1, 0x01), M_UINT (Packet_PDCH_Release_t, TIMESLOTS_AVAILABLE, 8), + M_PADDING_BITS(Packet_PDCH_Release_t), CSN_DESCR_END (Packet_PDCH_Release_t) /*< Packet Power Control/Timing Advance message content >*/ @@ -2088,6 +2131,8 @@ CSN_DESCR_BEGIN(Packet_Power_Control_Timing_Advance_t) M_UNION (Packet_Power_Control_Timing_Advance_t, 2), M_TYPE (Packet_Power_Control_Timing_Advance_t, u.GlobalTimingAndPower, GlobalTimingAndPower_t), M_TYPE (Packet_Power_Control_Timing_Advance_t, u.GlobalTimingOrPower, GlobalTimingOrPower_t), + + M_PADDING_BITS(Packet_Power_Control_Timing_Advance_t), CSN_DESCR_END (Packet_Power_Control_Timing_Advance_t) /*< Packet Queueing Notification message content > */ @@ -2100,6 +2145,7 @@ CSN_DESCR_BEGIN(Packet_Queueing_Notification_t) M_TYPE (Packet_Queueing_Notification_t, Packet_Request_Reference, Packet_Request_Reference_t), M_UINT (Packet_Queueing_Notification_t, TQI, 16), + M_PADDING_BITS(Packet_Queueing_Notification_t), CSN_DESCR_END (Packet_Queueing_Notification_t) /* USED in Packet Timeslot Reconfigure message content @@ -2220,6 +2266,8 @@ CSN_DESCR_BEGIN(Packet_Timeslot_Reconfigure_t) M_UNION (Packet_Timeslot_Reconfigure_t, 2), M_TYPE (Packet_Timeslot_Reconfigure_t, u.PTR_GPRS_Struct, PTR_GPRS_t), M_TYPE (Packet_Timeslot_Reconfigure_t, u.PTR_EGPRS_Struct, PTR_EGPRS_t), + + M_PADDING_BITS(Packet_Timeslot_Reconfigure_t), CSN_DESCR_END (Packet_Timeslot_Reconfigure_t) typedef Packet_Timeslot_Reconfigure_t PTRCheck_t; @@ -2332,6 +2380,7 @@ CSN_DESCR_BEGIN(Packet_PRACH_Parameters_t) M_UINT (Packet_PRACH_Parameters_t, PAGE_MODE, 2), M_TYPE (Packet_PRACH_Parameters_t, PRACH_Control, PRACH_Control_t), + M_PADDING_BITS(Packet_PRACH_Parameters_t), CSN_DESCR_END (Packet_PRACH_Parameters_t) /* < Packet Access Reject message content > */ @@ -2364,6 +2413,7 @@ CSN_DESCR_BEGIN(Packet_Access_Reject_t) M_TYPE (Packet_Access_Reject_t, Reject, Reject_t), M_REC_TARRAY (Packet_Access_Reject_t, Reject[1], Reject_t, Count_Reject), + M_PADDING_BITS(Packet_Access_Reject_t), CSN_DESCR_END (Packet_Access_Reject_t) /* < Packet Cell Change Order message content > */ @@ -3273,6 +3323,8 @@ CSN_DESCR_BEGIN(Packet_Cell_Change_Order_t) M_UNION (Packet_Cell_Change_Order_t, 2), M_TYPE (Packet_Cell_Change_Order_t, u.Target_Cell_GSM, Target_Cell_GSM_t), M_TYPE (Packet_Cell_Change_Order_t, u.Target_Cell_3G, Target_Cell_3G_t), + + M_PADDING_BITS(Packet_Cell_Change_Order_t), CSN_DESCR_END (Packet_Cell_Change_Order_t) /*< Packet (Enhanced) Measurement Report message contents > */ @@ -3496,6 +3548,8 @@ CSN_DESCR_BEGIN (Packet_Measurement_Report_t) M_NEXT_EXIST_OR_NULL(Packet_Measurement_Report_t, Exist_AdditionsR99, 1), M_TYPE (Packet_Measurement_Report_t, AdditionsR99, PMR_AdditionsR99_t), + + M_PADDING_BITS (Packet_Measurement_Report_t), CSN_DESCR_END (Packet_Measurement_Report_t) static const @@ -3546,6 +3600,8 @@ CSN_DESCR_BEGIN (Packet_Enh_Measurement_Report_t) M_NEXT_EXIST_OR_NULL(Packet_Enh_Measurement_Report_t, Exist_AdditionsR5, 1), M_TYPE (Packet_Enh_Measurement_Report_t, AdditionsR5, PEMR_AdditionsR5_t), + + M_PADDING_BITS(Packet_Enh_Measurement_Report_t), CSN_DESCR_END (Packet_Enh_Measurement_Report_t) /*< Packet Measurement Order message contents >*/ @@ -3579,6 +3635,8 @@ CSN_DESCR_BEGIN (Packet_Measurement_Order_t) M_NEXT_EXIST_OR_NULL (Packet_Measurement_Order_t, Exist_AdditionsR98, 1), M_TYPE (Packet_Measurement_Order_t, AdditionsR98, PMO_AdditionsR98_t), + + M_PADDING_BITS (Packet_Measurement_Order_t), CSN_DESCR_END (Packet_Measurement_Order_t) static const @@ -3724,6 +3782,8 @@ CSN_DESCR_BEGIN(Packet_Cell_Change_Notification_t) M_NEXT_EXIST_OR_NULL(Packet_Cell_Change_Notification_t, Exist_AdditionsR6, 1), M_TYPE (Packet_Cell_Change_Notification_t, AdditionsR6, PCCN_AdditionsR6_t), + + M_PADDING_BITS(Packet_Cell_Change_Notification_t), CSN_DESCR_END (Packet_Cell_Change_Notification_t) /*< Packet Cell Change Continue message contents > */ @@ -3738,6 +3798,8 @@ CSN_DESCR_BEGIN(Packet_Cell_Change_Continue_t) M_UINT (Packet_Cell_Change_Continue_t, ARFCN, 10), M_UINT (Packet_Cell_Change_Continue_t, BSIC, 6), M_UINT (Packet_Cell_Change_Continue_t, CONTAINER_ID, 2), + + M_PADDING_BITS(Packet_Cell_Change_Continue_t), CSN_DESCR_END (Packet_Cell_Change_Continue_t) /*< Packet Neighbour Cell Data message contents > */ @@ -3777,6 +3839,7 @@ CSN_DESCR_BEGIN(Packet_Neighbour_Cell_Data_t) M_UINT (Packet_Neighbour_Cell_Data_t, CONTAINER_INDEX, 5), M_TYPE (Packet_Neighbour_Cell_Data_t, Container, PNCDContainer_t), + M_PADDING_BITS(Packet_Neighbour_Cell_Data_t), CSN_DESCR_END (Packet_Neighbour_Cell_Data_t) /*< Packet Serving Cell Data message contents > */ @@ -3790,6 +3853,7 @@ CSN_DESCR_BEGIN(Packet_Serving_Cell_Data_t) M_UINT (Packet_Serving_Cell_Data_t, spare, 4), M_UINT (Packet_Serving_Cell_Data_t, CONTAINER_INDEX, 5), M_UINT_ARRAY (Packet_Serving_Cell_Data_t, CONTAINER, 8, 19),/* 8*19 bits */ + M_PADDING_BITS(Packet_Serving_Cell_Data_t), CSN_DESCR_END (Packet_Serving_Cell_Data_t) @@ -4033,6 +4097,8 @@ CSN_DESCR_BEGIN(Packet_Handover_Command_t) M_TYPE (Packet_Handover_Command_t, u.PS_HandoverTo_UTRAN_Payload, PS_HandoverTo_UTRAN_Payload_t), CSN_ERROR (Packet_Handover_Command_t, "10 <extension> not implemented", CSN_ERROR_STREAM_NOT_SUPPORTED), CSN_ERROR (Packet_Handover_Command_t, "11 <extension> not implemented", CSN_ERROR_STREAM_NOT_SUPPORTED), + + M_PADDING_BITS(Packet_Handover_Command_t), CSN_DESCR_END (Packet_Handover_Command_t) /*< End Packet Handover Command >*/ @@ -4047,6 +4113,7 @@ CSN_DESCR_BEGIN(Packet_PhysicalInformation_t) M_TYPE (Packet_PhysicalInformation_t, Global_TFI, Global_TFI_t), M_UINT (Packet_PhysicalInformation_t, TimingAdvance, 8), + M_PADDING_BITS(Packet_PhysicalInformation_t), CSN_DESCR_END (Packet_PhysicalInformation_t) /*< End Packet Physical Information > */ @@ -4077,6 +4144,7 @@ CSN_DESCR_BEGIN (Additional_MS_Rad_Access_Cap_t) M_TYPE (Additional_MS_Rad_Access_Cap_t, ID, AdditionalMsRadAccessCapID_t), M_TYPE (Additional_MS_Rad_Access_Cap_t, MS_Radio_Access_capability, MS_Radio_Access_capability_t), + M_PADDING_BITS (Additional_MS_Rad_Access_Cap_t), CSN_DESCR_END (Additional_MS_Rad_Access_Cap_t) @@ -4090,6 +4158,7 @@ CSN_DESCR_BEGIN (Packet_Pause_t) M_UINT (Packet_Pause_t, MESSAGE_TYPE, 2), M_UINT (Packet_Pause_t, TLLI, 32), M_BITMAP (Packet_Pause_t, RAI, 48), + M_PADDING_BITS (Packet_Pause_t), CSN_DESCR_END (Packet_Pause_t) @@ -4135,6 +4204,8 @@ CSN_DESCR_BEGIN(PSI1_t) M_NEXT_EXIST (PSI1_t, Exist_AdditionsR99, 1), M_TYPE (PSI1_t, AdditionsR99, PSI1_AdditionsR99_t), + + M_PADDING_BITS(PSI1_t), CSN_DESCR_END (PSI1_t) /*< End Packet System Information Type 1 message content >*/ @@ -4240,6 +4311,7 @@ CSN_DESCR_BEGIN(PSI2_t) M_TYPE (PSI2_t, Cell_Allocation, Cell_Allocation_t), M_REC_TARRAY (PSI2_t, GPRS_MA[0], PSI2_MA_t, Count_GPRS_MA), M_REC_TARRAY (PSI2_t, PCCCH_Description[0], PCCCH_Description_t, Count_PCCCH_Description), + M_PADDING_BITS(PSI2_t), CSN_DESCR_END (PSI2_t) /*< End Packet System Information Type 2 message content >*/ @@ -4364,6 +4436,8 @@ CSN_DESCR_BEGIN(PSI3_t) M_NEXT_EXIST (PSI3_t, Exist_AdditionR98, 1), M_TYPE (PSI3_t, AdditionR98, PSI3_AdditionR98_t), + + M_PADDING_BITS(PSI3_t), CSN_DESCR_END (PSI3_t) /*< End Packet System Information Type 3 message content >*/ @@ -4472,6 +4546,8 @@ CSN_DESCR_BEGIN(PSI5_t) M_NEXT_EXIST (PSI5_t, Exist_AdditionsR99, 1), M_TYPE (PSI5_t, AdditionsR99, PSI5_AdditionsR99), + + M_PADDING_BITS(PSI5_t), CSN_DESCR_END (PSI5_t) /*< End Packet System Information Type 5 message content >*/ @@ -4515,6 +4591,8 @@ CSN_DESCR_BEGIN(PSI13_t) M_NEXT_EXIST (PSI13_t, Exist_AdditionsR99, 1), M_TYPE (PSI13_t, AdditionsR99, PSI13_AdditionR99), + + M_PADDING_BITS(PSI13_t), CSN_DESCR_END (PSI13_t) /*< End Packet System Information Type 13 message content >*/ @@ -4732,7 +4810,7 @@ void decode_gsm_rlcmac_uplink(bitvec * vector, RlcMacUplink_t * data) LOGPC(DRLCMACDATA, LOGL_NOTICE, "Payload Type: RESERVED (3)"); return; } - data->NrOfBits = (23 - 1) * 8; + data->NrOfBits = 23 * 8; csnStreamInit(&ar, 0, data->NrOfBits); readIndex += 6; data->u.MESSAGE_TYPE = bitvec_read_field(vector, readIndex, 6); @@ -5017,7 +5095,7 @@ void encode_gsm_rlcmac_uplink(bitvec * vector, RlcMacUplink_t * data) { csnStream_t ar; unsigned writeIndex = 0; - data->NrOfBits = (23 - 1) * 8; + data->NrOfBits = 23 * 8; csnStreamInit(&ar, 0, data->NrOfBits); writeIndex = 0; switch (data->u.MESSAGE_TYPE) |