aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors
diff options
context:
space:
mode:
authorAnders Broman <anders.broman@ericsson.com>2012-05-28 13:38:40 +0000
committerAnders Broman <anders.broman@ericsson.com>2012-05-28 13:38:40 +0000
commitd8ddd39c3d47719c0f79229afd26a27354a9646b (patch)
tree4eb855b2787fc208f34025b3973be886047a2895 /epan/dissectors
parent4baba1c6845549f75a9cd8480914b6b2bc3da5cd (diff)
Enhance CHANNEL_HSDSCH dissection.
svn path=/trunk/; revision=42876
Diffstat (limited to 'epan/dissectors')
-rw-r--r--epan/dissectors/packet-nbap.c261
-rw-r--r--epan/dissectors/packet-rlc.c7
-rw-r--r--epan/dissectors/packet-rlc.h1
-rw-r--r--epan/dissectors/packet-umts_fp.c16
-rw-r--r--epan/dissectors/packet-umts_fp.h1
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];