diff options
author | Anders Broman <anders.broman@ericsson.com> | 2012-05-19 06:20:05 +0000 |
---|---|---|
committer | Anders Broman <anders.broman@ericsson.com> | 2012-05-19 06:20:05 +0000 |
commit | 8499bf8b8eae7384af25cbf343a4bcc964e664b8 (patch) | |
tree | 2e0489214023a17e2d06cc4c9331dcd8a44118df /asn1/nbap | |
parent | 3bb88a972b71a6a84e1d4d8018ad6585a436e91f (diff) | |
download | wireshark-8499bf8b8eae7384af25cbf343a4bcc964e664b8.tar.gz wireshark-8499bf8b8eae7384af25cbf343a4bcc964e664b8.tar.bz2 wireshark-8499bf8b8eae7384af25cbf343a4bcc964e664b8.zip |
Fix the DCH data collection for conversation setup
svn path=/trunk/; revision=42710
Diffstat (limited to 'asn1/nbap')
-rw-r--r-- | asn1/nbap/nbap.cnf | 93 | ||||
-rw-r--r-- | asn1/nbap/packet-nbap-template.c | 5 |
2 files changed, 84 insertions, 14 deletions
diff --git a/asn1/nbap/nbap.cnf b/asn1/nbap/nbap.cnf index 05833ae4b3..1abb741337 100644 --- a/asn1/nbap/nbap.cnf +++ b/asn1/nbap/nbap.cnf @@ -507,8 +507,13 @@ guint32 payload_crc_value; offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index, 0U, 255U, &dch_id, FALSE); - if(g_num_dch_in_flow>0) + if(g_num_dch_in_flow>0){ g_dchs_in_flow_list[g_num_dch_in_flow-1]=dch_id; + nbap_dch_chnl_info[dch_id].next_dch = 0; + if(prev_dch_id != 0){ + nbap_dch_chnl_info[prev_dch_id].next_dch = dch_id; + } + } #.FN_BODY DCH-ModifySpecificItem-FDD/dCH-ID @@ -542,6 +547,8 @@ guint32 payload_crc_value; #.FN_BODY RACH-ParametersItem-CTCH-SetupRqstFDD address dst_addr, null_addr; conversation_t *conversation; +umts_fp_conversation_info_t *umts_fp_conversation_info; +int j, num_tf; transportLayerAddress_ipv4 = 0; BindingID_port = 0; @@ -571,15 +578,50 @@ transportFormatSet_type = CPCH; /* 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 data */ + umts_fp_conversation_info->iface_type = IuB_Interface; + umts_fp_conversation_info->division = Division_FDD; + umts_fp_conversation_info->channel = CHANNEL_CPCH; + 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), &dst_addr); + umts_fp_conversation_info->crnc_port = BindingID_port; + + /* DCH's in this flow */ + umts_fp_conversation_info->dch_crc_present = g_nbap_msg_info_for_fp.dch_crc_present; + /* Set data for First or single channel */ + umts_fp_conversation_info->fp_dch_chanel_info[0].num_ul_chans = num_tf = nbap_dch_chnl_info[commonphysicalchannelid].num_ul_chans; + for (j = 0; j < num_tf; j++) { + umts_fp_conversation_info->fp_dch_chanel_info[0].ul_chan_tf_size[j] = nbap_dch_chnl_info[commonphysicalchannelid].ul_chan_tf_size[j]; + umts_fp_conversation_info->fp_dch_chanel_info[0].ul_chan_num_tbs[j] = nbap_dch_chnl_info[commonphysicalchannelid].ul_chan_num_tbs[j]; + } + + /* Traffic flows per DCH(DL) */ + umts_fp_conversation_info->fp_dch_chanel_info[0].num_dl_chans = num_tf = nbap_dch_chnl_info[commonphysicalchannelid].num_dl_chans; + for (j = 0; j < num_tf; j++) { + umts_fp_conversation_info->fp_dch_chanel_info[0].dl_chan_tf_size[j] = nbap_dch_chnl_info[commonphysicalchannelid].dl_chan_tf_size[j]; + umts_fp_conversation_info->fp_dch_chanel_info[0].dl_chan_num_tbs[j] = nbap_dch_chnl_info[commonphysicalchannelid].dl_chan_num_tbs[j]; + } + + umts_fp_conversation_info->dchs_in_flow_list[0] = commonphysicalchannelid; + umts_fp_conversation_info->num_dch_in_flow=1; + set_umts_fp_conv_data(conversation, umts_fp_conversation_info); + } } #.FN_HDR DCH-Specific-FDD-InformationList g_num_dch_in_flow = 0; + prev_dch_id = 0; #.FN_HDR DCH-Specific-FDD-Item g_num_dch_in_flow++; +#.FN_FTR DCH-Specific-FDD-Item + prev_dch_id = dch_id; + #.FN_HDR DCH-Specific-FDD-Item/ul-TransportFormatSet transportFormatSet_type = DCH_UL; nbap_dch_chnl_info[dch_id].num_ul_chans = 0; @@ -618,6 +660,12 @@ guint32 NrOfTransportBlocks; nbap_dch_chnl_info[dch_id].num_dl_chans++; nbap_dch_chnl_info[dch_id].dl_chan_num_tbs[num_items-1] = NrOfTransportBlocks; break; + case CPCH: + nbap_dch_chnl_info[commonphysicalchannelid].num_ul_chans++; + nbap_dch_chnl_info[commonphysicalchannelid].ul_chan_num_tbs[num_items-1] = NrOfTransportBlocks; + nbap_dch_chnl_info[commonphysicalchannelid].num_dl_chans++; + nbap_dch_chnl_info[commonphysicalchannelid].dl_chan_num_tbs[num_items-1] = NrOfTransportBlocks; + break; default: break; } @@ -636,6 +684,10 @@ guint32 TransportBlockSize; case DCH_DL: nbap_dch_chnl_info[dch_id].dl_chan_tf_size[num_items-1] = TransportBlockSize; break; + case CPCH: + nbap_dch_chnl_info[commonphysicalchannelid].ul_chan_tf_size[num_items-1] = TransportBlockSize; + nbap_dch_chnl_info[commonphysicalchannelid].dl_chan_tf_size[num_items-1] = TransportBlockSize; + break; default: break; } @@ -692,29 +744,44 @@ dch_id = 0xFFFFFFFF; umts_fp_conversation_info->crnc_port = BindingID_port; /* DCH's in this flow */ - umts_fp_conversation_info->num_dch_in_flow = g_num_dch_in_flow; umts_fp_conversation_info->dch_crc_present = g_nbap_msg_info_for_fp.dch_crc_present; - /* Temp kludge to owercome a problem with multiple single flows in one MSG */ - if(g_num_dch_in_flow == 1){ - g_dchs_in_flow_list[0] = dch_id; + /* Set data for First or single channel */ + umts_fp_conversation_info->fp_dch_chanel_info[0].num_ul_chans = num_tf = nbap_dch_chnl_info[dch_id].num_ul_chans; + for (j = 0; j < num_tf; j++) { + umts_fp_conversation_info->fp_dch_chanel_info[0].ul_chan_tf_size[j] = nbap_dch_chnl_info[dch_id].ul_chan_tf_size[j]; + umts_fp_conversation_info->fp_dch_chanel_info[0].ul_chan_num_tbs[j] = nbap_dch_chnl_info[dch_id].ul_chan_num_tbs[j]; + } + + /* Traffic flows per DCH(DL) */ + umts_fp_conversation_info->fp_dch_chanel_info[0].num_dl_chans = num_tf = nbap_dch_chnl_info[dch_id].num_dl_chans; + for (j = 0; j < num_tf; j++) { + umts_fp_conversation_info->fp_dch_chanel_info[0].dl_chan_tf_size[j] = nbap_dch_chnl_info[dch_id].dl_chan_tf_size[j]; + umts_fp_conversation_info->fp_dch_chanel_info[0].dl_chan_num_tbs[j] = nbap_dch_chnl_info[dch_id].dl_chan_num_tbs[j]; } - for (i = 0; i < g_num_dch_in_flow; i++) { - umts_fp_conversation_info->dchs_in_flow_list[i] = g_dchs_in_flow_list[i]; + /* Set data for associated DCH's if we have any */ + i = dch_id; + umts_fp_conversation_info->dchs_in_flow_list[0] = dch_id; + while(nbap_dch_chnl_info[i].next_dch != 0){ + i = nbap_dch_chnl_info[i].next_dch; + umts_fp_conversation_info->num_dch_in_flow++; + umts_fp_conversation_info->dchs_in_flow_list[umts_fp_conversation_info->num_dch_in_flow] = i; /* Traffic flows per DCH(UL) */ - umts_fp_conversation_info->fp_dch_chanel_info[i].num_ul_chans = num_tf = nbap_dch_chnl_info[g_dchs_in_flow_list[i]].num_ul_chans; + umts_fp_conversation_info->fp_dch_chanel_info[umts_fp_conversation_info->num_dch_in_flow].num_ul_chans = num_tf = nbap_dch_chnl_info[i].num_ul_chans; for (j = 0; j < num_tf; j++) { - umts_fp_conversation_info->fp_dch_chanel_info[i].ul_chan_tf_size[j] = nbap_dch_chnl_info[g_dchs_in_flow_list[i]].ul_chan_tf_size[j]; - umts_fp_conversation_info->fp_dch_chanel_info[i].ul_chan_num_tbs[j] = nbap_dch_chnl_info[g_dchs_in_flow_list[i]].ul_chan_num_tbs[j]; + umts_fp_conversation_info->fp_dch_chanel_info[umts_fp_conversation_info->num_dch_in_flow].ul_chan_tf_size[j] = nbap_dch_chnl_info[i].ul_chan_tf_size[j]; + umts_fp_conversation_info->fp_dch_chanel_info[umts_fp_conversation_info->num_dch_in_flow].ul_chan_num_tbs[j] = nbap_dch_chnl_info[i].ul_chan_num_tbs[j]; } /* Traffic flows per DCH(DL) */ - umts_fp_conversation_info->fp_dch_chanel_info[i].num_dl_chans = num_tf = nbap_dch_chnl_info[g_dchs_in_flow_list[i]].num_dl_chans; + umts_fp_conversation_info->fp_dch_chanel_info[umts_fp_conversation_info->num_dch_in_flow].num_dl_chans = num_tf = nbap_dch_chnl_info[i].num_dl_chans; for (j = 0; j < num_tf; j++) { - umts_fp_conversation_info->fp_dch_chanel_info[i].dl_chan_tf_size[j] = nbap_dch_chnl_info[g_dchs_in_flow_list[i]].dl_chan_tf_size[j]; - umts_fp_conversation_info->fp_dch_chanel_info[i].dl_chan_num_tbs[j] = nbap_dch_chnl_info[g_dchs_in_flow_list[i]].dl_chan_num_tbs[j]; + umts_fp_conversation_info->fp_dch_chanel_info[umts_fp_conversation_info->num_dch_in_flow].dl_chan_tf_size[j] = nbap_dch_chnl_info[i].dl_chan_tf_size[j]; + umts_fp_conversation_info->fp_dch_chanel_info[umts_fp_conversation_info->num_dch_in_flow].dl_chan_num_tbs[j] = nbap_dch_chnl_info[i].dl_chan_num_tbs[j]; } } + umts_fp_conversation_info->num_dch_in_flow++; + umts_fp_conversation_info->dchs_in_flow_list[umts_fp_conversation_info->num_dch_in_flow] = i; set_umts_fp_conv_data(conversation, umts_fp_conversation_info); } } diff --git a/asn1/nbap/packet-nbap-template.c b/asn1/nbap/packet-nbap-template.c index 8535538b74..d5d7c3d5ec 100644 --- a/asn1/nbap/packet-nbap-template.c +++ b/asn1/nbap/packet-nbap-template.c @@ -98,6 +98,8 @@ struct _nbap_msg_info_for_fp typedef struct { + gint num_dch_in_flow; + gint next_dch; gint num_ul_chans; gint ul_chan_tf_size[MAX_FP_CHANS]; gint ul_chan_num_tbs[MAX_FP_CHANS]; @@ -119,8 +121,9 @@ static guint32 ProcedureCode; static guint32 ProtocolIE_ID; static guint32 ddMode; static const gchar *ProcedureID; -static guint32 t_dch_id, dch_id, commonphysicalchannelid, e_dch_macdflow_id, hsdsch_macdflow_id; +static guint32 t_dch_id, dch_id, prev_dch_id, commonphysicalchannelid, e_dch_macdflow_id, hsdsch_macdflow_id; static guint num_items; +static gboolean show_conv_data_collection = TRUE; enum TransportFormatSet_type_enum { |