diff options
author | Anders Broman <anders.broman@ericsson.com> | 2012-05-20 21:24:18 +0000 |
---|---|---|
committer | Anders Broman <anders.broman@ericsson.com> | 2012-05-20 21:24:18 +0000 |
commit | c5d3f8c2ba8923e7a264e8ddf829477a94ae6bcb (patch) | |
tree | 944b3dca3b547452c2bed46647d9d2583b2ad53d /asn1/nbap | |
parent | 254fcdfe194a12a7c1e0dd119047858d21aa9d46 (diff) |
Set up conversations for more channel types
svn path=/trunk/; revision=42729
Diffstat (limited to 'asn1/nbap')
-rw-r--r-- | asn1/nbap/nbap.cnf | 193 | ||||
-rw-r--r-- | asn1/nbap/packet-nbap-template.c | 1 |
2 files changed, 193 insertions, 1 deletions
diff --git a/asn1/nbap/nbap.cnf b/asn1/nbap/nbap.cnf index 1abb741337..f52a89a969 100644 --- a/asn1/nbap/nbap.cnf +++ b/asn1/nbap/nbap.cnf @@ -583,7 +583,7 @@ transportFormatSet_type = CPCH; /* 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->channel = CHANNEL_RACH_FDD; 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); @@ -611,6 +611,191 @@ transportFormatSet_type = CPCH; } } +#.FN_BODY PCH-ParametersItem-CTCH-SetupRqstFDD + +address dst_addr, null_addr; +conversation_t *conversation; + +umts_fp_conversation_info_t *umts_fp_conversation_info; +int i, j, num_tf; + +transportLayerAddress_ipv4 = 0; +BindingID_port = 0; + +transportFormatSet_type = CPCH; +/* There can only be one item, set num_items here to collect the TransportFormatSet data */ +num_items = 1; + +%(DEFAULT_BODY)s + + 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 data */ + umts_fp_conversation_info->iface_type = IuB_Interface; + umts_fp_conversation_info->division = Division_FDD; + umts_fp_conversation_info->channel = CHANNEL_PCH; + 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]; + } + + /* Set data for associated DCH's if we have any */ + i = commonphysicalchannelid; + umts_fp_conversation_info->dchs_in_flow_list[0] = commonphysicalchannelid; + 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[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[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[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[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); + } + + } + + +#.FN_BODY FACH-ParametersItem-CTCH-SetupRqstFDD +address dst_addr, null_addr; +conversation_t *conversation; + +umts_fp_conversation_info_t *umts_fp_conversation_info; +int i, j, num_tf; + +transportLayerAddress_ipv4 = 0; +BindingID_port = 0; + +transportFormatSet_type = CPCH; + +%(DEFAULT_BODY)s + + 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 data */ + umts_fp_conversation_info->iface_type = IuB_Interface; + umts_fp_conversation_info->division = Division_FDD; + umts_fp_conversation_info->channel = CHANNEL_FACH_FDD; + 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]; + } + + /* Set data for associated DCH's if we have any */ + i = commonphysicalchannelid; + umts_fp_conversation_info->dchs_in_flow_list[0] = commonphysicalchannelid; + 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[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[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[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[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); + } + + } #.FN_HDR DCH-Specific-FDD-InformationList g_num_dch_in_flow = 0; @@ -638,6 +823,12 @@ transportFormatSet_type = CPCH; transportFormatSet_type = DCH_DL; nbap_dch_chnl_info[dch_id].num_dl_chans = 0; +#.FN_HDR PCH-ParametersItem-CTCH-SetupRqstFDD/transportFormatSet + transportFormatSet_type = CPCH; + nbap_dch_chnl_info[commonphysicalchannelid].num_dl_chans = 0; + nbap_dch_chnl_info[commonphysicalchannelid].num_ul_chans = 0; + + #.FN_HDR TransportFormatSet-DynamicPartList num_items = 0; diff --git a/asn1/nbap/packet-nbap-template.c b/asn1/nbap/packet-nbap-template.c index d5d7c3d5ec..fda7192e58 100644 --- a/asn1/nbap/packet-nbap-template.c +++ b/asn1/nbap/packet-nbap-template.c @@ -130,6 +130,7 @@ enum TransportFormatSet_type_enum DCH_UL, DCH_DL, CPCH, + FACH, }; enum TransportFormatSet_type_enum transportFormatSet_type; |