diff options
author | Anders Broman <anders.broman@ericsson.com> | 2012-05-28 13:38:40 +0000 |
---|---|---|
committer | Anders Broman <anders.broman@ericsson.com> | 2012-05-28 13:38:40 +0000 |
commit | d8ddd39c3d47719c0f79229afd26a27354a9646b (patch) | |
tree | 4eb855b2787fc208f34025b3973be886047a2895 /epan/dissectors | |
parent | 4baba1c6845549f75a9cd8480914b6b2bc3da5cd (diff) |
Enhance CHANNEL_HSDSCH dissection.
svn path=/trunk/; revision=42876
Diffstat (limited to 'epan/dissectors')
-rw-r--r-- | epan/dissectors/packet-nbap.c | 261 | ||||
-rw-r--r-- | epan/dissectors/packet-rlc.c | 7 | ||||
-rw-r--r-- | epan/dissectors/packet-rlc.h | 1 | ||||
-rw-r--r-- | epan/dissectors/packet-umts_fp.c | 16 | ||||
-rw-r--r-- | epan/dissectors/packet-umts_fp.h | 1 |
5 files changed, 201 insertions, 85 deletions
diff --git a/epan/dissectors/packet-nbap.c b/epan/dissectors/packet-nbap.c index ebe73ee765..2eb1b01dbb 100644 --- a/epan/dissectors/packet-nbap.c +++ b/epan/dissectors/packet-nbap.c @@ -47,6 +47,7 @@ #include "packet-per.h" #include "packet-isup.h" #include "packet-umts_fp.h" +#include "packet-rlc.h" #ifdef _MSC_VER /* disable: "warning C4146: unary minus operator applied to unsigned type, result still unsigned" */ @@ -1533,7 +1534,7 @@ typedef enum _ProtocolIE_ID_enum { } ProtocolIE_ID_enum; /*--- End of included file: packet-nbap-val.h ---*/ -#line 71 "../../asn1/nbap/packet-nbap-template.c" +#line 72 "../../asn1/nbap/packet-nbap-template.c" /* Initialize the protocol and registered fields */ static int proto_nbap = -1; @@ -4000,6 +4001,7 @@ static int hf_nbap_tUTRANGPSDriftRateQuality = -1; /* TUTRANGPSDriftRateQuality static int hf_nbap_rNC_ID = -1; /* RNC_ID */ static int hf_nbap_uE_AggregateMaximumBitRateDownlink = -1; /* UE_AggregateMaximumBitRateDownlink */ static int hf_nbap_uE_AggregateMaximumBitRateUplink = -1; /* UE_AggregateMaximumBitRateUplink */ +static int hf_nbap_hSDSCH_Physical_Layer_Category_01 = -1; /* T_hSDSCH_Physical_Layer_Category */ static int hf_nbap_UL_Timeslot_Information_item = -1; /* UL_Timeslot_InformationItem */ static int hf_nbap_uL_Code_InformationList = -1; /* TDD_UL_Code_Information */ static int hf_nbap_UL_TimeslotLCR_Information_item = -1; /* UL_TimeslotLCR_InformationItem */ @@ -4836,7 +4838,7 @@ static int hf_nbap_RACH_SubChannelNumbers_subCh1 = -1; static int hf_nbap_RACH_SubChannelNumbers_subCh0 = -1; /*--- End of included file: packet-nbap-hf.c ---*/ -#line 79 "../../asn1/nbap/packet-nbap-template.c" +#line 80 "../../asn1/nbap/packet-nbap-template.c" /* Initialize the subtree pointers */ static int ett_nbap = -1; @@ -6474,7 +6476,7 @@ static gint ett_nbap_UnsuccessfulOutcome = -1; static gint ett_nbap_Outcome = -1; /*--- End of included file: packet-nbap-ett.c ---*/ -#line 86 "../../asn1/nbap/packet-nbap-template.c" +#line 87 "../../asn1/nbap/packet-nbap-template.c" extern int proto_fp; @@ -6524,6 +6526,16 @@ typedef struct nbap_edch_chanel_info_t nbap_edch_chanel_info[maxNrOfEDCHMACdFlows]; +typedef struct +{ + address crnc_address; + guint16 crnc_port; + enum rlc_mode rlc_mode; + guint32 hsdsch_physical_layer_category; +} nbap_hsdsch_chanel_info_t; + +nbap_hsdsch_chanel_info_t nbap_hsdsch_chanel_info[maxNrOfMACdFlows]; + gint g_num_dch_in_flow; /* maxNrOfTFs INTEGER ::= 32 */ gint g_dchs_in_flow_list[maxNrOfTFs]; @@ -11902,7 +11914,7 @@ dissect_nbap_CommonMACFlow_Specific_InfoList(tvbuff_t *tvb _U_, int offset _U_, static int dissect_nbap_MACdPDU_Size(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 1138 "../../asn1/nbap/nbap.cnf" +#line 1143 "../../asn1/nbap/nbap.cnf" offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index, 1U, 5000U, &MACdPDU_Size, TRUE); @@ -11915,8 +11927,6 @@ dissect_nbap_MACdPDU_Size(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U - - return offset; } @@ -14571,7 +14581,7 @@ dissect_nbap_T_dCH_ID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, p static int dissect_nbap_TransportFormatSet_NrOfTransportBlocks(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 870 "../../asn1/nbap/nbap.cnf" +#line 873 "../../asn1/nbap/nbap.cnf" guint32 NrOfTransportBlocks; offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index, @@ -14614,7 +14624,7 @@ guint32 NrOfTransportBlocks; static int dissect_nbap_TransportFormatSet_TransportBlockSize(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 902 "../../asn1/nbap/nbap.cnf" +#line 905 "../../asn1/nbap/nbap.cnf" guint32 TransportBlockSize; offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index, @@ -14742,7 +14752,7 @@ static const per_sequence_t TransportFormatSet_DynamicPartList_item_sequence[] = static int dissect_nbap_TransportFormatSet_DynamicPartList_item(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 866 "../../asn1/nbap/nbap.cnf" +#line 869 "../../asn1/nbap/nbap.cnf" num_items++; @@ -14760,7 +14770,7 @@ static const per_sequence_t TransportFormatSet_DynamicPartList_sequence_of[1] = static int dissect_nbap_TransportFormatSet_DynamicPartList(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 863 "../../asn1/nbap/nbap.cnf" +#line 866 "../../asn1/nbap/nbap.cnf" num_items = 0; @@ -14931,7 +14941,7 @@ dissect_nbap_TransportFormatSet(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *a static int dissect_nbap_T_ul_TransportFormatSet(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 841 "../../asn1/nbap/nbap.cnf" +#line 844 "../../asn1/nbap/nbap.cnf" transportFormatSet_type = DCH_UL; nbap_dch_chnl_info[dch_id].num_ul_chans = 0; @@ -14945,7 +14955,7 @@ dissect_nbap_T_ul_TransportFormatSet(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx static int dissect_nbap_T_dl_TransportFormatSet(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 845 "../../asn1/nbap/nbap.cnf" +#line 848 "../../asn1/nbap/nbap.cnf" transportFormatSet_type = DCH_DL; nbap_dch_chnl_info[dch_id].num_dl_chans = 0; @@ -14995,14 +15005,14 @@ static const per_sequence_t DCH_Specific_FDD_Item_sequence[] = { static int dissect_nbap_DCH_Specific_FDD_Item(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 835 "../../asn1/nbap/nbap.cnf" +#line 838 "../../asn1/nbap/nbap.cnf" g_num_dch_in_flow++; offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, ett_nbap_DCH_Specific_FDD_Item, DCH_Specific_FDD_Item_sequence); -#line 838 "../../asn1/nbap/nbap.cnf" +#line 841 "../../asn1/nbap/nbap.cnf" prev_dch_id = dch_id; @@ -15016,7 +15026,7 @@ static const per_sequence_t DCH_Specific_FDD_InformationList_sequence_of[1] = { static int dissect_nbap_DCH_Specific_FDD_InformationList(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 831 "../../asn1/nbap/nbap.cnf" +#line 834 "../../asn1/nbap/nbap.cnf" g_num_dch_in_flow = 0; prev_dch_id = 0; @@ -15310,7 +15320,7 @@ dissect_nbap_T_dCH_ID_01(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_ static int dissect_nbap_T_ul_TransportFormatSet_01(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 849 "../../asn1/nbap/nbap.cnf" +#line 852 "../../asn1/nbap/nbap.cnf" transportFormatSet_type = DCH_UL; nbap_dch_chnl_info[dch_id].num_ul_chans = 0; @@ -15324,7 +15334,7 @@ dissect_nbap_T_ul_TransportFormatSet_01(tvbuff_t *tvb _U_, int offset _U_, asn1_ static int dissect_nbap_T_dl_TransportFormatSet_01(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 853 "../../asn1/nbap/nbap.cnf" +#line 856 "../../asn1/nbap/nbap.cnf" transportFormatSet_type = DCH_DL; nbap_dch_chnl_info[dch_id].num_dl_chans = 0; @@ -17795,7 +17805,7 @@ dissect_nbap_E_DCH_HARQ_Combining_Capability(tvbuff_t *tvb _U_, int offset _U_, static int dissect_nbap_E_DCH_DDI_Value(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 1128 "../../asn1/nbap/nbap.cnf" +#line 1133 "../../asn1/nbap/nbap.cnf" offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index, 0U, 62U, &e_dch_ddi_value, FALSE); @@ -17929,7 +17939,7 @@ static const per_sequence_t E_DCH_LogicalChannelInformationItem_sequence[] = { static int dissect_nbap_E_DCH_LogicalChannelInformationItem(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 1125 "../../asn1/nbap/nbap.cnf" +#line 1130 "../../asn1/nbap/nbap.cnf" num_items++; @@ -17946,7 +17956,7 @@ static const per_sequence_t E_DCH_LogicalChannelInformation_sequence_of[1] = { static int dissect_nbap_E_DCH_LogicalChannelInformation(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 1118 "../../asn1/nbap/nbap.cnf" +#line 1123 "../../asn1/nbap/nbap.cnf" num_items = 0; offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index, @@ -17979,7 +17989,7 @@ static const per_sequence_t E_DCH_MACdFlow_Specific_InfoItem_sequence[] = { static int dissect_nbap_E_DCH_MACdFlow_Specific_InfoItem(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 1074 "../../asn1/nbap/nbap.cnf" +#line 1079 "../../asn1/nbap/nbap.cnf" umts_fp_conversation_info_t *p_conv_data = NULL; address null_addr; conversation_t *p_conv; @@ -22760,7 +22770,7 @@ static const value_string nbap_PICH_Mode_vals[] = { static int dissect_nbap_PICH_Mode(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 619 "../../asn1/nbap/nbap.cnf" +#line 620 "../../asn1/nbap/nbap.cnf" guint32 PICH_Mode = 0; offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index, 4, &PICH_Mode, TRUE, 0, NULL); @@ -22953,61 +22963,28 @@ static const per_sequence_t HSDSCH_MACdFlow_Specific_InfoItem_sequence[] = { static int dissect_nbap_HSDSCH_MACdFlow_Specific_InfoItem(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 1149 "../../asn1/nbap/nbap.cnf" - -address dst_addr, null_addr; -conversation_t *conversation; -umts_fp_conversation_info_t *umts_fp_conversation_info; +#line 1174 "../../asn1/nbap/nbap.cnf" -transportLayerAddress_ipv4 = 0; -BindingID_port = 0; + address dst_addr; + transportLayerAddress_ipv4 = 0; + BindingID_port = 0; offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, ett_nbap_HSDSCH_MACdFlow_Specific_InfoItem, HSDSCH_MACdFlow_Specific_InfoItem_sequence); - if (actx->pinfo->fd->flags.visited||transportLayerAddress_ipv4==0||BindingID_port == 0) - { - return offset; - } - SET_ADDRESS(&null_addr, AT_NONE, 0, NULL); - - dst_addr.type=AT_IPv4; - dst_addr.len=4; - dst_addr.data=(guint8 *)&transportLayerAddress_ipv4; - - conversation = find_conversation(actx->pinfo->fd->num,&dst_addr, - &null_addr, PT_UDP, BindingID_port, - 0, NO_ADDR_B|NO_PORT_B); - - if (conversation == NULL) { - /* It's not part of any conversation - create a new one. */ - conversation = conversation_new(actx->pinfo->fd->num, &dst_addr, - &null_addr, PT_UDP,BindingID_port , - 0, NO_ADDR2|NO_PORT2); - - /* Set dissector */ - conversation_set_dissector(conversation, fp_handle); - - if(actx->pinfo->link_dir==P2P_DIR_DL){ - umts_fp_conversation_info = se_new0(umts_fp_conversation_info_t); - /* Fill in the HSDSCH relevant data */ - - umts_fp_conversation_info->iface_type = IuB_Interface; - umts_fp_conversation_info->division = Division_FDD; - umts_fp_conversation_info->channel = CHANNEL_HSDSCH; - umts_fp_conversation_info->dl_frame_number = 0; - umts_fp_conversation_info->ul_frame_number = actx->pinfo->fd->num; - - /* Cheat and use the DCH entries */ - umts_fp_conversation_info->num_dch_in_flow = 1; - umts_fp_conversation_info->dchs_in_flow_list[0] = hsdsch_macdflow_id; + if (actx->pinfo->fd->flags.visited||transportLayerAddress_ipv4==0||BindingID_port == 0) + { + return offset; + } - umts_fp_conversation_info->hsdsch_entity = ehs; - set_umts_fp_conv_data(conversation, umts_fp_conversation_info); - } - } + dst_addr.type=AT_IPv4; + dst_addr.len=4; + dst_addr.data=(guint8 *)&transportLayerAddress_ipv4; + /* Set address for collection of HSDSCH entries */ + COPY_ADDRESS(&(nbap_hsdsch_chanel_info[hsdsch_macdflow_id].crnc_address),&dst_addr); + nbap_hsdsch_chanel_info[hsdsch_macdflow_id].crnc_port = BindingID_port; @@ -23089,8 +23066,24 @@ static const value_string nbap_RLC_Mode_vals[] = { static int dissect_nbap_RLC_Mode(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { +#line 1152 "../../asn1/nbap/nbap.cnf" + guint32 rlc_mode; + offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index, - 2, NULL, TRUE, 0, NULL); + 2, &rlc_mode, TRUE, 0, NULL); + + switch(rlc_mode){ + case 0: + /* rLC-AM */ + nbap_hsdsch_chanel_info[hsdsch_macdflow_id].rlc_mode = RLC_AM; + break; + case 1: + /* rLC-UM */ + nbap_hsdsch_chanel_info[hsdsch_macdflow_id].rlc_mode = RLC_UM; + break; + } + + return offset; } @@ -23151,16 +23144,24 @@ dissect_nbap_HSDSCH_MACdFlows_Information(tvbuff_t *tvb _U_, int offset _U_, asn static int -dissect_nbap_INTEGER_1_64_(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { +dissect_nbap_T_hSDSCH_Physical_Layer_Category(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { +#line 1167 "../../asn1/nbap/nbap.cnf" + guint32 hsdsch_physical_layer_category; + offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index, - 1U, 64U, NULL, TRUE); + 1U, 64U, &hsdsch_physical_layer_category, TRUE); + + + nbap_hsdsch_chanel_info[hsdsch_macdflow_id].hsdsch_physical_layer_category = hsdsch_physical_layer_category; + + return offset; } static const per_sequence_t UE_Capability_Information_sequence[] = { - { &hf_nbap_hSDSCH_Physical_Layer_Category, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_nbap_INTEGER_1_64_ }, + { &hf_nbap_hSDSCH_Physical_Layer_Category_01, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_nbap_T_hSDSCH_Physical_Layer_Category }, { &hf_nbap_iE_Extensions , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_nbap_ProtocolExtensionContainer }, { NULL, 0, 0, NULL } }; @@ -23212,9 +23213,84 @@ static const per_sequence_t HSDSCH_FDD_Information_sequence[] = { static int dissect_nbap_HSDSCH_FDD_Information(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { +#line 1196 "../../asn1/nbap/nbap.cnf" +/* + * Collect the information about the HSDSCH MACdFlows set up conversation(s) and set the conversation data. + */ + address null_addr; + conversation_t *conversation = NULL; + umts_fp_conversation_info_t *umts_fp_conversation_info; + guint32 i; + + if (!actx->pinfo->fd->flags.visited){ + /* Set port to zero use that as an indication of wether we have data or not */ + for (i = 0; i < maxNrOfMACdFlows; i++) { + nbap_hsdsch_chanel_info[i].crnc_port = 0; + nbap_hsdsch_chanel_info[i].rlc_mode = RLC_MODE_UNKNOWN; + } + } + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, ett_nbap_HSDSCH_FDD_Information, HSDSCH_FDD_Information_sequence); + + if (actx->pinfo->fd->flags.visited){ + return offset; + } + /* Set port to zero use that as an indication of wether we have data or not */ + SET_ADDRESS(&null_addr, AT_NONE, 0, NULL); + for (i = 0; i < maxNrOfMACdFlows; i++) { + if (nbap_hsdsch_chanel_info[i].crnc_port != 0){ + nbap_debug3("HSDSCH-MACdFlows-Information:hsdsch_macdflow_id %u Look for conv on IP %s Port %u", + i, + ep_address_to_str (&(nbap_hsdsch_chanel_info[i].crnc_address)), + nbap_hsdsch_chanel_info[i].crnc_port); + conversation = find_conversation(actx->pinfo->fd->num, &(nbap_hsdsch_chanel_info[i].crnc_address), &null_addr, + PT_UDP, + nbap_hsdsch_chanel_info[i].crnc_port, 0, NO_ADDR_B); + + + if (conversation == NULL) { + /* It's not part of any conversation - create a new one. */ + nbap_debug1("HSDSCH-MACdFlows-Information:Set up conv on Port %u",nbap_hsdsch_chanel_info[i].crnc_port); + conversation = conversation_new(actx->pinfo->fd->num, &(nbap_hsdsch_chanel_info[i].crnc_address), + &null_addr, PT_UDP, nbap_hsdsch_chanel_info[i].crnc_port, + 0, NO_ADDR2|NO_PORT2); + + /* Set dissector */ + conversation_set_dissector(conversation, fp_handle); + + if(actx->pinfo->link_dir==P2P_DIR_DL){ + umts_fp_conversation_info = se_new0(umts_fp_conversation_info_t); + /* Fill in the HSDSCH relevant data */ + + umts_fp_conversation_info->iface_type = IuB_Interface; + umts_fp_conversation_info->division = Division_FDD; + umts_fp_conversation_info->channel = CHANNEL_HSDSCH; + umts_fp_conversation_info->dl_frame_number = 0; + umts_fp_conversation_info->ul_frame_number = actx->pinfo->fd->num; + SE_COPY_ADDRESS(&(umts_fp_conversation_info->crnc_address), &nbap_hsdsch_chanel_info[i].crnc_address); + umts_fp_conversation_info->crnc_port = nbap_hsdsch_chanel_info[i].crnc_port; + + /* Cheat and use the DCH entries */ + umts_fp_conversation_info->num_dch_in_flow++; + umts_fp_conversation_info->dchs_in_flow_list[umts_fp_conversation_info->num_dch_in_flow -1] = i; + + if(nbap_hsdsch_chanel_info[i].hsdsch_physical_layer_category > 12){ + umts_fp_conversation_info->hsdsch_entity = ehs; + }else{ + umts_fp_conversation_info->hsdsch_entity = hs; + } + umts_fp_conversation_info->rlc_mode = nbap_hsdsch_chanel_info[i].rlc_mode; + set_umts_fp_conv_data(conversation, umts_fp_conversation_info); + } + } + } + } + + + + return offset; } @@ -24310,6 +24386,16 @@ dissect_nbap_MAChsResetScheme(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *act static int +dissect_nbap_INTEGER_1_64_(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index, + 1U, 64U, NULL, TRUE); + + return offset; +} + + + +static int dissect_nbap_NumHS_SCCH_Codes(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index, 1U, maxNrOfHSSCCHCodes, NULL, FALSE); @@ -27723,7 +27809,7 @@ dissect_nbap_RACH_SubChannelNumbers(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_ static int dissect_nbap_T_dCH_id(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 928 "../../asn1/nbap/nbap.cnf" +#line 931 "../../asn1/nbap/nbap.cnf" offset = dissect_nbap_DCH_ID(tvb, offset, actx, tree, hf_index); @@ -27745,7 +27831,7 @@ static const per_sequence_t RL_Specific_DCH_Info_Item_sequence[] = { static int dissect_nbap_RL_Specific_DCH_Info_Item(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 933 "../../asn1/nbap/nbap.cnf" +#line 936 "../../asn1/nbap/nbap.cnf" address dst_addr, null_addr; conversation_t *conversation = NULL; umts_fp_conversation_info_t *umts_fp_conversation_info; @@ -27791,6 +27877,7 @@ dch_id = 0xFFFFFFFF; umts_fp_conversation_info->ul_frame_number = actx->pinfo->fd->num; SE_COPY_ADDRESS(&(umts_fp_conversation_info->crnc_address), &dst_addr); umts_fp_conversation_info->crnc_port = BindingID_port; + umts_fp_conversation_info->rlc_mode = RLC_MODE_UNKNOWN; /* DCH's in this flow */ umts_fp_conversation_info->dch_crc_present = g_nbap_msg_info_for_fp.dch_crc_present; @@ -27866,7 +27953,7 @@ static const per_sequence_t RL_Specific_E_DCH_Information_Item_sequence[] = { static int dissect_nbap_RL_Specific_E_DCH_Information_Item(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 1022 "../../asn1/nbap/nbap.cnf" +#line 1026 "../../asn1/nbap/nbap.cnf" address dst_addr, null_addr; conversation_t *conversation; umts_fp_conversation_info_t *umts_fp_conversation_info; @@ -27910,6 +27997,7 @@ BindingID_port = 0; umts_fp_conversation_info->ul_frame_number = actx->pinfo->fd->num; SE_COPY_ADDRESS(&(umts_fp_conversation_info->crnc_address), &dst_addr); umts_fp_conversation_info->crnc_port = BindingID_port; + umts_fp_conversation_info->rlc_mode = RLC_MODE_UNKNOWN; /* Set address for collection of DDI entries */ COPY_ADDRESS(&(nbap_edch_chanel_info[e_dch_macdflow_id].crnc_address),&dst_addr); @@ -31369,7 +31457,7 @@ static const per_sequence_t FACH_ParametersItem_CTCH_SetupRqstFDD_sequence[] = { static int dissect_nbap_FACH_ParametersItem_CTCH_SetupRqstFDD(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 740 "../../asn1/nbap/nbap.cnf" +#line 742 "../../asn1/nbap/nbap.cnf" address dst_addr, null_addr; conversation_t *conversation; @@ -31417,6 +31505,7 @@ transportFormatSet_type = CPCH; umts_fp_conversation_info->ul_frame_number = actx->pinfo->fd->num; SE_COPY_ADDRESS(&(umts_fp_conversation_info->crnc_address), &dst_addr); umts_fp_conversation_info->crnc_port = BindingID_port; + umts_fp_conversation_info->rlc_mode = RLC_MODE_UNKNOWN; /* DCH's in this flow */ umts_fp_conversation_info->dch_crc_present = g_nbap_msg_info_for_fp.dch_crc_present; @@ -31485,7 +31574,7 @@ dissect_nbap_FACH_ParametersListIE_CTCH_SetupRqstFDD(tvbuff_t *tvb _U_, int offs static int dissect_nbap_T_transportFormatSet(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 857 "../../asn1/nbap/nbap.cnf" +#line 860 "../../asn1/nbap/nbap.cnf" transportFormatSet_type = PCH; nbap_dch_chnl_info[commontransportchannelid].num_dl_chans = 0; nbap_dch_chnl_info[commontransportchannelid].num_ul_chans = 0; @@ -31530,7 +31619,7 @@ static const per_sequence_t PCH_ParametersItem_CTCH_SetupRqstFDD_sequence[] = { static int dissect_nbap_PCH_ParametersItem_CTCH_SetupRqstFDD(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 640 "../../asn1/nbap/nbap.cnf" +#line 641 "../../asn1/nbap/nbap.cnf" address dst_addr, null_addr; conversation_t *conversation; @@ -31581,6 +31670,7 @@ num_items = 1; SE_COPY_ADDRESS(&(umts_fp_conversation_info->crnc_address), &dst_addr); umts_fp_conversation_info->crnc_port = BindingID_port; umts_fp_conversation_info->paging_indications = paging_indications; + umts_fp_conversation_info->rlc_mode = RLC_MODE_UNKNOWN; /* DCH's in this flow */ umts_fp_conversation_info->dch_crc_present = g_nbap_msg_info_for_fp.dch_crc_present; @@ -31712,6 +31802,7 @@ transportFormatSet_type = CPCH; umts_fp_conversation_info->ul_frame_number = actx->pinfo->fd->num; SE_COPY_ADDRESS(&(umts_fp_conversation_info->crnc_address), &dst_addr); umts_fp_conversation_info->crnc_port = BindingID_port; + umts_fp_conversation_info->rlc_mode = RLC_MODE_UNKNOWN; /* DCH's in this flow */ umts_fp_conversation_info->dch_crc_present = g_nbap_msg_info_for_fp.dch_crc_present; @@ -54025,7 +54116,7 @@ static int dissect_NULL_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tre /*--- End of included file: packet-nbap-fn.c ---*/ -#line 176 "../../asn1/nbap/packet-nbap-template.c" +#line 187 "../../asn1/nbap/packet-nbap-template.c" static int dissect_ProtocolIEFieldValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { @@ -63916,6 +64007,10 @@ void proto_register_nbap(void) { { "uE-AggregateMaximumBitRateUplink", "nbap.uE_AggregateMaximumBitRateUplink", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }}, + { &hf_nbap_hSDSCH_Physical_Layer_Category_01, + { "hSDSCH-Physical-Layer-Category", "nbap.hSDSCH_Physical_Layer_Category", + FT_UINT32, BASE_DEC, NULL, 0, + NULL, HFILL }}, { &hf_nbap_UL_Timeslot_Information_item, { "UL-Timeslot-InformationItem", "nbap.UL_Timeslot_InformationItem", FT_NONE, BASE_NONE, NULL, 0, @@ -67250,7 +67345,7 @@ void proto_register_nbap(void) { NULL, HFILL }}, /*--- End of included file: packet-nbap-hfarr.c ---*/ -#line 240 "../../asn1/nbap/packet-nbap-template.c" +#line 251 "../../asn1/nbap/packet-nbap-template.c" }; /* List of subtrees */ @@ -68889,7 +68984,7 @@ void proto_register_nbap(void) { &ett_nbap_Outcome, /*--- End of included file: packet-nbap-ettarr.c ---*/ -#line 248 "../../asn1/nbap/packet-nbap-template.c" +#line 259 "../../asn1/nbap/packet-nbap-template.c" }; @@ -70020,7 +70115,7 @@ proto_reg_handoff_nbap(void) /*--- End of included file: packet-nbap-dis-tab.c ---*/ -#line 282 "../../asn1/nbap/packet-nbap-template.c" +#line 293 "../../asn1/nbap/packet-nbap-template.c" } diff --git a/epan/dissectors/packet-rlc.c b/epan/dissectors/packet-rlc.c index 285cf12349..7f7db13380 100644 --- a/epan/dissectors/packet-rlc.c +++ b/epan/dissectors/packet-rlc.c @@ -1799,7 +1799,12 @@ dissect_rlc_ps_dtch(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) fpi = p_get_proto_data(pinfo->fd, proto_fp); rlci = p_get_proto_data(pinfo->fd, proto_rlc); - if (!fpi || !rlci) return; + if (!fpi || !rlci) { + ti = proto_tree_add_text(tree, tvb, 0, -1, + "Can't dissect RLC frame because no per-frame info was attached!"); + PROTO_ITEM_SET_GENERATED(ti); + return; + } if (tree) { ti = proto_tree_add_item(tree, proto_rlc, tvb, 0, -1, ENC_NA); diff --git a/epan/dissectors/packet-rlc.h b/epan/dissectors/packet-rlc.h index c612578438..44780992dc 100644 --- a/epan/dissectors/packet-rlc.h +++ b/epan/dissectors/packet-rlc.h @@ -22,6 +22,7 @@ */ enum rlc_mode { + RLC_MODE_UNKNOWN, RLC_TM, RLC_UM, RLC_AM diff --git a/epan/dissectors/packet-umts_fp.c b/epan/dissectors/packet-umts_fp.c index c02898274e..9076d51858 100644 --- a/epan/dissectors/packet-umts_fp.c +++ b/epan/dissectors/packet-umts_fp.c @@ -3153,6 +3153,20 @@ static fp_info *fp_set_per_packet_inf_from_conv(umts_fp_conversation_info_t *p_c switch (fpi->channel) { case CHANNEL_HSDSCH: /* HS-DSCH - High Speed Downlink Shared Channel */ fpi->hsdsch_entity = p_conv_data->hsdsch_entity; + macinf = se_new0(umts_mac_info); + macinf->content[0] = MAC_CONTENT_PS_DTCH; + p_add_proto_data(pinfo->fd, proto_umts_mac, macinf); + + rlcinf = se_new0(rlc_info); + /* Make configurable ?(avaliable in NBAP?) */ + /* urnti[MAX_RLC_CHANS] */ + rlcinf->mode[0] = p_conv_data->rlc_mode; + /* rbid[MAX_RLC_CHANS] */ + rlcinf->li_size[0] = RLC_LI_7BITS; + rlcinf->ciphered[0] = FALSE; + rlcinf->deciphered[0] = FALSE; + p_add_proto_data(pinfo->fd, proto_rlc, rlcinf); + return fpi; case CHANNEL_EDCH: @@ -3218,7 +3232,7 @@ static fp_info *fp_set_per_packet_inf_from_conv(umts_fp_conversation_info_t *p_c rlcinf->li_size[0] = RLC_LI_7BITS; rlcinf->ciphered[0] = FALSE; rlcinf->deciphered[0] = FALSE; - p_add_proto_data(pinfo->fd, proto_rlc, macinf); + p_add_proto_data(pinfo->fd, proto_rlc, rlcinf); break; case CHANNEL_RACH_FDD: fpi->num_chans = p_conv_data->num_dch_in_flow; diff --git a/epan/dissectors/packet-umts_fp.h b/epan/dissectors/packet-umts_fp.h index fd2771e23d..e6e1f6445d 100644 --- a/epan/dissectors/packet-umts_fp.h +++ b/epan/dissectors/packet-umts_fp.h @@ -139,6 +139,7 @@ typedef struct gint dchs_in_flow_list[FP_maxNrOfTFs]; guint8 dch_crc_present; /* 0=No, 1=Yes, 2=Unknown */ + enum rlc_mode rlc_mode; /* DCH type chanel data */ fp_dch_chanel_info_t fp_dch_chanel_info[FP_maxNrOfTFs]; |