From c4b63360dca3801edf6b7f0a08e8129021029ecd Mon Sep 17 00:00:00 2001 From: Bill Meier Date: Thu, 27 Oct 2011 20:30:38 +0000 Subject: Fix proto_tree_add_item( encoding args; Do whitespace cleanup (for a few files). svn path=/trunk/; revision=39640 --- epan/dissectors/packet-aarp.c | 4 +- epan/dissectors/packet-bssgp.c | 8421 +++++++++++++------------ epan/dissectors/packet-collectd.c | 4 +- epan/dissectors/packet-diffserv-mpls-common.c | 58 +- epan/dissectors/packet-dis-fields.c | 4 +- epan/dissectors/packet-h248_3gpp.c | 4 +- epan/dissectors/packet-isis-clv.c | 4 +- epan/dissectors/packet-pop.c | 4 +- epan/dissectors/packet-radius_packetcable.c | 4 +- epan/dissectors/packet-rtcp.c | 7736 +++++++++++------------ epan/dissectors/packet-sflow.c | 4 +- epan/dissectors/packet-ucp.c | 2 +- 12 files changed, 8128 insertions(+), 8121 deletions(-) (limited to 'epan/dissectors') diff --git a/epan/dissectors/packet-aarp.c b/epan/dissectors/packet-aarp.c index 6649ca15a9..761e8a7a9a 100644 --- a/epan/dissectors/packet-aarp.c +++ b/epan/dissectors/packet-aarp.c @@ -221,7 +221,7 @@ dissect_aarp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { if (ar_hln != 0) { proto_tree_add_item(aarp_tree, AARP_HW_IS_ETHER(ar_hrd, ar_hln) ? hf_aarp_src_hw_mac : hf_aarp_src_hw, - tvb, sha_offset, ar_hln, FALSE); + tvb, sha_offset, ar_hln, ENC_NA); } if (ar_pln != 0) { @@ -239,7 +239,7 @@ dissect_aarp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { if (ar_hln != 0) { proto_tree_add_item(aarp_tree, AARP_HW_IS_ETHER(ar_hrd, ar_hln) ? hf_aarp_dst_hw_mac : hf_aarp_dst_hw, - tvb, tha_offset, ar_hln, FALSE); + tvb, tha_offset, ar_hln, ENC_NA); } if (ar_pln != 0) { diff --git a/epan/dissectors/packet-bssgp.c b/epan/dissectors/packet-bssgp.c index 3ff07d1f1c..f8f4d9b345 100644 --- a/epan/dissectors/packet-bssgp.c +++ b/epan/dissectors/packet-bssgp.c @@ -58,6 +58,13 @@ * * which sure sounds little-endian. * + * [ + * Later comment: + * Actually: To me. the above reads as being BIG_ENDIAN. + * IOW: if bytes are numbered from 0 to n, then the n'th byte + * ("highest numbered octet") has the least significant bit. + * ] + * * However, for some not-entirely-obvious reason, BSSGP_LITTLE_ENDIAN, which * was passed to proto_tree_add_item() as the byte-order argument, was * defined as FALSE - which meant big-endian. @@ -421,13 +428,13 @@ static gint ett_bssgp_ra_id = -1; #define BSSGP_IEI_RIM_SEQUENCE_NUMBER 0x4c #define BSSGP_IEI_RAN_INF_REQUEST_APP_CONTAINER 0x4d #define BSSGP_IEI_RAN_INF_APP_CONTAINER 0x4e -#define BSSGP_IEI_RIM_PDU_INDICATIONS 0x4f +#define BSSGP_IEI_RIM_PDU_INDICATIONS 0x4f #define BSSGP_IEI_NUMBER_OF_CONTAINER_UNITS 0x50 #define BSSGP_IEI_PFC_FLOW_CONTROL_PARAMETERS 0x52 #define BSSGP_IEI_GLOBAL_CN_ID 0x53 -#define BSSGP_IEI_RIM_ROUTING_INFORMATION 0x54 -#define BSSGP_IEI_RIM_PROTOCOL_VERSION 0x55 -#define BSSGP_IEI_APPLICATION_ERROR_CONTAINER 0x56 +#define BSSGP_IEI_RIM_ROUTING_INFORMATION 0x54 +#define BSSGP_IEI_RIM_PROTOCOL_VERSION 0x55 +#define BSSGP_IEI_APPLICATION_ERROR_CONTAINER 0x56 #define BSSGP_IEI_RAN_INF_REQUEST_RIM_CONTAINER 0x57 #define BSSGP_IEI_RAN_INF_RIM_CONTAINER 0x58 @@ -491,32 +498,32 @@ x86 TAC /* Defined localy here without the check of curr_len wrapping, that will be taken care of when this IEI dissecton finishes */ #define ELEM_IN_ELEM_MAND_TELV(EMT_iei, EMT_pdu_type, EMT_elem_idx, EMT_elem_name_addition) \ {\ - if ((consumed = elem_telv(tvb, tree, pinfo, (guint8) EMT_iei, EMT_pdu_type, EMT_elem_idx, curr_offset, curr_len, EMT_elem_name_addition)) > 0) \ - { \ - curr_offset += consumed; \ - curr_len -= consumed; \ - } \ - else \ - { \ - proto_tree_add_text(tree, \ - tvb, curr_offset, 0, \ - "Missing Mandatory element (0x%02x) %s%s, rest of dissection is suspect", \ - EMT_iei, \ - get_gsm_a_msg_string(EMT_pdu_type, EMT_elem_idx), \ - (EMT_elem_name_addition == NULL) ? "" : EMT_elem_name_addition \ - ); \ - } \ + if ((consumed = elem_telv(tvb, tree, pinfo, (guint8) EMT_iei, EMT_pdu_type, EMT_elem_idx, curr_offset, curr_len, EMT_elem_name_addition)) > 0) \ + { \ + curr_offset += consumed; \ + curr_len -= consumed; \ + } \ + else \ + { \ + proto_tree_add_text(tree, \ + tvb, curr_offset, 0, \ + "Missing Mandatory element (0x%02x) %s%s, rest of dissection is suspect", \ + EMT_iei, \ + get_gsm_a_msg_string(EMT_pdu_type, EMT_elem_idx), \ + (EMT_elem_name_addition == NULL) ? "" : EMT_elem_name_addition \ + ); \ + } \ } #define ELEM_IN_ELEM_OPT_TELV(EOT_iei, EOT_pdu_type, EOT_elem_idx, EOT_elem_name_addition) \ {\ - if (curr_len != 0){\ - if ((consumed = elem_telv(tvb, tree, pinfo, (guint8) EOT_iei, EOT_pdu_type, EOT_elem_idx, curr_offset, curr_len, EOT_elem_name_addition)) > 0) \ - { \ - curr_offset += consumed; \ - curr_len -= consumed; \ - } \ - } \ + if (curr_len != 0){\ + if ((consumed = elem_telv(tvb, tree, pinfo, (guint8) EOT_iei, EOT_pdu_type, EOT_elem_idx, curr_offset, curr_len, EOT_elem_name_addition)) > 0) \ + { \ + curr_offset += consumed; \ + curr_len -= consumed; \ + } \ + } \ } /* Forward declarations */ @@ -530,220 +537,220 @@ static guint16 de_bssgp_ran_inf_app_error_rim_cont(tvbuff_t *tvb, proto_tree *tr static const value_string tab_nacc_cause[]={ - { 0x00, "Other unspecified error" }, - { 0x01, "Syntax error in the Application Container" }, - { 0x02, "Reporting Cell Identifier does not match with the Destination Cell Identifier or with the Source Cell Identifier" }, - { 0x03, "SI/PSI type error" }, - { 0x04, "Inconsistent length of a SI/PSI message" }, - { 0x05, "Inconsistent set of messages" }, - { 0, NULL }, + { 0x00, "Other unspecified error" }, + { 0x01, "Syntax error in the Application Container" }, + { 0x02, "Reporting Cell Identifier does not match with the Destination Cell Identifier or with the Source Cell Identifier" }, + { 0x03, "SI/PSI type error" }, + { 0x04, "Inconsistent length of a SI/PSI message" }, + { 0x05, "Inconsistent set of messages" }, + { 0, NULL }, }; /* - * 11.3 Information Element Identifier (IEI) + * 11.3 Information Element Identifier (IEI) */ /* - * 11.3.1 Alignment octets + * 11.3.1 Alignment octets */ static guint16 de_bssgp_aligment_octets(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - proto_tree_add_text(tree, tvb, curr_offset, len, "%u Spare octet(s)",len); + proto_tree_add_text(tree, tvb, curr_offset, len, "%u Spare octet(s)",len); - return(len); + return(len); } /* - * 11.3.2 Bmax default MS + * 11.3.2 Bmax default MS */ static guint16 de_bssgp_bmax_default_ms(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - proto_tree_add_item(tree, hf_bssgp_bmax, tvb, curr_offset, 2, ENC_BIG_ENDIAN); - curr_offset+=2; + proto_tree_add_item(tree, hf_bssgp_bmax, tvb, curr_offset, 2, ENC_BIG_ENDIAN); + curr_offset+=2; - return(curr_offset-offset); + return(curr_offset-offset); } /* - * 11.3.3 BSS Area Indication + * 11.3.3 BSS Area Indication */ static guint16 de_bssgp_bss_area_ind(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - proto_tree_add_item(tree, hf_bssgp_bss_area_ind, tvb, curr_offset, 2, ENC_BIG_ENDIAN); - curr_offset++; + proto_tree_add_item(tree, hf_bssgp_bss_area_ind, tvb, curr_offset, 2, ENC_BIG_ENDIAN); + curr_offset++; - return(curr_offset-offset); + return(curr_offset-offset); } /* - * 11.3.4 Bucket Leak Rate (R) + * 11.3.4 Bucket Leak Rate (R) */ static guint16 de_bssgp_bucket_leak_rate(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - proto_tree_add_item(tree, hf_bssgp_r, tvb, curr_offset, 2, ENC_BIG_ENDIAN); - curr_offset+=2; + proto_tree_add_item(tree, hf_bssgp_r, tvb, curr_offset, 2, ENC_BIG_ENDIAN); + curr_offset+=2; - return(curr_offset-offset); + return(curr_offset-offset); } /* - * 11.3.5 BVC Bucket Size + * 11.3.5 BVC Bucket Size */ static guint16 de_bssgp_bvc_bucket_size(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - proto_tree_add_item(tree, hf_bssgp_bucket_size, tvb, curr_offset, 2, ENC_BIG_ENDIAN); - curr_offset+=2; + proto_tree_add_item(tree, hf_bssgp_bucket_size, tvb, curr_offset, 2, ENC_BIG_ENDIAN); + curr_offset+=2; - return(curr_offset-offset); + return(curr_offset-offset); } /* - * 11.3.6 BVCI (BSSGP Virtual Connection Identifier) + * 11.3.6 BVCI (BSSGP Virtual Connection Identifier) */ static guint16 de_bssgp_bvci(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; - guint16 bvci; + guint32 curr_offset; + guint16 bvci; - curr_offset = offset; + curr_offset = offset; - /* octet 3-4 Unstructured value */ - bvci = tvb_get_ntohs(tvb,curr_offset); - proto_tree_add_item(tree, hf_bssgp_bvci, tvb, curr_offset, 2, ENC_BIG_ENDIAN); - curr_offset+=2; + /* octet 3-4 Unstructured value */ + bvci = tvb_get_ntohs(tvb,curr_offset); + proto_tree_add_item(tree, hf_bssgp_bvci, tvb, curr_offset, 2, ENC_BIG_ENDIAN); + curr_offset+=2; - if (add_string) - g_snprintf(add_string, string_len, " - 0x%x", bvci); + if (add_string) + g_snprintf(add_string, string_len, " - 0x%x", bvci); - return(curr_offset-offset); + return(curr_offset-offset); } /* - * 11.3.7 BVC Measurement + * 11.3.7 BVC Measurement */ static guint16 de_bssgp_bvc_meas(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - /* The Delay Value field is coded as a 16-bit integer value in units of centi-seconds (one hundredth of a second). This - * coding provides a range of over 10 minutes in increments of 10 ms. As a special case, the hexadecimal value 0xFFFF - *(decimal 65 535) shall be interpreted as "infinite delay". - */ - proto_tree_add_item(tree, hf_bssgp_delay_val, tvb, curr_offset, 2, ENC_BIG_ENDIAN); - curr_offset+=2; + /* The Delay Value field is coded as a 16-bit integer value in units of centi-seconds (one hundredth of a second). This + * coding provides a range of over 10 minutes in increments of 10 ms. As a special case, the hexadecimal value 0xFFFF + *(decimal 65 535) shall be interpreted as "infinite delay". + */ + proto_tree_add_item(tree, hf_bssgp_delay_val, tvb, curr_offset, 2, ENC_BIG_ENDIAN); + curr_offset+=2; - return(curr_offset-offset); + return(curr_offset-offset); } /* - * 11.3.8 Cause + * 11.3.8 Cause */ static const value_string bssgp_cause_vals[] = { - { 0x00, "Processor overload" }, - { 0x01, "Equipment failure" }, - { 0x02, "Transit network service failure" }, - { 0x03, "Network service transmission capacity modified from zero kbps to greater than zero kbps" }, - { 0x04, "Unknown MS" }, - { 0x05, "BVCI unknown" }, - { 0x06, "Cell traffic congestion" }, - { 0x07, "SGSN congestion" }, - { 0x08, "O&M intervention" }, - { 0x09, "BVCI blocked" }, - { 0x0a, "PFC create failure" }, - { 0x0b, "PFC preempted" }, - { 0x0c, "ABQP no more supported" }, - - { 0x0d, "Undefined - protocol error - unspecified" }, - { 0x0e, "Undefined - protocol error - unspecified" }, - { 0x0f, "Undefined - protocol error - unspecified" }, - { 0x10, "Undefined - protocol error - unspecified" }, - { 0x11, "Undefined - protocol error - unspecified" }, - { 0x12, "Undefined - protocol error - unspecified" }, - { 0x13, "Undefined - protocol error - unspecified" }, - { 0x14, "Undefined - protocol error - unspecified" }, - { 0x15, "Undefined - protocol error - unspecified" }, - { 0x16, "Undefined - protocol error - unspecified" }, - { 0x17, "Undefined - protocol error - unspecified" }, - { 0x18, "Undefined - protocol error - unspecified" }, - { 0x19, "Undefined - protocol error - unspecified" }, - { 0x1a, "Undefined - protocol error - unspecified" }, - { 0x1b, "Undefined - protocol error - unspecified" }, - { 0x1c, "Undefined - protocol error - unspecified" }, - { 0x1d, "Undefined - protocol error - unspecified" }, - { 0x1e, "Undefined - protocol error - unspecified" }, - { 0x1f, "Undefined - protocol error - unspecified" }, - - { 0x20, "Semantically incorrect PDU" }, - { 0x21, "Invalid mandatory information" }, - { 0x22, "Missing mandatory IE" }, - { 0x23, "Missing conditional IE" }, - { 0x24, "Unexpected conditional IE" }, - { 0x25, "Conditional IE error" }, - { 0x26, "PDU not compatible with the protocol state" }, - { 0x27, "Protocol error - unspecified" }, - { 0x28, "PDU not compatible with the feature set" }, - { 0x29, "Requested information not available" }, - { 0x2a, "Unknown destination address" }, - { 0x2b, "Unknown RIM application identity" }, - { 0x2c, "Invalid container unit information" }, - { 0x2d, "PFC queuing" }, - { 0x2e, "PFC created successfully" }, - { 0x2f, "T12 expiry" }, - { 0x30, "MS under PS Handover treatment" }, - { 0x31, "Uplink quality" }, - { 0x32, "Uplink strength" }, - { 0x33, "Downlink quality" }, - { 0x34, "Downlink strength" }, - { 0x35, "Distance" }, - { 0x36, "Better cell" }, - { 0x37, "Traffic" }, - { 0x38, "Radio contact lost with MS" }, - { 0x39, "MS back on old channel" }, - { 0x3a, "T13 expiry" }, - { 0x3b, "T14 expiry" }, - { 0x3c, "Not all requested PFCs created" }, - { 0x3d, "CS cause" }, - { 0x3e, "Requested ciphering and/or integrity protection algorithms not supported" }, - { 0x3f, "Relocation failure in target system" }, - { 0x40, "Directed Retry" }, - { 0x41, "Time critical relocation" }, - { 0x42, "PS Handover Target not allowed" }, - { 0x43, "PS Handover not Supported in Target BSS or Target System" }, - { 0x44, "Incoming relocation not supported due to PUESBINE feature" }, - { 0x45, "DTM Handover - No CS resource" }, - { 0x46, "DTM Handover - PS Allocation failure" }, - { 0x47, "DTM Handover - T24 expiry" }, - { 0x48, "DTM Handover - Invalid CS Indication IE" }, - { 0x49, "DTM Handover - T23 expiry" }, - { 0x4a, "DTM Handover - MSC Error" }, - { 0x4b, "Invalid CSG cell" }, - { 0, NULL }, + { 0x00, "Processor overload" }, + { 0x01, "Equipment failure" }, + { 0x02, "Transit network service failure" }, + { 0x03, "Network service transmission capacity modified from zero kbps to greater than zero kbps" }, + { 0x04, "Unknown MS" }, + { 0x05, "BVCI unknown" }, + { 0x06, "Cell traffic congestion" }, + { 0x07, "SGSN congestion" }, + { 0x08, "O&M intervention" }, + { 0x09, "BVCI blocked" }, + { 0x0a, "PFC create failure" }, + { 0x0b, "PFC preempted" }, + { 0x0c, "ABQP no more supported" }, + + { 0x0d, "Undefined - protocol error - unspecified" }, + { 0x0e, "Undefined - protocol error - unspecified" }, + { 0x0f, "Undefined - protocol error - unspecified" }, + { 0x10, "Undefined - protocol error - unspecified" }, + { 0x11, "Undefined - protocol error - unspecified" }, + { 0x12, "Undefined - protocol error - unspecified" }, + { 0x13, "Undefined - protocol error - unspecified" }, + { 0x14, "Undefined - protocol error - unspecified" }, + { 0x15, "Undefined - protocol error - unspecified" }, + { 0x16, "Undefined - protocol error - unspecified" }, + { 0x17, "Undefined - protocol error - unspecified" }, + { 0x18, "Undefined - protocol error - unspecified" }, + { 0x19, "Undefined - protocol error - unspecified" }, + { 0x1a, "Undefined - protocol error - unspecified" }, + { 0x1b, "Undefined - protocol error - unspecified" }, + { 0x1c, "Undefined - protocol error - unspecified" }, + { 0x1d, "Undefined - protocol error - unspecified" }, + { 0x1e, "Undefined - protocol error - unspecified" }, + { 0x1f, "Undefined - protocol error - unspecified" }, + + { 0x20, "Semantically incorrect PDU" }, + { 0x21, "Invalid mandatory information" }, + { 0x22, "Missing mandatory IE" }, + { 0x23, "Missing conditional IE" }, + { 0x24, "Unexpected conditional IE" }, + { 0x25, "Conditional IE error" }, + { 0x26, "PDU not compatible with the protocol state" }, + { 0x27, "Protocol error - unspecified" }, + { 0x28, "PDU not compatible with the feature set" }, + { 0x29, "Requested information not available" }, + { 0x2a, "Unknown destination address" }, + { 0x2b, "Unknown RIM application identity" }, + { 0x2c, "Invalid container unit information" }, + { 0x2d, "PFC queuing" }, + { 0x2e, "PFC created successfully" }, + { 0x2f, "T12 expiry" }, + { 0x30, "MS under PS Handover treatment" }, + { 0x31, "Uplink quality" }, + { 0x32, "Uplink strength" }, + { 0x33, "Downlink quality" }, + { 0x34, "Downlink strength" }, + { 0x35, "Distance" }, + { 0x36, "Better cell" }, + { 0x37, "Traffic" }, + { 0x38, "Radio contact lost with MS" }, + { 0x39, "MS back on old channel" }, + { 0x3a, "T13 expiry" }, + { 0x3b, "T14 expiry" }, + { 0x3c, "Not all requested PFCs created" }, + { 0x3d, "CS cause" }, + { 0x3e, "Requested ciphering and/or integrity protection algorithms not supported" }, + { 0x3f, "Relocation failure in target system" }, + { 0x40, "Directed Retry" }, + { 0x41, "Time critical relocation" }, + { 0x42, "PS Handover Target not allowed" }, + { 0x43, "PS Handover not Supported in Target BSS or Target System" }, + { 0x44, "Incoming relocation not supported due to PUESBINE feature" }, + { 0x45, "DTM Handover - No CS resource" }, + { 0x46, "DTM Handover - PS Allocation failure" }, + { 0x47, "DTM Handover - T24 expiry" }, + { 0x48, "DTM Handover - Invalid CS Indication IE" }, + { 0x49, "DTM Handover - T23 expiry" }, + { 0x4a, "DTM Handover - MSC Error" }, + { 0x4b, "Invalid CSG cell" }, + { 0, NULL }, }; value_string_ext bssgp_cause_vals_ext = VALUE_STRING_EXT_INIT(bssgp_cause_vals); @@ -751,21 +758,21 @@ value_string_ext bssgp_cause_vals_ext = VALUE_STRING_EXT_INIT(bssgp_cause_vals); static guint16 de_bssgp_cause(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - /* The Delay Value field is coded as a 16-bit integer value in units of centi-seconds (one hundredth of a second). This - * coding provides a range of over 10 minutes in increments of 10 ms. As a special case, the hexadecimal value 0xFFFF - *(decimal 65 535) shall be interpreted as "infinite delay". - */ - proto_tree_add_item(tree, hf_bssgp_cause, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - curr_offset+=1; + /* The Delay Value field is coded as a 16-bit integer value in units of centi-seconds (one hundredth of a second). This + * coding provides a range of over 10 minutes in increments of 10 ms. As a special case, the hexadecimal value 0xFFFF + *(decimal 65 535) shall be interpreted as "infinite delay". + */ + proto_tree_add_item(tree, hf_bssgp_cause, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + curr_offset+=1; - return(curr_offset-offset); + return(curr_offset-offset); } /* - * 11.3.9 Cell Identifier + * 11.3.9 Cell Identifier */ /* * octets 3-8 Octets 3 to 8 contain the value part (starting with octet 2) of the @@ -779,26 +786,26 @@ de_bssgp_cause(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 static guint16 de_bssgp_cell_id(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len _U_, gchar *add_string, int string_len) { - guint32 curr_offset; - guint16 ci; + guint32 curr_offset; + guint16 ci; - curr_offset = offset; + curr_offset = offset; - curr_offset = curr_offset + de_gmm_rai(tvb, tree, pinfo, curr_offset, 6, add_string, string_len); - /*Why doesn't this work? ( add_string will not contain RAI + CI ) - * curr_offset = curr_offset + de_cell_id(tvb, tree, curr_offset , 2, add_string, string_len); - */ - ci = tvb_get_ntohs(tvb, curr_offset); - proto_tree_add_item(tree, hf_bssgp_ci, tvb, curr_offset, 2, ENC_BIG_ENDIAN); - curr_offset+=2; - if (add_string) - g_snprintf(add_string, string_len, "%s, CI %u", add_string, ci); + curr_offset = curr_offset + de_gmm_rai(tvb, tree, pinfo, curr_offset, 6, add_string, string_len); + /*Why doesn't this work? ( add_string will not contain RAI + CI ) + * curr_offset = curr_offset + de_cell_id(tvb, tree, curr_offset , 2, add_string, string_len); + */ + ci = tvb_get_ntohs(tvb, curr_offset); + proto_tree_add_item(tree, hf_bssgp_ci, tvb, curr_offset, 2, ENC_BIG_ENDIAN); + curr_offset+=2; + if (add_string) + g_snprintf(add_string, string_len, "%s, CI %u", add_string, ci); - return(curr_offset-offset); + return(curr_offset-offset); } /* - * 11.3.10 Channel needed + * 11.3.10 Channel needed */ /* Rest of element coded as the value part of the Channel Needed * PDU defined in 3GPP TS 29.018, not including 3GPP TS 29.018 @@ -810,17 +817,17 @@ de_bssgp_cell_id(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 of static guint16 de_bssgp_chnl_needed(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - curr_offset = de_rr_chnl_needed(tvb, tree, pinfo, curr_offset, len , NULL, 0); + curr_offset = de_rr_chnl_needed(tvb, tree, pinfo, curr_offset, len , NULL, 0); - return(curr_offset-offset); + return(curr_offset-offset); } /* - * 11.3.11 DRX Parameters + * 11.3.11 DRX Parameters */ /* * Rest of element coded as the value part defined in @@ -828,7 +835,7 @@ de_bssgp_chnl_needed(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint3 * 3GPP TS 24.008 octet length indicator */ /* - * 11.3.12 eMLPP-Priority + * 11.3.12 eMLPP-Priority */ /* * Rest of element coded as the value part of the eMLPP-Priority IE @@ -836,35 +843,35 @@ de_bssgp_chnl_needed(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint3 * 3GPP TS 48.008 length indicator */ /* - * 11.3.13 Flush Action + * 11.3.13 Flush Action */ static const value_string bssgp_flush_action_vals[] = { { 0x00, "LLC-PDU(s) deleted" }, { 0x01, "LLC-PDU(s) transferred" }, { 0, NULL }, /* Otherwise "Reserved" */ - }; +}; static guint16 de_bssgp_flush_action(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; - guint8 oct; + guint32 curr_offset; + guint8 oct; - curr_offset = offset; + curr_offset = offset; - /* Action value */ - oct = tvb_get_guint8(tvb,curr_offset); - proto_tree_add_item(tree, hf_bssgp_flush_action, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - curr_offset+=1; - if (add_string) - g_snprintf(add_string, string_len, " - %s", val_to_str_const(oct, bssgp_flush_action_vals, "Reserved")); + /* Action value */ + oct = tvb_get_guint8(tvb,curr_offset); + proto_tree_add_item(tree, hf_bssgp_flush_action, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + curr_offset+=1; + if (add_string) + g_snprintf(add_string, string_len, " - %s", val_to_str_const(oct, bssgp_flush_action_vals, "Reserved")); - return(curr_offset-offset); + return(curr_offset-offset); } /* - * 11.3.14 IMSI + * 11.3.14 IMSI */ /* Octets 3-n contain an IMSI coded as the value part of the Mobile * Identity IE defined in 3GPP TS 24.008 @@ -873,58 +880,58 @@ de_bssgp_flush_action(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, g * the receiver. */ /* - * 11.3.15 LLC-PDU + * 11.3.15 LLC-PDU */ static guint16 de_bssgp_llc_pdu(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - tvbuff_t *next_tvb=NULL; - guint32 curr_offset; - - curr_offset = offset; + tvbuff_t *next_tvb=NULL; + guint32 curr_offset; + curr_offset = offset; - if(len > 0){ - next_tvb = tvb_new_subset_remaining(tvb, curr_offset); - proto_tree_add_text(tree, tvb, curr_offset, len, "LLC Data"); - } - if(next_tvb){ - if (llc_handle) { - call_dissector(llc_handle, next_tvb, gpinfo, gparent_tree); + if(len > 0){ + next_tvb = tvb_new_subset_remaining(tvb, curr_offset); + proto_tree_add_text(tree, tvb, curr_offset, len, "LLC Data"); } - else if (data_handle) { - call_dissector(data_handle, next_tvb, gpinfo, gparent_tree); + + if(next_tvb){ + if (llc_handle) { + call_dissector(llc_handle, next_tvb, gpinfo, gparent_tree); + } + else if (data_handle) { + call_dissector(data_handle, next_tvb, gpinfo, gparent_tree); + } } - } - return(len); + return(len); } /* - * 11.3.16 LLC Frames Discarded + * 11.3.16 LLC Frames Discarded */ static guint16 de_bssgp_llc_frames_disc(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; - guint8 oct; + guint32 curr_offset; + guint8 oct; - curr_offset = offset; + curr_offset = offset; - /* Action value */ - oct = tvb_get_guint8(tvb,curr_offset); - proto_tree_add_item(tree, hf_bssgp_llc_frames_disc, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - curr_offset+=1; + /* Action value */ + oct = tvb_get_guint8(tvb,curr_offset); + proto_tree_add_item(tree, hf_bssgp_llc_frames_disc, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + curr_offset+=1; - if (add_string) - g_snprintf(add_string, string_len, " - %u Frames", oct); + if (add_string) + g_snprintf(add_string, string_len, " - %u Frames", oct); - return(curr_offset-offset); + return(curr_offset-offset); } /* - * 11.3.17 Location Area + * 11.3.17 Location Area */ /* Octets 3 to 7 contain the value part (starting with octet 2) of the * Location Area Identification IE defined in 3GPP TS 24.008, not @@ -932,19 +939,19 @@ de_bssgp_llc_frames_disc(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_ */ /* - * 11.3.18 LSA Identifier List + * 11.3.18 LSA Identifier List */ /* Rest of element coded as in 3GPP TS 48.008, not including * 3GPP TS 48.008 IEI and 3GPP TS 48.008 length indicator */ /* - * 11.3.19 LSA Information + * 11.3.19 LSA Information */ /* Rest of element coded as in 3GPP TS 48.008, not including * 3GPP TS 48.008 IEI and 3GPP TS 48.008 length indicator */ /* - * 11.3.20 Mobile Id + * 11.3.20 Mobile Id */ /* Octets 3-n contain either the IMSI, IMEISV or IMEI coded as the * value part (starting with octet 3) of the Mobile Identity IE defined in @@ -952,61 +959,61 @@ de_bssgp_llc_frames_disc(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_ * 3GPP TS 24.008 length indcator */ /* - * 11.3.21 MS Bucket Size + * 11.3.21 MS Bucket Size */ static guint16 de_bssgp_ms_bucket_size(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - /* The Bmax field is coded as Bmax of BVC Bucket Size, see sub-clause 11.3.5. */ - proto_tree_add_item(tree, hf_bssgp_bucket_size, tvb, curr_offset, 2, ENC_BIG_ENDIAN); - curr_offset+=2; + /* The Bmax field is coded as Bmax of BVC Bucket Size, see sub-clause 11.3.5. */ + proto_tree_add_item(tree, hf_bssgp_bucket_size, tvb, curr_offset, 2, ENC_BIG_ENDIAN); + curr_offset+=2; - return(curr_offset-offset); + return(curr_offset-offset); } /* - * 11.3.22 MS Radio Access Capability + * 11.3.22 MS Radio Access Capability */ /* Rest of element coded as the value part defined in * 3GPP TS 24.008, not including 3GPP TS 24.008 IEI and * 3GPP TS 24.008 octet length indicator. */ /* - * 11.3.23 OMC Id + * 11.3.23 OMC Id */ static guint16 de_bssgp_omc_id(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - /* octet 3-22 For the OMC identity, see 3GPP TS 12.20 */ - proto_tree_add_item(tree, hf_bssgp_omc_id, tvb, curr_offset, len, ENC_NA); + /* octet 3-22 For the OMC identity, see 3GPP TS 12.20 */ + proto_tree_add_item(tree, hf_bssgp_omc_id, tvb, curr_offset, len, ENC_NA); - return len; + return len; } /* - * 11.3.24 PDU In Error + * 11.3.24 PDU In Error */ static guint16 de_bssgp_pdu_in_error(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - /* octet 3-? Erroneous BSSGP PDU */ - proto_tree_add_item(tree, hf_bssgp_msg_type, tvb, 0, 1, ENC_BIG_ENDIAN); - curr_offset++; + /* octet 3-? Erroneous BSSGP PDU */ + proto_tree_add_item(tree, hf_bssgp_msg_type, tvb, 0, 1, ENC_BIG_ENDIAN); + curr_offset++; - proto_tree_add_text(tree, tvb, curr_offset, len-1, "PDU Data"); + proto_tree_add_text(tree, tvb, curr_offset, len-1, "PDU Data"); - return len; + return len; } /* * 11.3.25 PDU Lifetime @@ -1014,14 +1021,14 @@ de_bssgp_pdu_in_error(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, g static guint16 de_bssgp_pdu_lifetime(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - proto_tree_add_item(tree, hf_bssgp_delay_val, tvb, curr_offset, 2, ENC_BIG_ENDIAN); - curr_offset+=2; + proto_tree_add_item(tree, hf_bssgp_delay_val, tvb, curr_offset, 2, ENC_BIG_ENDIAN); + curr_offset+=2; - return(curr_offset-offset); + return(curr_offset-offset); } /* @@ -1030,17 +1037,17 @@ coding provides a range of over 10 minutes in increments of 10 ms. As a special (decimal 65 535) shall be interpreted as "infinite delay". */ /* - * 11.3.26 PDU Type + * 11.3.26 PDU Type */ /* - * 11.3.27 Priority + * 11.3.27 Priority */ /* Rest of element coded as the value part of the Priority IE defined in * 3GPP TS 48.008, not including 3GPP TS 48.008 IEI and * 3GPP TS 48.008 length indicator */ /* - * 11.3.28 QoS Profile + * 11.3.28 QoS Profile */ static const true_false_string bssgp_a_bit_vals = { "Radio interface uses RLC/MAC-UNITDATA functionality", @@ -1058,102 +1065,102 @@ static const true_false_string bssgp_cr_bit_vals = { }; const value_string bssgp_peak_rate_gran_vals[] = { - { 0x0, "100 bits/s increments" }, + { 0x0, "100 bits/s increments" }, { 0x1, "1000 bits/s increments" }, { 0x2, "10000 bits/s increments" }, { 0x3, "100000 bits/s increments" }, - { 0, NULL } + { 0, NULL } }; - static const value_string bssgp_precedence_ul[] = { +static const value_string bssgp_precedence_ul[] = { { 0, "High priority" }, { 1, "Normal priority" }, { 2, "Low priority" }, { 0, NULL }, - }; +}; - static const value_string bssgp_precedence_dl[] = { +static const value_string bssgp_precedence_dl[] = { { 0, "Radio priority 1" }, { 1, "Radio priority 2" }, { 2, "Radio priority 3" }, { 3, "Radio priority 4" }, { 4, "Radio priority unknown" }, { 0, NULL }, - }; +}; static guint16 de_bssgp_qos_profile(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - proto_item *pi, *pre_item; - guint32 curr_offset; - guint16 peak_bit_rate; - guint8 rate_gran, precedence; - int link_dir; - - curr_offset = offset; - - /* octet 3-4 Peak bit rate provided by the network (note) - * NOTE: The bit rate 0 (zero) shall mean "best effort" in this IE. - */ - link_dir = gpinfo->link_dir; - - peak_bit_rate = tvb_get_ntohs(tvb, curr_offset); - pi = proto_tree_add_text(tree, tvb, curr_offset, 1, "Peak bit rate: "); - if (peak_bit_rate == 0) { - proto_item_append_text(pi, "Best effort"); - }else{ - rate_gran = tvb_get_guint8(tvb, curr_offset+2)&0xc0; - switch(rate_gran){ - case 0: - /* 100 bits/s increments */ - proto_item_append_text(pi, "%u bits/s", peak_bit_rate * 100); - break; - case 1: - /* 1000 bits/s increments */ - proto_item_append_text(pi, "%u kbits/s", peak_bit_rate); - break; - case 2: - /* 10000 bits/s increments */ - proto_item_append_text(pi, "%u kbits/s", peak_bit_rate * 10); - break; - case 3: - /* 100000 bits/s increments */ - proto_item_append_text(pi, "%u kbits/s", peak_bit_rate * 100); - break; - default: - break; - } - } - curr_offset+=2; - - /* octet 5 Peak Bit Rate Granularity C/R T A Precedence */ - /* If the Gigabit Interface feature has not been negotiated, the "Peak bit rate" - * field is the binary encoding of the peak bit rate information expressed in 100 bits/s - * increments, starting from 0 x 100 bits/s until 65 535 x 100 bits/s (6 Mbps). - * - * If the Gigabit Interface feature has been negotiated, the "Peak bit rate" field is the - * binary encoding of the peak bit rate information expressed in increments as defined by - * the Peak Bit Rate Granularity field. - */ - proto_tree_add_item(tree, hf_bssgp_peak_rate_gran, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - proto_tree_add_item(tree, hf_bssgp_cr_bit, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - proto_tree_add_item(tree, hf_bssgp_t_bit, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - proto_tree_add_item(tree, hf_bssgp_a_bit, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - precedence = tvb_get_guint8(tvb, curr_offset) & 0x7; - pre_item = proto_tree_add_item(tree, hf_bssgp_precedence, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - if(link_dir == P2P_DIR_DL){ - proto_item_append_text(pre_item, " %s", val_to_str_const((guint32)precedence, bssgp_precedence_dl, "Radio Priority Unknown(Radio priority 3)")); - }else{ - proto_item_append_text(pre_item, " %s", val_to_str_const((guint32)precedence, bssgp_precedence_ul, "Priority Unknown(Low priority)")); - } - - curr_offset++; - - return(curr_offset-offset); -} -/* - * 11.3.29 Radio Cause - */ - static const value_string bssgp_radio_cause_vals[] = { + proto_item *pi, *pre_item; + guint32 curr_offset; + guint16 peak_bit_rate; + guint8 rate_gran, precedence; + int link_dir; + + curr_offset = offset; + + /* octet 3-4 Peak bit rate provided by the network (note) + * NOTE: The bit rate 0 (zero) shall mean "best effort" in this IE. + */ + link_dir = gpinfo->link_dir; + + peak_bit_rate = tvb_get_ntohs(tvb, curr_offset); + pi = proto_tree_add_text(tree, tvb, curr_offset, 1, "Peak bit rate: "); + if (peak_bit_rate == 0) { + proto_item_append_text(pi, "Best effort"); + }else{ + rate_gran = tvb_get_guint8(tvb, curr_offset+2)&0xc0; + switch(rate_gran){ + case 0: + /* 100 bits/s increments */ + proto_item_append_text(pi, "%u bits/s", peak_bit_rate * 100); + break; + case 1: + /* 1000 bits/s increments */ + proto_item_append_text(pi, "%u kbits/s", peak_bit_rate); + break; + case 2: + /* 10000 bits/s increments */ + proto_item_append_text(pi, "%u kbits/s", peak_bit_rate * 10); + break; + case 3: + /* 100000 bits/s increments */ + proto_item_append_text(pi, "%u kbits/s", peak_bit_rate * 100); + break; + default: + break; + } + } + curr_offset+=2; + + /* octet 5 Peak Bit Rate Granularity C/R T A Precedence */ + /* If the Gigabit Interface feature has not been negotiated, the "Peak bit rate" + * field is the binary encoding of the peak bit rate information expressed in 100 bits/s + * increments, starting from 0 x 100 bits/s until 65 535 x 100 bits/s (6 Mbps). + * + * If the Gigabit Interface feature has been negotiated, the "Peak bit rate" field is the + * binary encoding of the peak bit rate information expressed in increments as defined by + * the Peak Bit Rate Granularity field. + */ + proto_tree_add_item(tree, hf_bssgp_peak_rate_gran, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + proto_tree_add_item(tree, hf_bssgp_cr_bit, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + proto_tree_add_item(tree, hf_bssgp_t_bit, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + proto_tree_add_item(tree, hf_bssgp_a_bit, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + precedence = tvb_get_guint8(tvb, curr_offset) & 0x7; + pre_item = proto_tree_add_item(tree, hf_bssgp_precedence, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + if(link_dir == P2P_DIR_DL){ + proto_item_append_text(pre_item, " %s", val_to_str_const((guint32)precedence, bssgp_precedence_dl, "Radio Priority Unknown(Radio priority 3)")); + }else{ + proto_item_append_text(pre_item, " %s", val_to_str_const((guint32)precedence, bssgp_precedence_ul, "Priority Unknown(Low priority)")); + } + + curr_offset++; + + return(curr_offset-offset); +} +/* + * 11.3.29 Radio Cause + */ +static const value_string bssgp_radio_cause_vals[] = { { 0x00, "Radio contact lost with the MS" }, { 0x01, "Radio link quality insufficient to continue communication" }, { 0x02, "Cell reselection ordered" }, @@ -1161,136 +1168,136 @@ de_bssgp_qos_profile(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, gu { 0x04, "Cell reselection failure" }, { 0, NULL }, /* Otherwise "Reserved (Radio contact lost with the MS)" */ - }; +}; static guint16 de_bssgp_ra_cause(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - proto_tree_add_item(tree, hf_bssgp_ra_cause, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - curr_offset++; + proto_tree_add_item(tree, hf_bssgp_ra_cause, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + curr_offset++; - return(curr_offset-offset); + return(curr_offset-offset); } /* - * 11.3.30 RA-Cap-UPD-Cause + * 11.3.30 RA-Cap-UPD-Cause */ - static const value_string bssgp_ra_cap_upd_cause_vals[] = { +static const value_string bssgp_ra_cap_upd_cause_vals[] = { { 0x00, "OK, RA capability IE present" }, { 0x01, "TLLI unknown in SGSN" }, { 0x02, "No RA capabilities or IMSI available for this MS" }, { 0, NULL }, /* Otherwise "Reserved (TLLI unknown in SGSN)" */ - }; +}; static guint16 de_bssgp_ra_cap_upd_cause(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - proto_tree_add_item(tree, hf_bssgp_ra_cap_upd_cause, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - curr_offset++; + proto_tree_add_item(tree, hf_bssgp_ra_cap_upd_cause, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + curr_offset++; - return(curr_offset-offset); + return(curr_offset-offset); } /* - * 11.3.31 Routeing Area + * 11.3.31 Routeing Area */ /* Octets 3 to 8 contain the value part (starting with octet 2) of the * Routing Area Identification IE defined in 3GPP TS 24.008, not * including 3GPP TS 24.008 IEI */ /* - * 11.3.32 R_default_MS + * 11.3.32 R_default_MS */ static guint16 de_bssgp_r_default_ms(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - proto_tree_add_item(tree, hf_bssgp_r_default_ms, tvb, curr_offset, 2, ENC_BIG_ENDIAN); - curr_offset+=2; + proto_tree_add_item(tree, hf_bssgp_r_default_ms, tvb, curr_offset, 2, ENC_BIG_ENDIAN); + curr_offset+=2; - return(curr_offset-offset); + return(curr_offset-offset); } /* - * 11.3.33 Suspend Reference Number + * 11.3.33 Suspend Reference Number */ static guint16 de_bssgp_suspend_ref_no(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - /* Unstructured value */ - proto_tree_add_item(tree, hf_bssgp_suspend_ref_no, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + /* Unstructured value */ + proto_tree_add_item(tree, hf_bssgp_suspend_ref_no, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - curr_offset++; + curr_offset++; - return(curr_offset-offset); + return(curr_offset-offset); } /* - * 11.3.34 Tag + * 11.3.34 Tag */ static guint16 de_bssgp_tag(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - /* Unstructured value */ - proto_tree_add_item(tree, hf_bssgp_tag, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + /* Unstructured value */ + proto_tree_add_item(tree, hf_bssgp_tag, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - curr_offset++; + curr_offset++; - return(curr_offset-offset); + return(curr_offset-offset); } /* - * 11.3.35 Temporary logical link Identity (TLLI) + * 11.3.35 Temporary logical link Identity (TLLI) * Rest of element coded as the value part of the TLLI information * element in 3GPP TS 44.018, not including 3GPP TS 44.018 IEI. */ /* - * 11.3.36 Temporary Mobile Subscriber Identity (TMSI) + * 11.3.36 Temporary Mobile Subscriber Identity (TMSI) */ /* Rest of element coded as the value part of the TMSI/P-TMSI * information element in 3GPP TS 24.008, not including * 3GPP TS 24.008 IEI. */ /* - * 11.3.37 Trace Reference + * 11.3.37 Trace Reference */ static guint16 de_bssgp_trace_ref(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - /* octet 3-4 Trace Reference */ - proto_tree_add_item(tree, hf_bssgp_trace_ref, tvb, curr_offset, 2, ENC_BIG_ENDIAN); + /* octet 3-4 Trace Reference */ + proto_tree_add_item(tree, hf_bssgp_trace_ref, tvb, curr_offset, 2, ENC_BIG_ENDIAN); - curr_offset+=2; + curr_offset+=2; - return(curr_offset-offset); + return(curr_offset-offset); } /* - * 11.3.38 Trace Type + * 11.3.38 Trace Type */ /* This is coded as specified in Technical Specification * 3GPP TS 32.008 @@ -1299,77 +1306,77 @@ de_bssgp_trace_ref(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guin static guint16 de_bssgp_trace_type(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - proto_tree_add_text(tree, tvb, curr_offset, len, "Trace Type data ( Coding unknown (Specification withdrawn) 3GPP TS 32.008)"); + proto_tree_add_text(tree, tvb, curr_offset, len, "Trace Type data ( Coding unknown (Specification withdrawn) 3GPP TS 32.008)"); - return(len); + return(len); } /* - * 11.3.39 Transaction Id + * 11.3.39 Transaction Id */ static guint16 de_bssgp_transaction_id(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - proto_tree_add_item(tree, hf_bssgp_transaction_id, tvb, curr_offset, 2, ENC_BIG_ENDIAN); + proto_tree_add_item(tree, hf_bssgp_transaction_id, tvb, curr_offset, 2, ENC_BIG_ENDIAN); - return(curr_offset-offset); + return(curr_offset-offset); } /* - * 11.3.40 Trigger Id + * 11.3.40 Trigger Id */ static guint16 de_bssgp_trigger_id(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - proto_tree_add_item(tree, hf_bssgp_trigger_id, tvb, curr_offset, len, ENC_NA); + proto_tree_add_item(tree, hf_bssgp_trigger_id, tvb, curr_offset, len, ENC_NA); - return(len); + return(len); } /* - * 11.3.41 Number of octets affected + * 11.3.41 Number of octets affected */ static guint16 de_bssgp_no_of_oct_affected(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; - guint32 no_of_oct; + guint32 curr_offset; + guint32 no_of_oct; - curr_offset = offset; + curr_offset = offset; - /* octet 3-5 number of octets transferred or deleted */ - no_of_oct = tvb_get_ntoh24(tvb,curr_offset); - proto_tree_add_item(tree, hf_bssgp_no_of_oct, tvb, curr_offset, 3, ENC_BIG_ENDIAN); + /* octet 3-5 number of octets transferred or deleted */ + no_of_oct = tvb_get_ntoh24(tvb,curr_offset); + proto_tree_add_item(tree, hf_bssgp_no_of_oct, tvb, curr_offset, 3, ENC_BIG_ENDIAN); - curr_offset+=3; + curr_offset+=3; - if (add_string) - g_snprintf(add_string, string_len, " - %u", no_of_oct); + if (add_string) + g_snprintf(add_string, string_len, " - %u", no_of_oct); - return(curr_offset-offset); + return(curr_offset-offset); } /* - * 11.3.42 Packet Flow Identifier (PFI) + * 11.3.42 Packet Flow Identifier (PFI) */ /* Rest of element coded as the value part of the Packet Flow * Identifier information element in 3GPP TS 24.008, not including * 3GPP TS 24.008 IEI */ /* - * 11.3.42a (void) + * 11.3.42a (void) */ /* - * 11.3.43 Aggregate BSS QoS Profile + * 11.3.43 Aggregate BSS QoS Profile */ /* Rest of element coded as the value part of the QoS information * element in 3GPP TS 24.008, not including 3GPP TS 24.008 IEI and @@ -1378,7 +1385,7 @@ de_bssgp_no_of_oct_affected(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo * 10.5.6.5 */ /* - * 11.3.44 GPRS Timer + * 11.3.44 GPRS Timer */ static const value_string bssgp_unit_vals[] = { { 0, "incremented in multiples of 2 s" }, @@ -1386,236 +1393,236 @@ static const value_string bssgp_unit_vals[] = { { 2, "incremented in multiples of decihours" }, { 3, "incremented in multiples of 500 msec" }, { 4, "incremented in multiples of 1 minute(Undefined)" }, - { 5, "incremented in multiples of 1 minute(Undefined)" }, + { 5, "incremented in multiples of 1 minute(Undefined)" }, { 6, "incremented in multiples of 1 minute(Undefined)" }, { 7, "the timer does not expire" }, { 0, NULL}, /* Otherwise "incremented in multiples of 1 minute" */ - }; +}; static guint16 de_bssgp_gprs_timer(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - /*octet 3 Unit Value Timer value */ - proto_tree_add_item(tree, hf_bssgp_unit_val, tvb, curr_offset, 3, ENC_BIG_ENDIAN); - proto_tree_add_item(tree, hf_bssgp_gprs_timer, tvb, curr_offset, 3, ENC_BIG_ENDIAN); + /*octet 3 Unit Value Timer value */ + proto_tree_add_item(tree, hf_bssgp_unit_val, tvb, curr_offset, 3, ENC_BIG_ENDIAN); + proto_tree_add_item(tree, hf_bssgp_gprs_timer, tvb, curr_offset, 3, ENC_BIG_ENDIAN); - curr_offset++; + curr_offset++; - return(curr_offset-offset); + return(curr_offset-offset); } /* - * 11.3.45 Feature Bitmap + * 11.3.45 Feature Bitmap */ static guint16 de_bssgp_feature_bitmap(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; - /* MBMS */ - proto_tree_add_item(tree, hf_bssgp_mbms, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - /* EnhancedRadioStatus */ - proto_tree_add_item(tree, hf_bssgp_EnhancedRadioStatus, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - /* PFCFC */ - proto_tree_add_item(tree, hf_bssgp_pfcfc, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - /* RIM */ - proto_tree_add_item(tree, hf_bssgp_rim, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - /* LCS */ - proto_tree_add_item(tree, hf_bssgp_lcs, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - /* INR */ - proto_tree_add_item(tree, hf_bssgp_inr, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - /* CBL */ - proto_tree_add_item(tree, hf_bssgp_cbl, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - /* PFC */ - proto_tree_add_item(tree, hf_bssgp_pfc, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + curr_offset = offset; + /* MBMS */ + proto_tree_add_item(tree, hf_bssgp_mbms, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + /* EnhancedRadioStatus */ + proto_tree_add_item(tree, hf_bssgp_EnhancedRadioStatus, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + /* PFCFC */ + proto_tree_add_item(tree, hf_bssgp_pfcfc, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + /* RIM */ + proto_tree_add_item(tree, hf_bssgp_rim, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + /* LCS */ + proto_tree_add_item(tree, hf_bssgp_lcs, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + /* INR */ + proto_tree_add_item(tree, hf_bssgp_inr, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + /* CBL */ + proto_tree_add_item(tree, hf_bssgp_cbl, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + /* PFC */ + proto_tree_add_item(tree, hf_bssgp_pfc, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - curr_offset++; + curr_offset++; - return(curr_offset-offset); + return(curr_offset-offset); } /* - * 11.3.46 Bucket Full Ratio + * 11.3.46 Bucket Full Ratio */ static guint16 de_bssgp_bucket_full_ratio(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - /* Ratio of the bucket that is filled up with data */ - proto_tree_add_item(tree, hf_bssgp_bucket_full_ratio, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + /* Ratio of the bucket that is filled up with data */ + proto_tree_add_item(tree, hf_bssgp_bucket_full_ratio, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - curr_offset++; + curr_offset++; - return(curr_offset-offset); + return(curr_offset-offset); } /* - * 11.3.47 Service UTRAN CCO + * 11.3.47 Service UTRAN CCO */ static const value_string bssgp_service_utran_cco_vals[] = { { 0, "Network initiated cell change order procedure to UTRAN should be performed" }, { 1, "Network initiated cell change order procedure to UTRAN should not be performed" }, { 2, "Network initiated cell change order procedure to UTRAN shall not be performed" }, - { 3, "If received, shall be interpreted as no information available (bits 4-5 valid)" }, - { 0, NULL }, + { 3, "If received, shall be interpreted as no information available (bits 4-5 valid)" }, + { 0, NULL }, /* Otherwise "No information available" */ - }; +}; static const value_string bssgp_service_eutran_cco_vals[] = { { 0, "If received, shall be interpreted as no information available" }, { 1, "Network initiated cell change order to E-UTRAN or PS handover to E-UTRAN procedure should be performed" }, { 2, "Network initiated cell change order to E-UTRAN or PS handover to E-UTRAN procedure should not be performed" }, - { 3, "Network initiated cell change order to E-UTRAN or PS handover to E-UTRAN procedure shall not be performed" }, - { 0, NULL }, + { 3, "Network initiated cell change order to E-UTRAN or PS handover to E-UTRAN procedure shall not be performed" }, + { 0, NULL }, /* Otherwise "No information available" */ - }; +}; static guint16 de_bssgp_serv_utran_cco(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - /* Service EUTRAN CCO Value part */ - proto_tree_add_item(tree, hf_bssgp_serv_eutran_cco, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - /* Service UTRAN CCO Value part */ - proto_tree_add_item(tree, hf_bssgp_serv_utran_cco, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - curr_offset++; + /* Service EUTRAN CCO Value part */ + proto_tree_add_item(tree, hf_bssgp_serv_eutran_cco, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + /* Service UTRAN CCO Value part */ + proto_tree_add_item(tree, hf_bssgp_serv_utran_cco, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + curr_offset++; - return(curr_offset-offset); + return(curr_offset-offset); } /* - * 11.3.48 NSEI (Network Service Entity Identifier) + * 11.3.48 NSEI (Network Service Entity Identifier) */ static guint16 de_bssgp_nsei(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; - guint16 nsei; + guint32 curr_offset; + guint16 nsei; - curr_offset = offset; + curr_offset = offset; - nsei = tvb_get_ntohs(tvb, curr_offset); - proto_tree_add_item(tree, hf_bssgp_nsei, tvb, curr_offset, 2, ENC_BIG_ENDIAN); - curr_offset+=2; + nsei = tvb_get_ntohs(tvb, curr_offset); + proto_tree_add_item(tree, hf_bssgp_nsei, tvb, curr_offset, 2, ENC_BIG_ENDIAN); + curr_offset+=2; - col_append_sep_fstr(gpinfo->cinfo, COL_INFO, BSSGP_SEP, "NSEI %u", nsei); + col_append_sep_fstr(gpinfo->cinfo, COL_INFO, BSSGP_SEP, "NSEI %u", nsei); - return(curr_offset-offset); + return(curr_offset-offset); } /* - * 11.3.49 RRLP APDU + * 11.3.49 RRLP APDU */ static guint16 de_bssgp_rrlp_apdu(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - tvbuff_t *next_tvb=NULL; - guint32 curr_offset; + tvbuff_t *next_tvb=NULL; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - /* The rest of the information element contains an embedded RRLP - * message whose content and encoding are defined according to the - * 3GPP TS 44.031. The RRLP protocol is not octet aligned. - * Therefore, the unused bits in the last octet are padded with zeroes - */ + /* The rest of the information element contains an embedded RRLP + * message whose content and encoding are defined according to the + * 3GPP TS 44.031. The RRLP protocol is not octet aligned. + * Therefore, the unused bits in the last octet are padded with zeroes + */ - if(len > 0){ - next_tvb = tvb_new_subset_remaining(tvb, curr_offset); - proto_tree_add_text(tree, tvb, curr_offset, len, "RRLP APDU"); - } + if(len > 0){ + next_tvb = tvb_new_subset_remaining(tvb, curr_offset); + proto_tree_add_text(tree, tvb, curr_offset, len, "RRLP APDU"); + } - if(next_tvb){ - if (rrlp_handle) { - call_dissector(rrlp_handle, next_tvb, gpinfo, gparent_tree); - }else if (data_handle) { - call_dissector(data_handle, next_tvb, gpinfo, gparent_tree); - } + if(next_tvb){ + if (rrlp_handle) { + call_dissector(rrlp_handle, next_tvb, gpinfo, gparent_tree); + }else if (data_handle) { + call_dissector(data_handle, next_tvb, gpinfo, gparent_tree); + } } - return(len); + return(len); } /* - * 11.3.50 LCS QoS + * 11.3.50 LCS QoS */ /* Rest of element coded as the value part defined in * 3GPP TS 48.008, not including 3GPP TS 48.008 IEI and * 3GPP TS 48.008 octet length indicator */ /* - * 11.3.51 LCS Client Type + * 11.3.51 LCS Client Type */ /* Rest of element coded as the value part defined in * 3GPP TS 49.031, not including 3GPP TS 49.031 IEI and * 3GPP TS 49.031 octet length indicator */ /* - * 11.3.52 Requested GPS Assistance Data + * 11.3.52 Requested GPS Assistance Data */ /* Rest of element coded as the value part defined in * 3GPP TS 49.031, not including 3GPP TS 49.031 IEI and * 3GPP TS 49.031 octet length indicator */ /* - * 11.3.53 Location Type + * 11.3.53 Location Type */ /* Rest of element coded as the value part defined in * 3GPP TS 49.031, not including 3GPP TS 49.031 IEI and * 3GPP TS 49.031 octet length indicator */ /* - * 11.3.54 Location Estimate + * 11.3.54 Location Estimate */ /* Rest of element coded as the value part defined in * 3GPP TS 48.008, not including 3GPP TS 48.008 IEI and * 3GPP TS 48.008 octet length indicator */ /* - * 11.3.55 Positioning Data + * 11.3.55 Positioning Data */ /* Rest of element coded as the value part defined in * 3GPP TS 49.031, not including 3GPP TS 49.031 IEI and * 3GPP TS 49.031 octet length indicator */ /* - * 11.3.56 Deciphering Keys + * 11.3.56 Deciphering Keys */ /* Rest of element coded as the value part defined in * 3GPP TS 49.031, not including 3GPP TS 49.031 IEI and * 3GPP TS 49.031 octet length indicator */ /* - * 11.3.57 LCS Priority + * 11.3.57 LCS Priority */ /* Rest of element coded as the value part defined in * 3GPP TS 49.031, not including 3GPP TS 49.031 IEI and * 3GPP TS 49.031 octet length indicator */ /* - * 11.3.58 LCS Cause + * 11.3.58 LCS Cause */ /* Rest of element coded as the value part defined in * 3GPP TS 49.031, not including 3GPP TS 49.031 IEI and * 3GPP TS 49.031 octet length indicator */ /* - * 11.3.59 LCS Capability + * 11.3.59 LCS Capability */ /* Rest of element coded as the value part of the PS LCS Capability * IE defined in 3GPP TS 24.008, not including 3GPP TS 24.008 IEI * and length indicator */ /* - * 11.3.60 RRLP Flags + * 11.3.60 RRLP Flags */ static const true_false_string bssgp_rrlp_flg1_vals = { @@ -1626,77 +1633,77 @@ static const true_false_string bssgp_rrlp_flg1_vals = { static guint16 de_bssgp_rrlp_flags(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - /* Flag 1 (Octet 3, bit 1): */ - proto_tree_add_item(tree, hf_bssgp_rrlp_flag1, tvb, curr_offset, 2, ENC_BIG_ENDIAN); + /* Flag 1 (Octet 3, bit 1): */ + proto_tree_add_item(tree, hf_bssgp_rrlp_flag1, tvb, curr_offset, 2, ENC_BIG_ENDIAN); - return(curr_offset-offset); + return(curr_offset-offset); } /* - * 11.3.61 RIM Application Identity + * 11.3.61 RIM Application Identity */ static const value_string bssgp_rim_appid_vals[] = { { 0, "Reserved" }, { 1, "Network Assisted Cell Change (NACC)" }, { 2, "System Information 3 (SI3)" }, - { 3, "MBMS data channel" }, - { 4, "SON Transfer" }, - { 5, "UTRA System Information (UTRA SI)" }, - { 0, NULL }, - }; + { 3, "MBMS data channel" }, + { 4, "SON Transfer" }, + { 5, "UTRA System Information (UTRA SI)" }, + { 0, NULL }, +}; static guint16 de_bssgp_rim_app_id(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - /* RIM Application Identity */ - g_rim_application_identity = tvb_get_guint8(tvb, curr_offset); - proto_tree_add_item(tree, hf_bssgp_rim_app_id, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - curr_offset++; + /* RIM Application Identity */ + g_rim_application_identity = tvb_get_guint8(tvb, curr_offset); + proto_tree_add_item(tree, hf_bssgp_rim_app_id, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + curr_offset++; - return(curr_offset-offset); + return(curr_offset-offset); } /* - * 11.3.62 RIM Sequence Number + * 11.3.62 RIM Sequence Number */ static guint16 de_bssgp_rim_seq_no(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - /* RIM Sequence Number */ - proto_tree_add_item(tree, hf_bssgp_rim_seq_no, tvb, curr_offset, 4, ENC_BIG_ENDIAN); - curr_offset+=4; + /* RIM Sequence Number */ + proto_tree_add_item(tree, hf_bssgp_rim_seq_no, tvb, curr_offset, 4, ENC_BIG_ENDIAN); + curr_offset+=4; - return(curr_offset-offset); + return(curr_offset-offset); } /* - * 11.3.62a RIM Container - * 11.3.62a.0 General - * 11.3.62a.1 RAN-INFORMATION-REQUEST RIM Container + * 11.3.62a RIM Container + * 11.3.62a.0 General + * 11.3.62a.1 RAN-INFORMATION-REQUEST RIM Container */ /* Dissection moved */ /* - * 11.3.62a.2 RAN-INFORMATION RIM Container - * 11.3.62a.3 RAN-INFORMATION-ACK RIM Container - * 11.3.62a.4 RAN-INFORMATION-ERROR RIM Container - * 11.3.62a.5 RAN-INFORMATION-APPLICATION-ERROR RIM Container + * 11.3.62a.2 RAN-INFORMATION RIM Container + * 11.3.62a.3 RAN-INFORMATION-ACK RIM Container + * 11.3.62a.4 RAN-INFORMATION-ERROR RIM Container + * 11.3.62a.5 RAN-INFORMATION-APPLICATION-ERROR RIM Container */ /* - * 11.3.63 Application Container - * 11.3.63.1 RAN-INFORMATION-REQUEST Application Container - * 11.3.63.1.0 General + * 11.3.63 Application Container + * 11.3.63.1 RAN-INFORMATION-REQUEST Application Container + * 11.3.63.1.0 General */ @@ -1704,63 +1711,63 @@ de_bssgp_rim_seq_no(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, gui static guint16 de_bssgp_ran_information_request_app_cont(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - tvbuff_t *new_tvb = NULL; - guint32 curr_offset; - - curr_offset = offset; - - switch(g_rim_application_identity){ - case 1: - /* 11.3.63.1.1 RAN-INFORMATION-REQUEST Application Container for the NACC Application */ - /* Reporting Cell Identifier */ - curr_offset = curr_offset + de_bssgp_cell_id(tvb, tree, pinfo,curr_offset, len, add_string, string_len); - break; - case 2: - /* 11.3.63.1.2 RAN-INFORMATION-REQUEST Application Container for the SI3 Application */ - /* Reporting Cell Identifier */ - curr_offset = curr_offset + de_bssgp_cell_id(tvb, tree, pinfo, curr_offset, len, add_string, string_len); - break; - case 3: - /* 11.3.63.1.3 RAN-INFORMATION-REQUEST Application Container for the MBMS data channel Application */ - /* Reporting Cell Identifier */ - curr_offset = curr_offset + de_bssgp_cell_id(tvb, tree, pinfo, curr_offset, len, add_string, string_len); - break; - case 4: - { - asn1_ctx_t asn1_ctx; - - asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, gpinfo); - /* 11.3.63.1.4 RAN-INFORMATION-REQUEST Application Container for the SON Transfer Application */ - /* Reporting Cell Identifier */ - /* convert to bit offset */ - curr_offset = curr_offset<<3; - curr_offset = dissect_s1ap_Global_ENB_ID(tvb, curr_offset<<3, &asn1_ctx, tree, hf_bssgp_Global_ENB_ID_PDU); - curr_offset = dissect_s1ap_SONtransferRequestContainer(tvb, curr_offset, &asn1_ctx, tree, hf_bssgp_SONtransferRequestContainer_PDU); - curr_offset += 7; curr_offset >>= 3; - } - break; - case 5: - /* 11.3.63.1.5 RAN-INFORMATION Application Container for the UTRA SI Application */ - /* Octet 3-m Reporting Cell Identifier - * This field is encoded as the Source Cell Identifier IE (UTRAN Source Cell ID) as defined in - * 3GPP TS 25.413 - */ - new_tvb = tvb_new_subset_remaining(tvb, curr_offset); - curr_offset = curr_offset + dissect_ranap_SourceCellID_PDU(new_tvb, gpinfo, tree); - break; - default : - proto_tree_add_text(tree, tvb, curr_offset, len, "Unknown RIM Application Identity"); - curr_offset+=len; - break; - } - - - return(curr_offset-offset); -} - -/* - * 11.3.63.2 RAN-INFORMATION Application Container Unit - * 11.3.63.2.0 General + tvbuff_t *new_tvb = NULL; + guint32 curr_offset; + + curr_offset = offset; + + switch(g_rim_application_identity){ + case 1: + /* 11.3.63.1.1 RAN-INFORMATION-REQUEST Application Container for the NACC Application */ + /* Reporting Cell Identifier */ + curr_offset = curr_offset + de_bssgp_cell_id(tvb, tree, pinfo,curr_offset, len, add_string, string_len); + break; + case 2: + /* 11.3.63.1.2 RAN-INFORMATION-REQUEST Application Container for the SI3 Application */ + /* Reporting Cell Identifier */ + curr_offset = curr_offset + de_bssgp_cell_id(tvb, tree, pinfo, curr_offset, len, add_string, string_len); + break; + case 3: + /* 11.3.63.1.3 RAN-INFORMATION-REQUEST Application Container for the MBMS data channel Application */ + /* Reporting Cell Identifier */ + curr_offset = curr_offset + de_bssgp_cell_id(tvb, tree, pinfo, curr_offset, len, add_string, string_len); + break; + case 4: + { + asn1_ctx_t asn1_ctx; + + asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, gpinfo); + /* 11.3.63.1.4 RAN-INFORMATION-REQUEST Application Container for the SON Transfer Application */ + /* Reporting Cell Identifier */ + /* convert to bit offset */ + curr_offset = curr_offset<<3; + curr_offset = dissect_s1ap_Global_ENB_ID(tvb, curr_offset<<3, &asn1_ctx, tree, hf_bssgp_Global_ENB_ID_PDU); + curr_offset = dissect_s1ap_SONtransferRequestContainer(tvb, curr_offset, &asn1_ctx, tree, hf_bssgp_SONtransferRequestContainer_PDU); + curr_offset += 7; curr_offset >>= 3; + } + break; + case 5: + /* 11.3.63.1.5 RAN-INFORMATION Application Container for the UTRA SI Application */ + /* Octet 3-m Reporting Cell Identifier + * This field is encoded as the Source Cell Identifier IE (UTRAN Source Cell ID) as defined in + * 3GPP TS 25.413 + */ + new_tvb = tvb_new_subset_remaining(tvb, curr_offset); + curr_offset = curr_offset + dissect_ranap_SourceCellID_PDU(new_tvb, gpinfo, tree); + break; + default : + proto_tree_add_text(tree, tvb, curr_offset, len, "Unknown RIM Application Identity"); + curr_offset+=len; + break; + } + + + return(curr_offset-offset); +} + +/* + * 11.3.63.2 RAN-INFORMATION Application Container Unit + * 11.3.63.2.0 General */ static const true_false_string bssgp_si_psi_type_vals = { "PSI messages as specified for PBCCH (3GPP TS 44.060) follow", @@ -1771,151 +1778,151 @@ static const value_string bssgp_rat_discriminator_vals[] = { { 0, "The reporting RAT is GERAN" }, { 1, "The reporting RAT is UTRAN" }, { 2, "The reporting RAT is E-UTRAN" }, - { 0, NULL }, - }; + { 0, NULL }, +}; static guint16 de_bssgp_ran_information_app_cont_unit(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - tvbuff_t *new_tvb = NULL; - guint32 curr_offset; - guint8 type, num_items, rat_type, oct; - int i; - - curr_offset = offset; - - switch(g_rim_application_identity){ - case 1: - /* 11.3.63.2.1 RAN-INFORMATION Application Container for the NACC Application */ - /* Reporting Cell Identifier */ - curr_offset = curr_offset + de_bssgp_cell_id(tvb, tree, pinfo, curr_offset, len, add_string, string_len); - /* Number of SI/PSI */ - num_items = tvb_get_guint8(tvb,curr_offset)>>1; - proto_tree_add_item(tree, hf_bssgp_num_si_psi, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - /* Type */ - type = tvb_get_guint8(tvb,curr_offset)&0x01; - proto_tree_add_item(tree, hf_bssgp_si_psi_type, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - curr_offset++; - /* Octet 12-n SI/PSI */ - if(type==1){ - /* If the Type field indicates that "PSI messages as specified for PBCCH (3GPP TS 44.060) follow" then the SI/PSI - * field contains Packet System Information message instances encoded for PBCCH as specified in - * 3GPP TS 44.060. Each Packet System Information message contains the MESSAGE_TYPE field followed by the - * PSI message content. Each message is 22 octets long. - */ - for (i=0; i < num_items; i++){ - proto_tree_add_text(tree, tvb, curr_offset, 22, "PSI item %u - not dissected yet",i+1); - curr_offset+=22; - } - }else{ - /* If the Type field indicates that "SI messages as specified for BCCH (3GPP TS 44.018) follow" then the SI/PSI - * field contains System Information message instances encoded for BCCH as specified in 3GPP TS 44.018. Each - * System Information message contains the Message type octet followed by all the IEs composing the message - * payload. Each message is 21 octets long. - */ - void (*msg_fcn_p)(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len); - gint ett_tree; - int hf_idx; - const gchar *msg_str; - proto_item *si_item; - proto_tree *si_tree; - - for (i=0; i < num_items; i++){ - oct = tvb_get_guint8(tvb,curr_offset); - get_rr_msg_params(oct, &msg_str, &ett_tree, &hf_idx, &msg_fcn_p); - proto_tree_add_text(tree, tvb, curr_offset, 21, "SI item %u ",i+1); - si_item = proto_tree_add_item(tree, hf_idx, tvb, curr_offset, 1, FALSE); - si_tree = proto_item_add_subtree(si_item, ett_tree); - if (msg_fcn_p == NULL){ - proto_tree_add_text(si_tree, tvb, curr_offset, 21, "Unknown SI message"); - }else{ - (*msg_fcn_p)(tvb, si_tree, gpinfo, curr_offset+1, 20); - } - curr_offset+=21; - } - } - break; - case 2: - /* 11.3.63.2.2 RAN-INFORMATION Application Container for the SI3 Application */ - /* Octet 3-10 Reporting Cell Identifier */ - /* Reporting Cell Identifier: The parameter is encoded as the value part of the Cell Identifier IE - * defined in sub-clause 11.3.9, not including IEI and Length Indicator. - */ - curr_offset = curr_offset + de_bssgp_cell_id(tvb, tree, pinfo, curr_offset, len, add_string, string_len); - /* Octet 11-31 SI3 */ - /* SI3: contains the SYSTEM INFORMATION type 3 message encoded for BCCH as specified in 3GPP TS 44.018 ch 9.1.35 - * It contains the Message type octet followed by all the IEs composing the message payload. - * The message is 21 octets long. - * dtap_rr_sys_info_3(tvb, tree, curr_offset, len-7) - */ - proto_tree_add_text(tree, tvb, curr_offset, 1, "SYSTEM INFORMATION type 3 message"); - curr_offset++; - break; - case 3: - /* 11.3.63.2.3 RAN-INFORMATION Application Container for the MBMS data channel Application */ - /* Octet 3-10 Reporting Cell Identifier */ - curr_offset = curr_offset + de_bssgp_cell_id(tvb, tree, pinfo, curr_offset, len, add_string, string_len); - /* Octet 11-n MBMS data channel report */ - proto_tree_add_text(tree, tvb, curr_offset, len-6, "MBMS data channel report - not dissected yet"); - break; - case 4: - /* 11.3.63.2.4 RAN-INFORMATION Application Container for the SON Transfer Application */ - /* Octet 3 Spare RAT discriminator */ - rat_type = tvb_get_guint8(tvb,curr_offset) & 0x0f; - proto_tree_add_item(tree, hf_bssgp_rat_discriminator, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - curr_offset++; - /* Octet 4-m Reporting Cell Identifier */ - switch(rat_type){ - case 0: - /* If the RAT discriminator field indicates GERAN, this field is encoded as the value part of the Cell Identifier IE - * defined in sub-clause 11.3.9, not including IEI and Length Indicator. - */ - curr_offset = curr_offset + de_bssgp_cell_id(tvb, tree, pinfo, curr_offset, len, add_string, string_len); - break; - case 1: - /* If the RAT discriminator field indicates UTRAN, this field is encoded as the Source Cell Identifier IE (UTRAN - * Source Cell ID) as defined in 3GPP TS 25.413 - */ - new_tvb = tvb_new_subset_remaining(tvb, curr_offset); - curr_offset = curr_offset + dissect_ranap_SourceCellID_PDU(new_tvb, gpinfo, tree); - break; - case 2: - /* If the RAT discriminator field indicates E-UTRAN, this field is encoded as the E-UTRAN CGI IE as - * defined in 3GPP TS 36.413 - */ - new_tvb = tvb_new_subset_remaining(tvb, curr_offset); - curr_offset = curr_offset + dissect_s1ap_Global_ENB_ID_PDU(new_tvb, gpinfo, tree); - break; - default: - break; - } - - break; - case 5: - /* 11.3.63.2.5 RAN-INFORMATION Application Container for the UTRA SI Application */ - /* Octet 3-m Reporting Cell Identifier - * Reporting Cell Identifier: This field is encoded as the Source Cell Identifier IE - * (UTRAN Source Cell ID) as defined in 3GPP TS 25.413 - */ - new_tvb = tvb_new_subset_remaining(tvb, curr_offset); - curr_offset = curr_offset + dissect_ranap_SourceCellID_PDU(new_tvb, gpinfo, tree); - /* Octet (m+1)-n UTRA SI Container - * UTRA SI Container: This field contains System Information Container valid for the reporting cell - * encoded as defined in TS 25.331 - */ - proto_tree_add_text(tree, tvb, curr_offset, len-(curr_offset-offset), "UTRA SI Container - not dissected yet"); - break; - - default : - proto_tree_add_text(tree, tvb, curr_offset, len, "Unknown RIM Application Identitys Data"); - curr_offset+=len; - break; - } - - - return(curr_offset-offset); -} -/* - * 11.3.64 Application Error Container + tvbuff_t *new_tvb = NULL; + guint32 curr_offset; + guint8 type, num_items, rat_type, oct; + int i; + + curr_offset = offset; + + switch(g_rim_application_identity){ + case 1: + /* 11.3.63.2.1 RAN-INFORMATION Application Container for the NACC Application */ + /* Reporting Cell Identifier */ + curr_offset = curr_offset + de_bssgp_cell_id(tvb, tree, pinfo, curr_offset, len, add_string, string_len); + /* Number of SI/PSI */ + num_items = tvb_get_guint8(tvb,curr_offset)>>1; + proto_tree_add_item(tree, hf_bssgp_num_si_psi, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + /* Type */ + type = tvb_get_guint8(tvb,curr_offset)&0x01; + proto_tree_add_item(tree, hf_bssgp_si_psi_type, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + curr_offset++; + /* Octet 12-n SI/PSI */ + if(type==1){ + /* If the Type field indicates that "PSI messages as specified for PBCCH (3GPP TS 44.060) follow" then the SI/PSI + * field contains Packet System Information message instances encoded for PBCCH as specified in + * 3GPP TS 44.060. Each Packet System Information message contains the MESSAGE_TYPE field followed by the + * PSI message content. Each message is 22 octets long. + */ + for (i=0; i < num_items; i++){ + proto_tree_add_text(tree, tvb, curr_offset, 22, "PSI item %u - not dissected yet",i+1); + curr_offset+=22; + } + }else{ + /* If the Type field indicates that "SI messages as specified for BCCH (3GPP TS 44.018) follow" then the SI/PSI + * field contains System Information message instances encoded for BCCH as specified in 3GPP TS 44.018. Each + * System Information message contains the Message type octet followed by all the IEs composing the message + * payload. Each message is 21 octets long. + */ + void (*msg_fcn_p)(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len); + gint ett_tree; + int hf_idx; + const gchar *msg_str; + proto_item *si_item; + proto_tree *si_tree; + + for (i=0; i < num_items; i++){ + oct = tvb_get_guint8(tvb,curr_offset); + get_rr_msg_params(oct, &msg_str, &ett_tree, &hf_idx, &msg_fcn_p); + proto_tree_add_text(tree, tvb, curr_offset, 21, "SI item %u ",i+1); + si_item = proto_tree_add_item(tree, hf_idx, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + si_tree = proto_item_add_subtree(si_item, ett_tree); + if (msg_fcn_p == NULL){ + proto_tree_add_text(si_tree, tvb, curr_offset, 21, "Unknown SI message"); + }else{ + (*msg_fcn_p)(tvb, si_tree, gpinfo, curr_offset+1, 20); + } + curr_offset+=21; + } + } + break; + case 2: + /* 11.3.63.2.2 RAN-INFORMATION Application Container for the SI3 Application */ + /* Octet 3-10 Reporting Cell Identifier */ + /* Reporting Cell Identifier: The parameter is encoded as the value part of the Cell Identifier IE + * defined in sub-clause 11.3.9, not including IEI and Length Indicator. + */ + curr_offset = curr_offset + de_bssgp_cell_id(tvb, tree, pinfo, curr_offset, len, add_string, string_len); + /* Octet 11-31 SI3 */ + /* SI3: contains the SYSTEM INFORMATION type 3 message encoded for BCCH as specified in 3GPP TS 44.018 ch 9.1.35 + * It contains the Message type octet followed by all the IEs composing the message payload. + * The message is 21 octets long. + * dtap_rr_sys_info_3(tvb, tree, curr_offset, len-7) + */ + proto_tree_add_text(tree, tvb, curr_offset, 1, "SYSTEM INFORMATION type 3 message"); + curr_offset++; + break; + case 3: + /* 11.3.63.2.3 RAN-INFORMATION Application Container for the MBMS data channel Application */ + /* Octet 3-10 Reporting Cell Identifier */ + curr_offset = curr_offset + de_bssgp_cell_id(tvb, tree, pinfo, curr_offset, len, add_string, string_len); + /* Octet 11-n MBMS data channel report */ + proto_tree_add_text(tree, tvb, curr_offset, len-6, "MBMS data channel report - not dissected yet"); + break; + case 4: + /* 11.3.63.2.4 RAN-INFORMATION Application Container for the SON Transfer Application */ + /* Octet 3 Spare RAT discriminator */ + rat_type = tvb_get_guint8(tvb,curr_offset) & 0x0f; + proto_tree_add_item(tree, hf_bssgp_rat_discriminator, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + curr_offset++; + /* Octet 4-m Reporting Cell Identifier */ + switch(rat_type){ + case 0: + /* If the RAT discriminator field indicates GERAN, this field is encoded as the value part of the Cell Identifier IE + * defined in sub-clause 11.3.9, not including IEI and Length Indicator. + */ + curr_offset = curr_offset + de_bssgp_cell_id(tvb, tree, pinfo, curr_offset, len, add_string, string_len); + break; + case 1: + /* If the RAT discriminator field indicates UTRAN, this field is encoded as the Source Cell Identifier IE (UTRAN + * Source Cell ID) as defined in 3GPP TS 25.413 + */ + new_tvb = tvb_new_subset_remaining(tvb, curr_offset); + curr_offset = curr_offset + dissect_ranap_SourceCellID_PDU(new_tvb, gpinfo, tree); + break; + case 2: + /* If the RAT discriminator field indicates E-UTRAN, this field is encoded as the E-UTRAN CGI IE as + * defined in 3GPP TS 36.413 + */ + new_tvb = tvb_new_subset_remaining(tvb, curr_offset); + curr_offset = curr_offset + dissect_s1ap_Global_ENB_ID_PDU(new_tvb, gpinfo, tree); + break; + default: + break; + } + + break; + case 5: + /* 11.3.63.2.5 RAN-INFORMATION Application Container for the UTRA SI Application */ + /* Octet 3-m Reporting Cell Identifier + * Reporting Cell Identifier: This field is encoded as the Source Cell Identifier IE + * (UTRAN Source Cell ID) as defined in 3GPP TS 25.413 + */ + new_tvb = tvb_new_subset_remaining(tvb, curr_offset); + curr_offset = curr_offset + dissect_ranap_SourceCellID_PDU(new_tvb, gpinfo, tree); + /* Octet (m+1)-n UTRA SI Container + * UTRA SI Container: This field contains System Information Container valid for the reporting cell + * encoded as defined in TS 25.331 + */ + proto_tree_add_text(tree, tvb, curr_offset, len-(curr_offset-offset), "UTRA SI Container - not dissected yet"); + break; + + default : + proto_tree_add_text(tree, tvb, curr_offset, len, "Unknown RIM Application Identitys Data"); + curr_offset+=len; + break; + } + + + return(curr_offset-offset); +} +/* + * 11.3.64 Application Error Container */ static const value_string bssgp_nacc_cause_vals[] = { { 0, "Other unspecified error" }, @@ -1924,8 +1931,8 @@ static const value_string bssgp_nacc_cause_vals[] = { { 3, "SI/PSI type error" }, { 4, "Inconsistent length of a SI/PSI message" }, { 5, "Inconsistent set of messages" }, - { 0, NULL }, - }; + { 0, NULL }, +}; static const value_string bssgp_s13_cause_vals[] = { { 0, "Other unspecified error" }, @@ -1933,8 +1940,8 @@ static const value_string bssgp_s13_cause_vals[] = { { 2, "Reporting Cell Identifier does not match with the Destination Cell Identifier or with the Source Cell Identifier" }, { 3, "Inconsistent length of a SI3 message" }, { 4, "Inconsistent set of messages" }, - { 0, NULL }, - }; + { 0, NULL }, +}; static const value_string bssgp_mbms_data_ch_cause_vals[] = { { 0, "Other unspecified error" }, @@ -1942,105 +1949,105 @@ static const value_string bssgp_mbms_data_ch_cause_vals[] = { { 2, "Reporting Cell Identifier does not match with the Destination Cell Identifier or with the Source Cell Identifier" }, { 3, "RAN-INFORMATION/Initial Multiple Report or RANINFORMATION/Single Report PDU exceeds the maximum supported length" }, { 4, "Inconsistent MBMS data channel description" }, - { 0, NULL }, - }; + { 0, NULL }, +}; static const value_string bssgp_utra_si_cause_vals[] = { { 0, "Other unspecified error" }, { 1, "Syntax error in the Application Container" }, { 2, "Inconsistent Reporting Cell Identifier" }, - { 0, NULL }, - }; + { 0, NULL }, +}; static guint16 de_bssgp_ran_app_error_cont(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - tvbuff_t *new_tvb = NULL; - guint32 curr_offset; - - curr_offset = offset; - - switch(g_rim_application_identity){ - case 1: - /* - * 11.3.64.1 Application Error Container layout for the NACC application - */ - /* Octet 3 NACC Cause */ - proto_tree_add_item(tree, hf_bssgp_nacc_cause, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - curr_offset++; - /* Erroneous Application Container including IEI and LI */ - proto_tree_add_text(tree, tvb, curr_offset, len-(curr_offset-offset), "Erroneous Application Container including IEI and LI"); - break; - case 2: - /* - * 11.3.64.2 Application Error Container for the SI3 application - */ - /* Octet 3 SI3 Cause */ - proto_tree_add_item(tree, hf_bssgp_s13_cause, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - curr_offset++; - /* Erroneous Application Container including IEI and LI */ - proto_tree_add_text(tree, tvb, curr_offset, len-(curr_offset-offset), "Erroneous Application Container including IEI and LI"); - break; - case 3: - /* - * 11.3.64.3 Application Error Container for the MBMS data channel application - */ - /* Octet 3 MBMS data channel Cause */ - proto_tree_add_item(tree, hf_bssgp_mbms_data_ch_cause, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - curr_offset++; - /* Erroneous Application Container including IEI and LI */ - proto_tree_add_text(tree, tvb, curr_offset, len-(curr_offset-offset), "Erroneous Application Container including IEI and LI"); - break; - case 4: - /* - * 11.3.64.4 Application Error Container for the SON Transfer Application - */ - /* SON Transfer Cause: This field indicates the cause why the Application Error Container IE is sent. - * The "SON Transfer Cause" field is encoded as the SON Transfer Cause IE as defined in 3GPP TS 36.413 - */ - new_tvb = tvb_new_subset_remaining(tvb, curr_offset); - curr_offset = curr_offset + dissect_s1ap_SONtransferCause_PDU(new_tvb, gpinfo, tree); - /* Erroneous Application Container including IEI and LI */ - proto_tree_add_text(tree, tvb, curr_offset, len-(curr_offset-offset), "Erroneous Application Container including IEI and LI"); - break; - case 5: - /* 11.3.64.5 Application Error Container for the UTRA SI Application*/ - /* Octet 3 UTRA SI Cause */ - proto_tree_add_item(tree, hf_bssgp_utra_si_cause, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - break; - default : - proto_tree_add_text(tree, tvb, curr_offset, len, "Unknown Application Error Container"); - curr_offset+=len; - break; - } - return(len); -} - -/* - * 11.3.65 RIM PDU Indications + tvbuff_t *new_tvb = NULL; + guint32 curr_offset; + + curr_offset = offset; + + switch(g_rim_application_identity){ + case 1: + /* + * 11.3.64.1 Application Error Container layout for the NACC application + */ + /* Octet 3 NACC Cause */ + proto_tree_add_item(tree, hf_bssgp_nacc_cause, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + curr_offset++; + /* Erroneous Application Container including IEI and LI */ + proto_tree_add_text(tree, tvb, curr_offset, len-(curr_offset-offset), "Erroneous Application Container including IEI and LI"); + break; + case 2: + /* + * 11.3.64.2 Application Error Container for the SI3 application + */ + /* Octet 3 SI3 Cause */ + proto_tree_add_item(tree, hf_bssgp_s13_cause, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + curr_offset++; + /* Erroneous Application Container including IEI and LI */ + proto_tree_add_text(tree, tvb, curr_offset, len-(curr_offset-offset), "Erroneous Application Container including IEI and LI"); + break; + case 3: + /* + * 11.3.64.3 Application Error Container for the MBMS data channel application + */ + /* Octet 3 MBMS data channel Cause */ + proto_tree_add_item(tree, hf_bssgp_mbms_data_ch_cause, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + curr_offset++; + /* Erroneous Application Container including IEI and LI */ + proto_tree_add_text(tree, tvb, curr_offset, len-(curr_offset-offset), "Erroneous Application Container including IEI and LI"); + break; + case 4: + /* + * 11.3.64.4 Application Error Container for the SON Transfer Application + */ + /* SON Transfer Cause: This field indicates the cause why the Application Error Container IE is sent. + * The "SON Transfer Cause" field is encoded as the SON Transfer Cause IE as defined in 3GPP TS 36.413 + */ + new_tvb = tvb_new_subset_remaining(tvb, curr_offset); + curr_offset = curr_offset + dissect_s1ap_SONtransferCause_PDU(new_tvb, gpinfo, tree); + /* Erroneous Application Container including IEI and LI */ + proto_tree_add_text(tree, tvb, curr_offset, len-(curr_offset-offset), "Erroneous Application Container including IEI and LI"); + break; + case 5: + /* 11.3.64.5 Application Error Container for the UTRA SI Application*/ + /* Octet 3 UTRA SI Cause */ + proto_tree_add_item(tree, hf_bssgp_utra_si_cause, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + break; + default : + proto_tree_add_text(tree, tvb, curr_offset, len, "Unknown Application Error Container"); + curr_offset+=len; + break; + } + return(len); +} + +/* + * 11.3.65 RIM PDU Indications */ static const value_string bssgp_ran_inf_req_pdu_t_ext_c_vals[] = { { 0, "RAN-INFORMATION-REQUEST/Stop PDU" }, { 1, "RAN-INFORMATION-REQUEST/Single Report PDU" }, { 2, "RAN-INFORMATION-REQUEST/Multiple Report PDU" }, - { 3, "Reserved" }, - { 4, "Reserved" }, - { 5, "Reserved" }, - { 6, "Reserved" }, - { 7, "Reserved" }, - { 0, NULL }, + { 3, "Reserved" }, + { 4, "Reserved" }, + { 5, "Reserved" }, + { 6, "Reserved" }, + { 7, "Reserved" }, + { 0, NULL }, }; static const value_string bssgp_ran_inf_pdu_t_ext_c_vals[] = { { 0, "RAN-INFORMATION/Stop PDU" }, { 1, "RAN-INFORMATION/Single Report PDU" }, { 2, "RAN-INFORMATION/Initial Multiple Report PDU" }, - { 3, "RAN-INFORMATION/Multiple Report PDU" }, - { 4, "RAN-INFORMATION/End PDU" }, - { 5, "Reserved" }, - { 6, "Reserved" }, - { 7, "Reserved" }, - { 0, NULL }, + { 3, "RAN-INFORMATION/Multiple Report PDU" }, + { 4, "RAN-INFORMATION/End PDU" }, + { 5, "Reserved" }, + { 6, "Reserved" }, + { 7, "Reserved" }, + { 0, NULL }, }; static const true_false_string bssgp_rim_pdu_ind_ack_vals = { @@ -2051,212 +2058,212 @@ static const true_false_string bssgp_rim_pdu_ind_ack_vals = { static guint16 de_bssgp_rim_pdu_indications(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; - - curr_offset = offset; - - switch(g_pdu_type){ - case BSSGP_PDU_RAN_INFORMATION_REQUEST: - /* 11.3.65.1 RAN-INFORMATION-REQUEST RIM PDU Indications */ - /* Table 11.3.65.1: RAN-INFORMATION-REQUEST PDU Type Extension coding */ - proto_tree_add_item(tree, hf_bssgp_ran_inf_req_pdu_t_ext_c, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - /* The ACK field is not used and shall be considered as spare */ - curr_offset++; - break; - case BSSGP_PDU_RAN_INFORMATION: - /* 11.3.65.2 RAN-INFORMATION RIM PDU Indications */ - /* Table 11.3.65.2: RAN-INFORMATION PDU Type Extension coding */ - proto_tree_add_item(tree, hf_bssgp_ran_inf_pdu_t_ext_c, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - proto_tree_add_item(tree, hf_bssgp_rim_pdu_ind_ack, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - curr_offset++; - break; - case BSSGP_PDU_RAN_INFORMATION_ERROR: - /* 11.3.65.3 RAN-INFORMATION-APPLICATION-ERROR RIM PDU Indications */ - proto_tree_add_item(tree, hf_bssgp_rim_pdu_ind_ack, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - /* The PDU Type Extension field is not used and shall be considered as spare */ - curr_offset++; - break; - default: - break; - } + guint32 curr_offset; + + curr_offset = offset; + + switch(g_pdu_type){ + case BSSGP_PDU_RAN_INFORMATION_REQUEST: + /* 11.3.65.1 RAN-INFORMATION-REQUEST RIM PDU Indications */ + /* Table 11.3.65.1: RAN-INFORMATION-REQUEST PDU Type Extension coding */ + proto_tree_add_item(tree, hf_bssgp_ran_inf_req_pdu_t_ext_c, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + /* The ACK field is not used and shall be considered as spare */ + curr_offset++; + break; + case BSSGP_PDU_RAN_INFORMATION: + /* 11.3.65.2 RAN-INFORMATION RIM PDU Indications */ + /* Table 11.3.65.2: RAN-INFORMATION PDU Type Extension coding */ + proto_tree_add_item(tree, hf_bssgp_ran_inf_pdu_t_ext_c, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + proto_tree_add_item(tree, hf_bssgp_rim_pdu_ind_ack, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + curr_offset++; + break; + case BSSGP_PDU_RAN_INFORMATION_ERROR: + /* 11.3.65.3 RAN-INFORMATION-APPLICATION-ERROR RIM PDU Indications */ + proto_tree_add_item(tree, hf_bssgp_rim_pdu_ind_ack, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + /* The PDU Type Extension field is not used and shall be considered as spare */ + curr_offset++; + break; + default: + break; + } - return(curr_offset-offset); + return(curr_offset-offset); } /* - * 11.3.65.0 General - * 11.3.65.1 RAN-INFORMATION-REQUEST RIM PDU Indications - * 11.3.65.2 RAN-INFORMATION RIM PDU Indications - * 11.3.65.3 RAN-INFORMATION-APPLICATION-ERROR RIM PDU Indications - * 11.3.66 (void) + * 11.3.65.0 General + * 11.3.65.1 RAN-INFORMATION-REQUEST RIM PDU Indications + * 11.3.65.2 RAN-INFORMATION RIM PDU Indications + * 11.3.65.3 RAN-INFORMATION-APPLICATION-ERROR RIM PDU Indications + * 11.3.66 (void) */ /* - * 11.3.67 RIM Protocol Version Number + * 11.3.67 RIM Protocol Version Number */ static const value_string bssgp_rim_proto_ver_no_vals[] = { { 0, "Reserved" }, { 1, "Version 1" }, - { 0, NULL }, + { 0, NULL }, }; static guint16 de_bssgp_rim_proto_ver_no(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - /* Octet 3 RIM Protocol Version Number */ - proto_tree_add_item(tree, hf_bssgp_rim_proto_ver_no, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - curr_offset++; + /* Octet 3 RIM Protocol Version Number */ + proto_tree_add_item(tree, hf_bssgp_rim_proto_ver_no, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + curr_offset++; - return(curr_offset-offset); + return(curr_offset-offset); } /* - * 11.3.68 PFC Flow Control parameters + * 11.3.68 PFC Flow Control parameters */ static guint16 de_bssgp_pfc_flow_ctrl(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - proto_tree *pfc_tree; - proto_item *pi, *ti2; - - guint32 curr_offset; - guint8 num_pfc, i, pfc_len; - gboolean b_pfc_included; - - curr_offset = offset; - - num_pfc = tvb_get_guint8(tvb, curr_offset); - pi = proto_tree_add_text(tree, tvb, curr_offset, 1, - "Number of PFCs: "); - - if (num_pfc < 12) { - proto_item_append_text(pi, "%u", num_pfc); - }else { - proto_item_append_text(pi, "Reserved"); - return (curr_offset-offset); - } - curr_offset++; - if (num_pfc == 0) - return (curr_offset-offset); - - pfc_len = (len - 1) / num_pfc; - b_pfc_included = (pfc_len == 6); - - for (i = 0; i < num_pfc; i++) { - ti2 = proto_tree_add_text(tree, tvb, curr_offset, pfc_len, - "PFC (%u)", i + 1); - pfc_tree = proto_item_add_subtree(ti2, ett_bssgp_pfc_flow_control_parameters_pfc); - - /* PFI: Packet Flow Identifier. - * Coded as the value part of the Packet Flow Identifier information element in - * 3GPP TS 24.008, not including 3GPP TS 24.008 IEI - */ - de_sm_pflow_id(tvb, pfc_tree, pinfo, curr_offset, 1, NULL, 0); - curr_offset++; - - /* Bmax_PFC: Bucket size of the PFC. Coded like the value part of BVC Bucket Size, see sub-clause 11.3.5. */ - proto_tree_add_item(tree, hf_bssgp_bmax_pfc, tvb, curr_offset, 2, ENC_BIG_ENDIAN); - curr_offset += 2; - - /* R_PFC: Bucket Leak Rate of the PFC. Coded as the value part of Bucket Leak Rate (R), see sub-clause 11.3.4. */ - proto_tree_add_item(tree, hf_bssgp_r_pfc, tvb, curr_offset, 2, ENC_BIG_ENDIAN); - curr_offset += 2; - - if (b_pfc_included) { - /* B_PFC: Bucket Full Ratio of the PFC. This field is only present if the Current Bucket Level (CBL) feature is - * negotiated. Otherwise, the flow control parameters for the next PFC, if any, are provided instead. This field if coded as - * the value part of the Bucket Full Ratio, see sub-clause 11.3.46. - */ - proto_tree_add_item(tree, hf_bssgp_b_pfc, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - curr_offset++; - } - } - return(curr_offset-offset); -} -/* - * 11.3.69 Global CN-Id + proto_tree *pfc_tree; + proto_item *pi, *ti2; + + guint32 curr_offset; + guint8 num_pfc, i, pfc_len; + gboolean b_pfc_included; + + curr_offset = offset; + + num_pfc = tvb_get_guint8(tvb, curr_offset); + pi = proto_tree_add_text(tree, tvb, curr_offset, 1, + "Number of PFCs: "); + + if (num_pfc < 12) { + proto_item_append_text(pi, "%u", num_pfc); + }else { + proto_item_append_text(pi, "Reserved"); + return (curr_offset-offset); + } + curr_offset++; + if (num_pfc == 0) + return (curr_offset-offset); + + pfc_len = (len - 1) / num_pfc; + b_pfc_included = (pfc_len == 6); + + for (i = 0; i < num_pfc; i++) { + ti2 = proto_tree_add_text(tree, tvb, curr_offset, pfc_len, + "PFC (%u)", i + 1); + pfc_tree = proto_item_add_subtree(ti2, ett_bssgp_pfc_flow_control_parameters_pfc); + + /* PFI: Packet Flow Identifier. + * Coded as the value part of the Packet Flow Identifier information element in + * 3GPP TS 24.008, not including 3GPP TS 24.008 IEI + */ + de_sm_pflow_id(tvb, pfc_tree, pinfo, curr_offset, 1, NULL, 0); + curr_offset++; + + /* Bmax_PFC: Bucket size of the PFC. Coded like the value part of BVC Bucket Size, see sub-clause 11.3.5. */ + proto_tree_add_item(tree, hf_bssgp_bmax_pfc, tvb, curr_offset, 2, ENC_BIG_ENDIAN); + curr_offset += 2; + + /* R_PFC: Bucket Leak Rate of the PFC. Coded as the value part of Bucket Leak Rate (R), see sub-clause 11.3.4. */ + proto_tree_add_item(tree, hf_bssgp_r_pfc, tvb, curr_offset, 2, ENC_BIG_ENDIAN); + curr_offset += 2; + + if (b_pfc_included) { + /* B_PFC: Bucket Full Ratio of the PFC. This field is only present if the Current Bucket Level (CBL) feature is + * negotiated. Otherwise, the flow control parameters for the next PFC, if any, are provided instead. This field if coded as + * the value part of the Bucket Full Ratio, see sub-clause 11.3.46. + */ + proto_tree_add_item(tree, hf_bssgp_b_pfc, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + curr_offset++; + } + } + return(curr_offset-offset); +} +/* + * 11.3.69 Global CN-Id */ /* Coded as octets 3 to 7 of the Global CN-Id IE, defined in * 3GPP TS 29.018 */ /* - * 11.3.70 RIM Routing Information + * 11.3.70 RIM Routing Information */ static const value_string bssgp_ra_discriminator_vals[] = { - { 0, "A Cell Identifier is used to identify a GERAN cell" }, - { 1, "A Global RNC-ID is used to identify a UTRAN RNC" }, - { 2, "An eNB identifier is used to identify an E-UTRAN eNodeB or HeNB" }, - { 0, NULL }, + { 0, "A Cell Identifier is used to identify a GERAN cell" }, + { 1, "A Global RNC-ID is used to identify a UTRAN RNC" }, + { 2, "An eNB identifier is used to identify an E-UTRAN eNodeB or HeNB" }, + { 0, NULL }, }; static guint16 de_bssgp_rim_routing_inf(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint8 oct; - guint16 rnc_id; - tvbuff_t *new_tvb = NULL; - guint32 curr_offset; - - curr_offset = offset; - - /* This information element uniquely identifies either a cell within a - * GERAN BSS, a UTRAN RNC or an E-UTRAN eNodeB. - */ - - /* RIM Routing Address discriminator */ - oct = tvb_get_guint8(tvb,curr_offset); - proto_tree_add_item(tree, hf_bssgp_ra_discriminator, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - curr_offset++; - switch(oct){ - case 0: - /* RIM Routing Address discriminator = 0000: - * The RIM Routing Address field contains a Cell Identifier - * and is coded as the value part (octet 3 to octet 10) of the - * Cell Identifier information element specified in sub-clause 11.3.9. - */ - curr_offset = curr_offset + de_bssgp_cell_id(tvb, tree, pinfo, curr_offset, len, add_string, string_len); - break; - case 1: - /* RIM Routing Address discriminator = 0001: - * The RIM Routing Address field contains an RNC identifier and is coded as follows: - * Octets 4 to 9 contain the value part (starting with octet 2) of the Routing Area Identification IE - * defined in 3GPP TS 24.008, not including 3GPP TS 24.008 IEI - */ - curr_offset = curr_offset + de_gmm_rai(tvb, tree, pinfo, curr_offset , 6, add_string, string_len); - /* Octet 10 - 11 RNC-ID (or Extended RNC-ID) */ - rnc_id = tvb_get_ntohs(tvb, curr_offset); - proto_tree_add_item(tree, hf_bssgp_rnc_id, tvb, curr_offset, 2, ENC_BIG_ENDIAN); - curr_offset+=2; - - if (add_string) - g_snprintf(add_string, string_len, " %s, RNC-ID %u", add_string, rnc_id); - break; - case 2: - /* RIM Routing Address discriminator = 0010: - * The RIM Routing Address field contains an eNB identifier and is coded as follows: - * Octets 4 to 8 contain the value part (starting with octet 2) of the - * Tracking Area Identity IE defined in 3GPP TS 24.301 [37], not including 3GPP TS 24.301 IEI - */ - curr_offset = curr_offset+ de_emm_trac_area_id(tvb, tree, pinfo, curr_offset, 5, add_string, string_len); - /* Octets 9-n contain the Global eNB ID (see 3GPP TS 36.413 [36]) of the eNodeB. */ - new_tvb = tvb_new_subset_remaining(tvb, curr_offset); - dissect_s1ap_Global_ENB_ID_PDU(new_tvb, gpinfo, tree); - break; - default: - proto_tree_add_text(tree, tvb, curr_offset, 3, "Unknown RIM Routing Address discriminator"); - return len; - } - - - return len; -} - -/* - * 11.3.71 MBMS Session Identity + guint8 oct; + guint16 rnc_id; + tvbuff_t *new_tvb = NULL; + guint32 curr_offset; + + curr_offset = offset; + + /* This information element uniquely identifies either a cell within a + * GERAN BSS, a UTRAN RNC or an E-UTRAN eNodeB. + */ + + /* RIM Routing Address discriminator */ + oct = tvb_get_guint8(tvb,curr_offset); + proto_tree_add_item(tree, hf_bssgp_ra_discriminator, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + curr_offset++; + switch(oct){ + case 0: + /* RIM Routing Address discriminator = 0000: + * The RIM Routing Address field contains a Cell Identifier + * and is coded as the value part (octet 3 to octet 10) of the + * Cell Identifier information element specified in sub-clause 11.3.9. + */ + curr_offset = curr_offset + de_bssgp_cell_id(tvb, tree, pinfo, curr_offset, len, add_string, string_len); + break; + case 1: + /* RIM Routing Address discriminator = 0001: + * The RIM Routing Address field contains an RNC identifier and is coded as follows: + * Octets 4 to 9 contain the value part (starting with octet 2) of the Routing Area Identification IE + * defined in 3GPP TS 24.008, not including 3GPP TS 24.008 IEI + */ + curr_offset = curr_offset + de_gmm_rai(tvb, tree, pinfo, curr_offset , 6, add_string, string_len); + /* Octet 10 - 11 RNC-ID (or Extended RNC-ID) */ + rnc_id = tvb_get_ntohs(tvb, curr_offset); + proto_tree_add_item(tree, hf_bssgp_rnc_id, tvb, curr_offset, 2, ENC_BIG_ENDIAN); + curr_offset+=2; + + if (add_string) + g_snprintf(add_string, string_len, " %s, RNC-ID %u", add_string, rnc_id); + break; + case 2: + /* RIM Routing Address discriminator = 0010: + * The RIM Routing Address field contains an eNB identifier and is coded as follows: + * Octets 4 to 8 contain the value part (starting with octet 2) of the + * Tracking Area Identity IE defined in 3GPP TS 24.301 [37], not including 3GPP TS 24.301 IEI + */ + curr_offset = curr_offset+ de_emm_trac_area_id(tvb, tree, pinfo, curr_offset, 5, add_string, string_len); + /* Octets 9-n contain the Global eNB ID (see 3GPP TS 36.413 [36]) of the eNodeB. */ + new_tvb = tvb_new_subset_remaining(tvb, curr_offset); + dissect_s1ap_Global_ENB_ID_PDU(new_tvb, gpinfo, tree); + break; + default: + proto_tree_add_text(tree, tvb, curr_offset, 3, "Unknown RIM Routing Address discriminator"); + return len; + } + + + return len; +} + +/* + * 11.3.71 MBMS Session Identity */ /* MBMS-Session-Identity AVP encoded as in 3GPP TS 29.061 [31], * excluding AVP Header fields as defined in IETF RFC 3588 [33]. @@ -2270,35 +2277,35 @@ de_bssgp_rim_routing_inf(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_ static guint16 de_bssgp_mbms_session_id(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - /* MBMS Session Identity */ - proto_tree_add_item(tree, hf_bssgp_mbms_session_id, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - curr_offset++; + /* MBMS Session Identity */ + proto_tree_add_item(tree, hf_bssgp_mbms_session_id, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + curr_offset++; - return(curr_offset-offset); + return(curr_offset-offset); } /* - * 11.3.72 MBMS Session Duration + * 11.3.72 MBMS Session Duration */ static guint16 de_bssgp_mbms_session_dur(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - tvbuff_t *new_tvb; - guint32 curr_offset; + tvbuff_t *new_tvb; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - /* AVP Code: 904 MBMS-Session-Duration Registered by packet-gtp.c */ - new_tvb =tvb_new_subset(tvb, offset, len, len); - dissector_try_uint(diameter_3gpp_avp_dissector_table, 904, new_tvb, gpinfo, tree); + /* AVP Code: 904 MBMS-Session-Duration Registered by packet-gtp.c */ + new_tvb =tvb_new_subset(tvb, offset, len, len); + dissector_try_uint(diameter_3gpp_avp_dissector_table, 904, new_tvb, gpinfo, tree); - return(curr_offset-offset); + return(curr_offset-offset); } /* - * 11.3.73 MBMS Service Area Identity List + * 11.3.73 MBMS Service Area Identity List * octet 3 - 514 * MBMS-Service-Area AVP encoded as in 3GPP TS 29.061, * excluding AVP Header fields (as defined in IETF RFC 3588 [33]). @@ -2307,114 +2314,114 @@ de_bssgp_mbms_session_dur(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U static guint16 de_bssgp_mbms_sai_list(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_) { - tvbuff_t *new_tvb; - guint32 curr_offset; + tvbuff_t *new_tvb; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - /* AVP Code: 903 MBMS-Service-Area Registered by packet-gtp.c */ - new_tvb =tvb_new_subset(tvb, offset, len, len); - dissector_try_uint(diameter_3gpp_avp_dissector_table, 903, new_tvb, gpinfo, tree); + /* AVP Code: 903 MBMS-Service-Area Registered by packet-gtp.c */ + new_tvb =tvb_new_subset(tvb, offset, len, len); + dissector_try_uint(diameter_3gpp_avp_dissector_table, 903, new_tvb, gpinfo, tree); - return(curr_offset-offset); + return(curr_offset-offset); } /* - * 11.3.74 MBMS Response + * 11.3.74 MBMS Response */ static const value_string bssgp_mbms_cause_vals[] = { - { 0, "Acknowledge" }, - { 1, "Acknowledge, initiate data transfer" }, - { 2, "Acknowledge, data transfer initiated from other SGSN" }, - { 3, "Reject - Congestion" }, - { 4, "Reject - None of the listed MBMS Service Areas are supported by BSS" }, - { 5, "Reject - MBMS Service Context is released due to interrupted data flow" }, - - { 6, "Unspecified in this version of the protocol" }, - { 7, "Unspecified in this version of the protocol" }, - { 8, "Unspecified in this version of the protocol" }, - { 9, "Unspecified in this version of the protocol" }, - { 10, "Unspecified in this version of the protocol" }, - { 11, "Unspecified in this version of the protocol" }, - { 12, "Unspecified in this version of the protocol" }, - { 13, "Unspecified in this version of the protocol" }, - { 14, "Unspecified in this version of the protocol" }, - { 15, "Unspecified in this version of the protocol" }, - { 0, NULL }, + { 0, "Acknowledge" }, + { 1, "Acknowledge, initiate data transfer" }, + { 2, "Acknowledge, data transfer initiated from other SGSN" }, + { 3, "Reject - Congestion" }, + { 4, "Reject - None of the listed MBMS Service Areas are supported by BSS" }, + { 5, "Reject - MBMS Service Context is released due to interrupted data flow" }, + + { 6, "Unspecified in this version of the protocol" }, + { 7, "Unspecified in this version of the protocol" }, + { 8, "Unspecified in this version of the protocol" }, + { 9, "Unspecified in this version of the protocol" }, + { 10, "Unspecified in this version of the protocol" }, + { 11, "Unspecified in this version of the protocol" }, + { 12, "Unspecified in this version of the protocol" }, + { 13, "Unspecified in this version of the protocol" }, + { 14, "Unspecified in this version of the protocol" }, + { 15, "Unspecified in this version of the protocol" }, + { 0, NULL }, }; static value_string_ext bssgp_mbms_cause_vals_ext = VALUE_STRING_EXT_INIT(bssgp_mbms_cause_vals); static guint16 de_bssgp_mbms_response(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - /* MBMS Session Identity */ - proto_tree_add_item(tree, hf_bssgp_mbms_cause, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - curr_offset++; + /* MBMS Session Identity */ + proto_tree_add_item(tree, hf_bssgp_mbms_cause, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + curr_offset++; - return(curr_offset-offset); + return(curr_offset-offset); } /* - * 11.3.75 MBMS Routing Area List + * 11.3.75 MBMS Routing Area List */ /* Number of Routing Areas (octet 3) */ static const value_string bssgp_mbms_num_ra_ids_vals[] = { - { 0, "Notification shall not be sent to any Routing Areas in the BSS" }, - { 1, "'1' Routing Area Identities" }, - { 2, "'1' Routing Area Identities" }, - { 3, "'1' Routing Area Identities" }, - { 4, "'1' Routing Area Identities" }, - { 5, "'1' Routing Area Identities" }, - { 6, "'1' Routing Area Identities" }, - { 7, "'1' Routing Area Identities" }, - { 8, "'1' Routing Area Identities" }, - { 9, "'1' Routing Area Identities" }, - { 10, "'1' Routing Area Identities" }, - { 11, "'1' Routing Area Identities" }, - { 12, "'1' Routing Area Identities" }, - { 13, "'1' Routing Area Identities" }, - { 14, "'1' Routing Area Identities" }, - { 15, "Notification shall be sent in all Routing Areas in the BSS" }, - { 0, NULL }, + { 0, "Notification shall not be sent to any Routing Areas in the BSS" }, + { 1, "'1' Routing Area Identities" }, + { 2, "'1' Routing Area Identities" }, + { 3, "'1' Routing Area Identities" }, + { 4, "'1' Routing Area Identities" }, + { 5, "'1' Routing Area Identities" }, + { 6, "'1' Routing Area Identities" }, + { 7, "'1' Routing Area Identities" }, + { 8, "'1' Routing Area Identities" }, + { 9, "'1' Routing Area Identities" }, + { 10, "'1' Routing Area Identities" }, + { 11, "'1' Routing Area Identities" }, + { 12, "'1' Routing Area Identities" }, + { 13, "'1' Routing Area Identities" }, + { 14, "'1' Routing Area Identities" }, + { 15, "Notification shall be sent in all Routing Areas in the BSS" }, + { 0, NULL }, }; static value_string_ext bssgp_mbms_num_ra_ids_vals_ext = VALUE_STRING_EXT_INIT(bssgp_mbms_num_ra_ids_vals); static guint16 de_bssgp_mbms_ra_list(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - proto_item *ti; - proto_tree *rai_tree; - guint32 curr_offset; - guint8 num_ra_ids; - int i; + proto_item *ti; + proto_tree *rai_tree; + guint32 curr_offset; + guint8 num_ra_ids; + int i; - curr_offset = offset; + curr_offset = offset; - /* octet 3 Number of Routing Area Identifications Spare Spare Spare Spare */ - num_ra_ids = tvb_get_guint8(tvb,curr_offset) >> 4; - proto_tree_add_item(tree, hf_bssgp_mbms_num_ra_ids, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + /* octet 3 Number of Routing Area Identifications Spare Spare Spare Spare */ + num_ra_ids = tvb_get_guint8(tvb,curr_offset) >> 4; + proto_tree_add_item(tree, hf_bssgp_mbms_num_ra_ids, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - /* octet 4 - 11 Routing Area Identification 1 (etc)*/ - for (i = 0; i < num_ra_ids; i++) { - ti = proto_tree_add_text(tree, tvb, curr_offset, 8, "Routing Area Identification (%u)", i + 1); - rai_tree = proto_item_add_subtree(ti, ett_bssgp_ra_id); + /* octet 4 - 11 Routing Area Identification 1 (etc)*/ + for (i = 0; i < num_ra_ids; i++) { + ti = proto_tree_add_text(tree, tvb, curr_offset, 8, "Routing Area Identification (%u)", i + 1); + rai_tree = proto_item_add_subtree(ti, ett_bssgp_ra_id); - /* The element is coded as the Routing Area Identification information element in - * 3GPP TS 24.008, not including 3GPP TS 24.008 IEI and 3GPP TS 24.008 length indicator. - */ - de_gmm_rai(tvb, rai_tree, pinfo, curr_offset , 6, NULL, 0); + /* The element is coded as the Routing Area Identification information element in + * 3GPP TS 24.008, not including 3GPP TS 24.008 IEI and 3GPP TS 24.008 length indicator. + */ + de_gmm_rai(tvb, rai_tree, pinfo, curr_offset , 6, NULL, 0); - curr_offset+=8; - } + curr_offset+=8; + } - return(curr_offset-offset); + return(curr_offset-offset); } /* - * 11.3.76 MBMS Session Information + * 11.3.76 MBMS Session Information */ static const true_false_string tfs_bssgp_bc_mc = { @@ -2424,278 +2431,278 @@ static const true_false_string tfs_bssgp_bc_mc = { static guint16 de_bssgp_mbms_session_inf(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - /* MBMS Session Identity */ - proto_tree_add_item(tree, hf_bssgp_session_inf, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - curr_offset++; + /* MBMS Session Identity */ + proto_tree_add_item(tree, hf_bssgp_session_inf, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + curr_offset++; - return(curr_offset-offset); + return(curr_offset-offset); } /* - * 11.3.77 TMGI (Temporary Mobile Group Identity) + * 11.3.77 TMGI (Temporary Mobile Group Identity) */ /* Rest of element coded as in 3GPP TS 24.008, not including 3GPP * TS 24.008 IEI and 3GPP TS 24.008 length indicator. */ /* - * 11.3.78 MBMS Stop Cause + * 11.3.78 MBMS Stop Cause */ static const value_string bssgp_mbms_stop_cause_vals[] = { - { 0, "MBMS Session terminated by upstream node" }, - { 1, "MBMS Session terminated by SGSN" }, - - { 2, "Unspecified in this version of the protocol" }, - { 3, "Unspecified in this version of the protocol" }, - { 4, "Unspecified in this version of the protocol" }, - { 5, "Unspecified in this version of the protocol" }, - { 6, "Unspecified in this version of the protocol" }, - { 7, "Unspecified in this version of the protocol" }, - { 8, "Unspecified in this version of the protocol" }, - { 9, "Unspecified in this version of the protocol" }, - { 10, "Unspecified in this version of the protocol" }, - { 11, "Unspecified in this version of the protocol" }, - { 12, "Unspecified in this version of the protocol" }, - { 13, "Unspecified in this version of the protocol" }, - { 14, "Unspecified in this version of the protocol" }, - { 15, "Unspecified in this version of the protocol" }, - { 0, NULL }, + { 0, "MBMS Session terminated by upstream node" }, + { 1, "MBMS Session terminated by SGSN" }, + + { 2, "Unspecified in this version of the protocol" }, + { 3, "Unspecified in this version of the protocol" }, + { 4, "Unspecified in this version of the protocol" }, + { 5, "Unspecified in this version of the protocol" }, + { 6, "Unspecified in this version of the protocol" }, + { 7, "Unspecified in this version of the protocol" }, + { 8, "Unspecified in this version of the protocol" }, + { 9, "Unspecified in this version of the protocol" }, + { 10, "Unspecified in this version of the protocol" }, + { 11, "Unspecified in this version of the protocol" }, + { 12, "Unspecified in this version of the protocol" }, + { 13, "Unspecified in this version of the protocol" }, + { 14, "Unspecified in this version of the protocol" }, + { 15, "Unspecified in this version of the protocol" }, + { 0, NULL }, }; static value_string_ext bssgp_mbms_stop_cause_vals_ext = VALUE_STRING_EXT_INIT(bssgp_mbms_stop_cause_vals); static guint16 de_bssgp_mbms_stop_cause(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - /* MBMS Session Identity */ - proto_tree_add_item(tree, hf_bssgp_mbms_stop_cause, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - curr_offset++; + /* MBMS Session Identity */ + proto_tree_add_item(tree, hf_bssgp_mbms_stop_cause, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + curr_offset++; - return(curr_offset-offset); + return(curr_offset-offset); } /* - * 11.3.79 Source BSS to Target BSS Transparent Container + * 11.3.79 Source BSS to Target BSS Transparent Container */ /* The actual function moved to after defining the enums */ /* - * 11.3.80 Target BSS to Source BSS Transparent Container + * 11.3.80 Target BSS to Source BSS Transparent Container */ /* - * 11.3.81 NAS container for PS Handover + * 11.3.81 NAS container for PS Handover */ /* - * 11.3.82 PFCs to be set-up list + * 11.3.82 PFCs to be set-up list */ static guint16 de_bssgp_pfcs_to_be_set_up_list(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - proto_tree *pfc_tree, *pft_tree, *abqp_tree, *arp_tree, *t10_tree; - proto_item *pi, *ti2; - - guint32 curr_offset; - guint8 num_pfc, i, pfc_len; - - curr_offset = offset; - - num_pfc = tvb_get_guint8(tvb, curr_offset); - pi = proto_tree_add_text(tree, tvb, curr_offset, 1, - "Number of PFCs: "); - - if (num_pfc < 12) { - proto_item_append_text(pi, "%u", num_pfc); - }else { - proto_item_append_text(pi, "Reserved"); - return (len); - } - curr_offset++; - if (num_pfc == 0) - return (curr_offset-offset); - - pfc_len = (len - 1) / num_pfc; - - for (i = 0; i < num_pfc; i++) { - ti2 = proto_tree_add_text(tree, tvb, curr_offset, pfc_len, - "PFC (%u)", i + 1); - pfc_tree = proto_item_add_subtree(ti2, ett_bssgp_pfcs_to_be_set_up_list); - - de_sm_pflow_id(tvb, pfc_tree, pinfo, curr_offset, 1, NULL, 0); - curr_offset++; - - /* PFT: Packet Flow Timer. Coded as the GPRS Timer information element, - * see sub-clause 11.3.44. - */ - proto_tree_add_text(pfc_tree, tvb, curr_offset, 3, "Packet Flow Timer(PFT)"); - pft_tree = proto_item_add_subtree(ti2, ett_bssgp_pfcs_to_be_set_up_list_pft); - proto_tree_add_item(pft_tree, hf_bssgp_unit_val, tvb, curr_offset, 3, ENC_BIG_ENDIAN); - proto_tree_add_item(pft_tree, hf_bssgp_gprs_timer, tvb, curr_offset, 3, ENC_BIG_ENDIAN); - curr_offset += 3; - - /* ABQP: Aggregate BSS QoS Profile. - * Coded as the Aggregate BSS QoS Profile information element, see sub-clause 11.3.43. - */ - proto_tree_add_text(pfc_tree, tvb, curr_offset, 3, "Aggregate BSS QoS Profile(ABQP)"); - abqp_tree = proto_item_add_subtree(ti2, ett_bssgp_pfcs_to_be_set_up_list_abqp); - /* Unsure about length 16 */ - curr_offset = curr_offset + de_sm_qos(tvb, abqp_tree, pinfo, curr_offset, 16, NULL, 0); - - /* Allocation/Retention Priority: Allocation Retention Priority. - * Coded as the Priority information element, see subclause 11.3.27. - * This information element is optionally included. - */ - if(pfc_len>17){ - proto_tree_add_text(pfc_tree, tvb, curr_offset, 3, "Allocation/Retention Priority"); - arp_tree = proto_item_add_subtree(ti2, ett_bssgp_pfcs_to_be_set_up_list_arp); - curr_offset = curr_offset + be_prio(tvb, arp_tree, pinfo, curr_offset, 1, NULL, 0); - } - /* T10: T10. - * Coded as the GPRS Timer information element, see sub-clause 11.3.44. - * This information element shall be present for a PFC if the Allocation/Retention Priority - * is present and if queuing is allowed for the PFC. - */ - if(pfc_len>18){ - proto_tree_add_text(pfc_tree, tvb, curr_offset, 3, "T10"); - t10_tree = proto_item_add_subtree(ti2, ett_bssgp_pfcs_to_be_set_up_list_t10); - proto_tree_add_item(t10_tree, hf_bssgp_unit_val, tvb, curr_offset, 3, ENC_BIG_ENDIAN); - proto_tree_add_item(t10_tree, hf_bssgp_gprs_timer, tvb, curr_offset, 3, ENC_BIG_ENDIAN); - curr_offset += 3; - } - } - return(curr_offset-offset); -} -/* - * 11.3.83 List of set-up PFCs + proto_tree *pfc_tree, *pft_tree, *abqp_tree, *arp_tree, *t10_tree; + proto_item *pi, *ti2; + + guint32 curr_offset; + guint8 num_pfc, i, pfc_len; + + curr_offset = offset; + + num_pfc = tvb_get_guint8(tvb, curr_offset); + pi = proto_tree_add_text(tree, tvb, curr_offset, 1, + "Number of PFCs: "); + + if (num_pfc < 12) { + proto_item_append_text(pi, "%u", num_pfc); + }else { + proto_item_append_text(pi, "Reserved"); + return (len); + } + curr_offset++; + if (num_pfc == 0) + return (curr_offset-offset); + + pfc_len = (len - 1) / num_pfc; + + for (i = 0; i < num_pfc; i++) { + ti2 = proto_tree_add_text(tree, tvb, curr_offset, pfc_len, + "PFC (%u)", i + 1); + pfc_tree = proto_item_add_subtree(ti2, ett_bssgp_pfcs_to_be_set_up_list); + + de_sm_pflow_id(tvb, pfc_tree, pinfo, curr_offset, 1, NULL, 0); + curr_offset++; + + /* PFT: Packet Flow Timer. Coded as the GPRS Timer information element, + * see sub-clause 11.3.44. + */ + proto_tree_add_text(pfc_tree, tvb, curr_offset, 3, "Packet Flow Timer(PFT)"); + pft_tree = proto_item_add_subtree(ti2, ett_bssgp_pfcs_to_be_set_up_list_pft); + proto_tree_add_item(pft_tree, hf_bssgp_unit_val, tvb, curr_offset, 3, ENC_BIG_ENDIAN); + proto_tree_add_item(pft_tree, hf_bssgp_gprs_timer, tvb, curr_offset, 3, ENC_BIG_ENDIAN); + curr_offset += 3; + + /* ABQP: Aggregate BSS QoS Profile. + * Coded as the Aggregate BSS QoS Profile information element, see sub-clause 11.3.43. + */ + proto_tree_add_text(pfc_tree, tvb, curr_offset, 3, "Aggregate BSS QoS Profile(ABQP)"); + abqp_tree = proto_item_add_subtree(ti2, ett_bssgp_pfcs_to_be_set_up_list_abqp); + /* Unsure about length 16 */ + curr_offset = curr_offset + de_sm_qos(tvb, abqp_tree, pinfo, curr_offset, 16, NULL, 0); + + /* Allocation/Retention Priority: Allocation Retention Priority. + * Coded as the Priority information element, see subclause 11.3.27. + * This information element is optionally included. + */ + if(pfc_len>17){ + proto_tree_add_text(pfc_tree, tvb, curr_offset, 3, "Allocation/Retention Priority"); + arp_tree = proto_item_add_subtree(ti2, ett_bssgp_pfcs_to_be_set_up_list_arp); + curr_offset = curr_offset + be_prio(tvb, arp_tree, pinfo, curr_offset, 1, NULL, 0); + } + /* T10: T10. + * Coded as the GPRS Timer information element, see sub-clause 11.3.44. + * This information element shall be present for a PFC if the Allocation/Retention Priority + * is present and if queuing is allowed for the PFC. + */ + if(pfc_len>18){ + proto_tree_add_text(pfc_tree, tvb, curr_offset, 3, "T10"); + t10_tree = proto_item_add_subtree(ti2, ett_bssgp_pfcs_to_be_set_up_list_t10); + proto_tree_add_item(t10_tree, hf_bssgp_unit_val, tvb, curr_offset, 3, ENC_BIG_ENDIAN); + proto_tree_add_item(t10_tree, hf_bssgp_gprs_timer, tvb, curr_offset, 3, ENC_BIG_ENDIAN); + curr_offset += 3; + } + } + return(curr_offset-offset); +} +/* + * 11.3.83 List of set-up PFCs */ static guint16 de_bssgp_list_of_setup_pfcs(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - proto_tree *pfc_tree; - proto_item *pi, *ti2; + proto_tree *pfc_tree; + proto_item *pi, *ti2; - guint32 curr_offset; - guint8 num_pfc, i; + guint32 curr_offset; + guint8 num_pfc, i; - curr_offset = offset; + curr_offset = offset; - num_pfc = tvb_get_guint8(tvb, curr_offset); - pi = proto_tree_add_text(tree, tvb, curr_offset, 1, - "Number of PFCs: "); + num_pfc = tvb_get_guint8(tvb, curr_offset); + pi = proto_tree_add_text(tree, tvb, curr_offset, 1, + "Number of PFCs: "); - if (num_pfc < 12) { - proto_item_append_text(pi, "%u", num_pfc); - }else { - proto_item_append_text(pi, "Reserved"); - return (curr_offset-offset); - } - curr_offset++; - if (num_pfc == 0) - return (curr_offset-offset); + if (num_pfc < 12) { + proto_item_append_text(pi, "%u", num_pfc); + }else { + proto_item_append_text(pi, "Reserved"); + return (curr_offset-offset); + } + curr_offset++; + if (num_pfc == 0) + return (curr_offset-offset); - for (i = 0; i < num_pfc; i++) { - ti2 = proto_tree_add_text(tree, tvb, curr_offset, 1, - "PFC (%u)", i + 1); - pfc_tree = proto_item_add_subtree(ti2, ett_bssgp_list_of_setup_pfcs); + for (i = 0; i < num_pfc; i++) { + ti2 = proto_tree_add_text(tree, tvb, curr_offset, 1, + "PFC (%u)", i + 1); + pfc_tree = proto_item_add_subtree(ti2, ett_bssgp_list_of_setup_pfcs); - de_sm_pflow_id(tvb, pfc_tree, pinfo, curr_offset, 1, NULL, 0); - curr_offset++; + de_sm_pflow_id(tvb, pfc_tree, pinfo, curr_offset, 1, NULL, 0); + curr_offset++; - } + } - return(curr_offset-offset); + return(curr_offset-offset); } /* - * 11.3.84 Extended Feature Bitmap + * 11.3.84 Extended Feature Bitmap */ static guint16 de_bssgp_ext_feature_bitmap(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - /* Gigabit Interface */ - proto_tree_add_item(tree, hf_bssgp_gb_if, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - /* PS Handover */ - proto_tree_add_item(tree, hf_bssgp_ps_ho, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - curr_offset++; + /* Gigabit Interface */ + proto_tree_add_item(tree, hf_bssgp_gb_if, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + /* PS Handover */ + proto_tree_add_item(tree, hf_bssgp_ps_ho, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + curr_offset++; - return(curr_offset-offset); + return(curr_offset-offset); } /* - * 11.3.85 Source to Target Transparent Container + * 11.3.85 Source to Target Transparent Container */ static guint16 de_bssgp_src_to_trg_transp_cont(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - /* Octets 3-? Source to Target Transparent Container content coded as - * specified in 3GPP TS 25.413 or 3GPP TS 36.413. - * In inter-RAT handovers ... RANAP specification 3GPP TS 25.413, excluding RANAP tag. - * In inter-RAT handover to E-UTRAN ... encoding is defined in 3GPP TS 36.413 - */ - proto_tree_add_item(tree, hf_bssgp_src_to_trg_transp_cont, tvb, curr_offset, len, ENC_NA); + /* Octets 3-? Source to Target Transparent Container content coded as + * specified in 3GPP TS 25.413 or 3GPP TS 36.413. + * In inter-RAT handovers ... RANAP specification 3GPP TS 25.413, excluding RANAP tag. + * In inter-RAT handover to E-UTRAN ... encoding is defined in 3GPP TS 36.413 + */ + proto_tree_add_item(tree, hf_bssgp_src_to_trg_transp_cont, tvb, curr_offset, len, ENC_NA); - return(len); + return(len); } /* - * 11.3.86 Target to Source Transparent Container + * 11.3.86 Target to Source Transparent Container */ static guint16 de_bssgp_trg_to_src_transp_cont(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - /* Rest of element coded as either a complete Handover to UTRAN - * Command radio interface message (as defined in 3GPP TS - * 25.331) or a complete Radio Bearer Reconfiguration radio - * interface message (as defined in 3GPP TS 44.118) or a complete - * DL-DCCH-Message including a complete - * RRCConnectionReconfiguration radio interface message (as - * defined in 3GPP TS 36.331) - */ - proto_tree_add_item(tree, hf_bssgp_trg_to_src_transp_cont, tvb, curr_offset, len, ENC_NA); + /* Rest of element coded as either a complete Handover to UTRAN + * Command radio interface message (as defined in 3GPP TS + * 25.331) or a complete Radio Bearer Reconfiguration radio + * interface message (as defined in 3GPP TS 44.118) or a complete + * DL-DCCH-Message including a complete + * RRCConnectionReconfiguration radio interface message (as + * defined in 3GPP TS 36.331) + */ + proto_tree_add_item(tree, hf_bssgp_trg_to_src_transp_cont, tvb, curr_offset, len, ENC_NA); - return(len); + return(len); } /* - * 11.3.87 RNC Identifier + * 11.3.87 RNC Identifier */ static guint16 de_bssgp_rnc_identifier(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; - guint16 rnc_id; + guint32 curr_offset; + guint16 rnc_id; - curr_offset = offset; - /* Octets 3-8 Octets 3 to 8 contain the value part (starting with octet 2) of the - * Routing Area Identification IE defined in 3GPP TS 24.008, not including 3GPP TS 24.008 IEI - */ - curr_offset = curr_offset + de_gmm_rai(tvb, tree, pinfo, curr_offset, 6, add_string, string_len); - /* Octet 9 - 10 RNC ID (or Extended RNC-ID or Corresponding RNC-ID) */ - rnc_id = tvb_get_ntohs(tvb, curr_offset); - proto_tree_add_item(tree, hf_bssgp_rnc_id, tvb, curr_offset, 2, ENC_BIG_ENDIAN); - curr_offset+=2; + curr_offset = offset; + /* Octets 3-8 Octets 3 to 8 contain the value part (starting with octet 2) of the + * Routing Area Identification IE defined in 3GPP TS 24.008, not including 3GPP TS 24.008 IEI + */ + curr_offset = curr_offset + de_gmm_rai(tvb, tree, pinfo, curr_offset, 6, add_string, string_len); + /* Octet 9 - 10 RNC ID (or Extended RNC-ID or Corresponding RNC-ID) */ + rnc_id = tvb_get_ntohs(tvb, curr_offset); + proto_tree_add_item(tree, hf_bssgp_rnc_id, tvb, curr_offset, 2, ENC_BIG_ENDIAN); + curr_offset+=2; - if (add_string) - g_snprintf(add_string, string_len, " %s, RNC-ID %u", add_string, rnc_id); + if (add_string) + g_snprintf(add_string, string_len, " %s, RNC-ID %u", add_string, rnc_id); - return(curr_offset-offset); + return(curr_offset-offset); } /* - * 11.3.88 Page Mode + * 11.3.88 Page Mode */ /* PAGE_MODE (2 bit field) */ @@ -2703,1078 +2710,1078 @@ static const value_string bssgp_page_mode_vals[] = { { 0, "Normal Paging" }, { 1, "Extended Paging" }, { 2, "Paging Reorganization" }, - { 3, "Same as before" }, - { 0, NULL }, - }; + { 3, "Same as before" }, + { 0, NULL }, +}; static guint16 de_bssgp_page_mode(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - proto_tree_add_item(tree, hf_bssgp_page_mode, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - curr_offset++; + proto_tree_add_item(tree, hf_bssgp_page_mode, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + curr_offset++; - return(curr_offset-offset); + return(curr_offset-offset); } /* - * 11.3.89 Container ID + * 11.3.89 Container ID */ static guint16 de_bssgp_container_id(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - proto_tree_add_item(tree, hf_bssgp_container_id, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - curr_offset++; + proto_tree_add_item(tree, hf_bssgp_container_id, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + curr_offset++; - return(curr_offset-offset); + return(curr_offset-offset); } /* - * 11.3.90 Global TFI + * 11.3.90 Global TFI */ static const value_string bssgp_global_tfi_vals[] = { { 0, "UPLINK_TFI" }, { 1, "DOWNLINK_TFI" }, - { 0, NULL }, - }; + { 0, NULL }, +}; static guint16 de_bssgp_global_tfi(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; - guint32 bit_offset; - guint8 gtfi; - - curr_offset = offset; - - /* Bits 6 - 1 Global TFI coded as specified in 3GPP TS 44.060 */ - bit_offset = (curr_offset << 3) +3; - gtfi = tvb_get_bits8(tvb,bit_offset,1); - proto_tree_add_bits_item(tree, hf_bssgp_global_tfi, tvb, bit_offset, 1, ENC_BIG_ENDIAN); - bit_offset++; - /* < Global TFI IE > ::= - * { 0 < UPLINK_TFI : bit (5) > - * | 1 < DOWNLINK_TFI : bit (5) > } ; - */ - if(gtfi == 0){ - /* UPLINK_TFI (5 bit field) - * This field identifies an uplink TBF. This field is coded the same as the - * TFI field defined in sub-clause 12.15. - * This field is encoded as a binary number. Range 0 to 31 - */ - proto_tree_add_bits_item(tree, hf_bssgp_ul_tfi, tvb, bit_offset, 1, ENC_BIG_ENDIAN); - }else{ - /* DOWNLINK_TFI (5 bit field) - * This field identifies an uplink TBF. This field is coded the same as the - * TFI field defined in sub-clause 12.15. - * This field is encoded as a binary number. Range 0 to 31 - */ - proto_tree_add_bits_item(tree, hf_bssgp_dl_tfi, tvb, bit_offset, 1, ENC_BIG_ENDIAN); - } - curr_offset++; - - return(curr_offset-offset); -} -/* - * 11.3.91 IMEI + guint32 curr_offset; + guint32 bit_offset; + guint8 gtfi; + + curr_offset = offset; + + /* Bits 6 - 1 Global TFI coded as specified in 3GPP TS 44.060 */ + bit_offset = (curr_offset << 3) +3; + gtfi = tvb_get_bits8(tvb,bit_offset,1); + proto_tree_add_bits_item(tree, hf_bssgp_global_tfi, tvb, bit_offset, 1, ENC_BIG_ENDIAN); + bit_offset++; + /* < Global TFI IE > ::= + * { 0 < UPLINK_TFI : bit (5) > + * | 1 < DOWNLINK_TFI : bit (5) > } ; + */ + if(gtfi == 0){ + /* UPLINK_TFI (5 bit field) + * This field identifies an uplink TBF. This field is coded the same as the + * TFI field defined in sub-clause 12.15. + * This field is encoded as a binary number. Range 0 to 31 + */ + proto_tree_add_bits_item(tree, hf_bssgp_ul_tfi, tvb, bit_offset, 1, ENC_BIG_ENDIAN); + }else{ + /* DOWNLINK_TFI (5 bit field) + * This field identifies an uplink TBF. This field is coded the same as the + * TFI field defined in sub-clause 12.15. + * This field is encoded as a binary number. Range 0 to 31 + */ + proto_tree_add_bits_item(tree, hf_bssgp_dl_tfi, tvb, bit_offset, 1, ENC_BIG_ENDIAN); + } + curr_offset++; + + return(curr_offset-offset); +} +/* + * 11.3.91 IMEI */ /* Octets 3-10 contain the IMEI coded as the value part of the Mobile * Identity IE defined in 3GPP TS 24.008 * (NOTE 1) */ /* - * 11.3.92 Time to MBMS Data Transfer + * 11.3.92 Time to MBMS Data Transfer */ static guint16 de_bssgp_time_to_MBMS_data_tran(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; - guint8 value; + guint32 curr_offset; + guint8 value; - curr_offset = offset; + curr_offset = offset; - /* 0 = 1s etc */ - value = tvb_get_guint8(tvb,curr_offset) + 1; - proto_tree_add_uint(tree, hf_bssgp_time_to_MBMS_data_tran, tvb, curr_offset, 1, value); + /* 0 = 1s etc */ + value = tvb_get_guint8(tvb,curr_offset) + 1; + proto_tree_add_uint(tree, hf_bssgp_time_to_MBMS_data_tran, tvb, curr_offset, 1, value); - return(len); + return(len); } /* - * 11.3.93 MBMS Session Repetition Number + * 11.3.93 MBMS Session Repetition Number */ static guint16 de_bssgp_mbms_session_rep_no(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - proto_tree_add_item(tree, hf_bssgp_mbms_session_rep_no, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - curr_offset++; + proto_tree_add_item(tree, hf_bssgp_mbms_session_rep_no, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + curr_offset++; - return(len); + return(len); } /* - * 11.3.94 Inter RAT Handover Info + * 11.3.94 Inter RAT Handover Info */ static guint16 de_bssgp_inter_rat_ho_info(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - tvbuff_t *new_tvb; - guint32 curr_offset; + tvbuff_t *new_tvb; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - new_tvb = tvb_new_subset_remaining(tvb, curr_offset); - /* - * Inter RAT Handover Information coded as specified in 3GPP - * Technical Specification 25.331 - */ - dissect_rrc_InterRATHandoverInfo_PDU(new_tvb, gpinfo, tree); + new_tvb = tvb_new_subset_remaining(tvb, curr_offset); + /* + * Inter RAT Handover Information coded as specified in 3GPP + * Technical Specification 25.331 + */ + dissect_rrc_InterRATHandoverInfo_PDU(new_tvb, gpinfo, tree); - return(len); + return(len); } /* - * 11.3.95 PS Handover Command + * 11.3.95 PS Handover Command */ static guint16 de_bssgp_ps_ho_cmd(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - /* Octet 3-? Rest of element coded as a complete PS Handover Command - * radio interface message as defined in 3GPP TS 44.060 (carrying - * the PS Handover to A/Gb Mode Payload) - */ - proto_tree_add_item(tree, hf_bssgp_ps_ho_cmd, tvb, curr_offset, len, ENC_NA); + /* Octet 3-? Rest of element coded as a complete PS Handover Command + * radio interface message as defined in 3GPP TS 44.060 (carrying + * the PS Handover to A/Gb Mode Payload) + */ + proto_tree_add_item(tree, hf_bssgp_ps_ho_cmd, tvb, curr_offset, len, ENC_NA); - return(len); + return(len); } /* - * 11.3.95a PS Handover Indications + * 11.3.95a PS Handover Indications */ static guint16 de_bssgp_ps_ho_indications(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - /* SI/PSI */ - proto_tree_add_item(tree, hf_bssgp_sipsi, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - curr_offset++; + /* SI/PSI */ + proto_tree_add_item(tree, hf_bssgp_sipsi, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + curr_offset++; - return(curr_offset-offset); + return(curr_offset-offset); } /* - * 11.3.95b SI/PSI Container + * 11.3.95b SI/PSI Container */ - static const value_string type_vals[] = { +static const value_string type_vals[] = { { 0, "SI messages as specified for BCCH (3GPP TS 44.018) follow" }, { 1, "PSI messages as specified for PBCCH (3GPP TS 44.060) follow" }, - { 0, NULL }, - }; + { 0, NULL }, +}; static guint16 de_bssgp_sipsi_container(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; - guint8 oct,num, type, i; - - curr_offset = offset; - - oct = tvb_get_guint8(tvb, curr_offset); - num = oct >>1; - type = oct & 1; - proto_tree_add_text(tree, tvb, curr_offset, 1, - "Number of SI/PSI: %u",num); - - /* Type */ - proto_tree_add_item(tree, hf_bssgp_type, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - curr_offset++; - if (type==0){ - /* BCCH (3GPP TS 44.018) */ - for (i = 0; i < num; i++) { - proto_tree_add_text(tree, tvb, curr_offset, 21, "SI (%u)", i + 1); - curr_offset+=21; - } - }else{ - /* PBCCH (3GPP TS 44.060) */ - for (i = 0; i < num; i++) { - proto_tree_add_text(tree, tvb, curr_offset, 22, "PSI (%u)", i + 1); - curr_offset+=22; - } - } + guint32 curr_offset; + guint8 oct,num, type, i; + + curr_offset = offset; + + oct = tvb_get_guint8(tvb, curr_offset); + num = oct >>1; + type = oct & 1; + proto_tree_add_text(tree, tvb, curr_offset, 1, + "Number of SI/PSI: %u",num); + + /* Type */ + proto_tree_add_item(tree, hf_bssgp_type, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + curr_offset++; + if (type==0){ + /* BCCH (3GPP TS 44.018) */ + for (i = 0; i < num; i++) { + proto_tree_add_text(tree, tvb, curr_offset, 21, "SI (%u)", i + 1); + curr_offset+=21; + } + }else{ + /* PBCCH (3GPP TS 44.060) */ + for (i = 0; i < num; i++) { + proto_tree_add_text(tree, tvb, curr_offset, 22, "PSI (%u)", i + 1); + curr_offset+=22; + } + } - return(curr_offset-offset); + return(curr_offset-offset); } /* - * 11.3.95c Active PFCs List + * 11.3.95c Active PFCs List */ static guint16 de_bssgp_active_pfcs_list(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - proto_tree *pfc_tree; - proto_item *pi, *ti2; + proto_tree *pfc_tree; + proto_item *pi, *ti2; - guint32 curr_offset; - guint8 num_pfc, i; + guint32 curr_offset; + guint8 num_pfc, i; - curr_offset = offset; + curr_offset = offset; - num_pfc = tvb_get_guint8(tvb, curr_offset); - pi = proto_tree_add_text(tree, tvb, curr_offset, 1, - "Number of PFCs: "); + num_pfc = tvb_get_guint8(tvb, curr_offset); + pi = proto_tree_add_text(tree, tvb, curr_offset, 1, + "Number of PFCs: "); - if (num_pfc < 12) { - proto_item_append_text(pi, "%u", num_pfc); - }else { - proto_item_append_text(pi, "Reserved"); - return (curr_offset-offset); - } - curr_offset++; - if (num_pfc == 0) - return (curr_offset-offset); + if (num_pfc < 12) { + proto_item_append_text(pi, "%u", num_pfc); + }else { + proto_item_append_text(pi, "Reserved"); + return (curr_offset-offset); + } + curr_offset++; + if (num_pfc == 0) + return (curr_offset-offset); - for (i = 0; i < num_pfc; i++) { - ti2 = proto_tree_add_text(tree, tvb, curr_offset, 1, "PFC (%u)", i + 1); - pfc_tree = proto_item_add_subtree(ti2, ett_bssgp_pfc_flow_control_parameters_pfc); + for (i = 0; i < num_pfc; i++) { + ti2 = proto_tree_add_text(tree, tvb, curr_offset, 1, "PFC (%u)", i + 1); + pfc_tree = proto_item_add_subtree(ti2, ett_bssgp_pfc_flow_control_parameters_pfc); - de_sm_pflow_id(tvb, pfc_tree, pinfo, curr_offset, 1, NULL, 0); - curr_offset++; + de_sm_pflow_id(tvb, pfc_tree, pinfo, curr_offset, 1, NULL, 0); + curr_offset++; - } + } - return(curr_offset-offset); + return(curr_offset-offset); } /* - * 11.3.96 Velocity Data + * 11.3.96 Velocity Data */ static guint16 de_bssgp_velocity_data(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len, gchar *add_string, int string_len) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - /* The rest of the information element contains an octet sequence - * identical to that for Description of Velocity defined in 3GPP TS - * 23.032. - */ - curr_offset = dissect_description_of_velocity(tvb, tree, pinfo, curr_offset, len, add_string, string_len); + /* The rest of the information element contains an octet sequence + * identical to that for Description of Velocity defined in 3GPP TS + * 23.032. + */ + curr_offset = dissect_description_of_velocity(tvb, tree, pinfo, curr_offset, len, add_string, string_len); - return(curr_offset-offset); + return(curr_offset-offset); } /* - * 11.3.97 DTM Handover Command + * 11.3.97 DTM Handover Command */ static guint16 de_bssgp_dtm_ho_cmd(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - /* Rest of element coded as a complete DTM Handover Command - * radio interface message as defined in 3GPP TS 44.060 (carrying - * the DTM Handover to A/Gb Mode Payload) - */ - proto_tree_add_text(tree, tvb, curr_offset, len, "DTM Handover Command data"); + /* Rest of element coded as a complete DTM Handover Command + * radio interface message as defined in 3GPP TS 44.060 (carrying + * the DTM Handover to A/Gb Mode Payload) + */ + proto_tree_add_text(tree, tvb, curr_offset, len, "DTM Handover Command data"); - return(len); + return(len); } /* - * 11.3.98 CS Indication + * 11.3.98 CS Indication */ static guint16 de_bssgp_cs_indication(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - /* CS Indication Contents - * CS Indication Contents: This identifies a particular handover attempt for this MS. This shall be identical to the PS - * Indication Contents value in the corresponding PS Indication IE included in the Old BSS to New BSS Information IE - * (see 3GPP TS 48.008). The choice of the value of this field is implementation specific, with the requirement that - * consecutive handover attempts for the same mobile station shall not have the same CS Indication Contents value. - */ - proto_tree_add_item(tree, hf_bssgp_cs_indication, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - curr_offset++; + /* CS Indication Contents + * CS Indication Contents: This identifies a particular handover attempt for this MS. This shall be identical to the PS + * Indication Contents value in the corresponding PS Indication IE included in the Old BSS to New BSS Information IE + * (see 3GPP TS 48.008). The choice of the value of this field is implementation specific, with the requirement that + * consecutive handover attempts for the same mobile station shall not have the same CS Indication Contents value. + */ + proto_tree_add_item(tree, hf_bssgp_cs_indication, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + curr_offset++; - return(curr_offset-offset); + return(curr_offset-offset); } /* - * 11.3.99 Requested GANSS Assistance Data + * 11.3.99 Requested GANSS Assistance Data */ /* Rest of element coded as the value part defined in * 3GPP TS 49.031, not including 3GPP TS 49.031 IEI and * 3GPP TS 49.031 octet length indicator */ /* - * 11.3.100 GANSS Location Type + * 11.3.100 GANSS Location Type */ /* Rest of element coded as the value part defined in * 3GPP TS 49.031, not including 3GPP TS 49.031 IEI and * 3GPP TS 49.031 octet length indicator */ /* - * 11.3.101 GANSS Positioning Data + * 11.3.101 GANSS Positioning Data */ /* Rest of element coded as the value part defined in * 3GPP TS 49.031, not including 3GPP TS 49.031 IEI and * 3GPP TS 49.031 octet length indicator */ /* - * 11.3.102 Flow Control Granularity + * 11.3.102 Flow Control Granularity */ static const value_string bssgp_flow_control_gran_vals[] = { { 0, "100 octets or bits/s increments" }, { 1, "1000 octets or bits/s increments" }, { 2, "10000 octets or bits/s increments" }, - { 3, "100000 octets or bits/s increments" }, - { 0, NULL }, - }; + { 3, "100000 octets or bits/s increments" }, + { 0, NULL }, +}; static guint16 de_bssgp_flow_control_gran(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - /* Granularity */ - proto_tree_add_item(tree, hf_bssgp_flow_control_gran, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - curr_offset++; + /* Granularity */ + proto_tree_add_item(tree, hf_bssgp_flow_control_gran, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + curr_offset++; - return(curr_offset-offset); + return(curr_offset-offset); } /* - * 11.3.103 eNB Identifier + * 11.3.103 eNB Identifier */ static guint16 de_bssgp_enb_id(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len _U_, gchar *add_string, int string_len) { - tvbuff_t *new_tvb; - guint32 curr_offset; + tvbuff_t *new_tvb; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - /* Octets 3 to 7 contain the value part (starting with octet 2) of the - * Tracking Area Identity IE defined in 3GPP TS 24.301 [37], not - * including 3GPP TS 24.301 IEI [37] - */ - curr_offset = curr_offset+ de_emm_trac_area_id(tvb, tree, pinfo, curr_offset, 5, add_string, string_len); + /* Octets 3 to 7 contain the value part (starting with octet 2) of the + * Tracking Area Identity IE defined in 3GPP TS 24.301 [37], not + * including 3GPP TS 24.301 IEI [37] + */ + curr_offset = curr_offset+ de_emm_trac_area_id(tvb, tree, pinfo, curr_offset, 5, add_string, string_len); - /* Octets 8-n contain the Global eNB ID (see 3GPP TS 36.413) of the eNodeB. */ - new_tvb = tvb_new_subset_remaining(tvb, curr_offset); - dissect_s1ap_Global_ENB_ID_PDU(new_tvb, gpinfo, tree); + /* Octets 8-n contain the Global eNB ID (see 3GPP TS 36.413) of the eNodeB. */ + new_tvb = tvb_new_subset_remaining(tvb, curr_offset); + dissect_s1ap_Global_ENB_ID_PDU(new_tvb, gpinfo, tree); - return(len); + return(len); } /* - * 11.3.104 E-UTRAN Inter RAT Handover Info + * 11.3.104 E-UTRAN Inter RAT Handover Info */ static guint16 de_bssgp_e_utran_inter_rat_ho_info(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - tvbuff_t *new_tvb; - guint32 curr_offset; + tvbuff_t *new_tvb; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - new_tvb = tvb_new_subset_remaining(tvb, curr_offset); - /* - * Formatted and coded according to the UE-EUTRA-Capability IE - * defined in 3GPP Technical Specification 36.331. The most - * significant bit of the first octet of the octet string contains bit 8 of - * the first octet of the IE. - */ - dissect_lte_rrc_UE_EUTRA_Capability_PDU(new_tvb, gpinfo, tree); + new_tvb = tvb_new_subset_remaining(tvb, curr_offset); + /* + * Formatted and coded according to the UE-EUTRA-Capability IE + * defined in 3GPP Technical Specification 36.331. The most + * significant bit of the first octet of the octet string contains bit 8 of + * the first octet of the IE. + */ + dissect_lte_rrc_UE_EUTRA_Capability_PDU(new_tvb, gpinfo, tree); - return(len); + return(len); } /* - * 11.3.105 Subscriber Profile ID for RAT/Frequency priority + * 11.3.105 Subscriber Profile ID for RAT/Frequency priority */ static guint16 de_bssgp_sub_prof_id_f_rat_freq_prio(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; - guint8 value; + guint32 curr_offset; + guint8 value; - curr_offset = offset; + curr_offset = offset; - /* Octet 3 contains a number in binary representation ranging from 0 to 255. - * The Subscriber Profile ID for RAT/Frequency priority is given by - * the indicated value +1. - */ - value = tvb_get_guint8(tvb,curr_offset) + 1; - proto_tree_add_uint(tree, hf_bssgp_sub_prof_id_f_rat_freq_prio, tvb, curr_offset, 1, value); - curr_offset++; + /* Octet 3 contains a number in binary representation ranging from 0 to 255. + * The Subscriber Profile ID for RAT/Frequency priority is given by + * the indicated value +1. + */ + value = tvb_get_guint8(tvb,curr_offset) + 1; + proto_tree_add_uint(tree, hf_bssgp_sub_prof_id_f_rat_freq_prio, tvb, curr_offset, 1, value); + curr_offset++; - return(curr_offset-offset); + return(curr_offset-offset); } /* - * 11.3.106 Request for Inter-RAT Handover Info + * 11.3.106 Request for Inter-RAT Handover Info */ static guint16 de_bssgp_req_for_inter_rat_ho_inf(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - /*octet 3 Spare E-UTRAN Inter RAT Handover Info Req Inter RAT Handover Info Req */ - proto_tree_add_item(tree, hf_bssgp_eutran_irat_ho_inf_req, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - proto_tree_add_item(tree, hf_bssgp_irat_ho_inf_req, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - curr_offset++; + /*octet 3 Spare E-UTRAN Inter RAT Handover Info Req Inter RAT Handover Info Req */ + proto_tree_add_item(tree, hf_bssgp_eutran_irat_ho_inf_req, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + proto_tree_add_item(tree, hf_bssgp_irat_ho_inf_req, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + curr_offset++; - return(curr_offset-offset); + return(curr_offset-offset); } /* - * 11.3.107 Reliable Inter-RAT Handover Info + * 11.3.107 Reliable Inter-RAT Handover Info */ static guint16 de_bssgp_reliable_inter_rat_ho_inf(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - /* Reliable Inter RAT Handover Info Indicator */ - proto_tree_add_item(tree, hf_bssgp_rel_int_rat_ho_inf_ind, tvb, curr_offset, 1, ENC_BIG_ENDIAN); - curr_offset++; + /* Reliable Inter RAT Handover Info Indicator */ + proto_tree_add_item(tree, hf_bssgp_rel_int_rat_ho_inf_ind, tvb, curr_offset, 1, ENC_BIG_ENDIAN); + curr_offset++; - return(curr_offset-offset); + return(curr_offset-offset); } /* - * 11.3.108 SON Transfer Application Identity + * 11.3.108 SON Transfer Application Identity */ static guint16 de_bssgp_son_transfer_app_id(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset _U_, guint len _U_, gchar *add_string _U_, int string_len _U_) { - /* SON Transfer Application Identity: This field is encoded as the SON Transfer Application Identity IE - * as defined in 3GPP TS 36.413 - */ - dissect_s1ap_SONtransferApplicationIdentity_PDU(tvb, gpinfo, tree); + /* SON Transfer Application Identity: This field is encoded as the SON Transfer Application Identity IE + * as defined in 3GPP TS 36.413 + */ + dissect_s1ap_SONtransferApplicationIdentity_PDU(tvb, gpinfo, tree); - return(len); + return(len); } /* - * 11.3.109 CSG Identifier + * 11.3.109 CSG Identifier */ /* Cell Access Mode (bit 1 of octet 7) */ static const value_string bssgp_cell_access_mode_vals[] = { { 0, "CSG cell" }, { 1, "Hybrid cell" }, - { 0, NULL }, + { 0, NULL }, }; static guint16 de_bssgp_csg_id(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - /* Octets 3 to 6 contain the CSG Identity (CSG-ID) of the cell (defined in - * 3GPP TS 23.003) as reported by the mobile station (see 3GPP TS - * 44.060). Bits 4 to 8 of octet 6 are spare and set to zero. - */ - proto_tree_add_item(tree, hf_bssgp_csg_id, tvb, curr_offset, 4, ENC_BIG_ENDIAN); - curr_offset+=4; - /* Cell Access Mode */ - proto_tree_add_item(tree, hf_bssgp_cell_acc_mode, tvb, curr_offset, 4, ENC_BIG_ENDIAN); - curr_offset++; + /* Octets 3 to 6 contain the CSG Identity (CSG-ID) of the cell (defined in + * 3GPP TS 23.003) as reported by the mobile station (see 3GPP TS + * 44.060). Bits 4 to 8 of octet 6 are spare and set to zero. + */ + proto_tree_add_item(tree, hf_bssgp_csg_id, tvb, curr_offset, 4, ENC_BIG_ENDIAN); + curr_offset+=4; + /* Cell Access Mode */ + proto_tree_add_item(tree, hf_bssgp_cell_acc_mode, tvb, curr_offset, 4, ENC_BIG_ENDIAN); + curr_offset++; - return(curr_offset-offset); + return(curr_offset-offset); } /* - * 11.3.110 Tracking Area Code + * 11.3.110 Tracking Area Code */ /* * Octets 3 to 5 contain the value part (starting with octet 2) of the TAC * IE defined in 3GPP TS 24.301. */ /* - * 11.3.111 Redirect Attempt Flag - * 11.3.112 Redirection Indication - * 11.3.113 Redirection Completed + * 11.3.111 Redirect Attempt Flag + * 11.3.112 Redirection Indication + * 11.3.113 Redirection Completed */ const value_string bssgp_elem_strings[] = { - { 0x00, "Alignment Octets" }, /* 11.3.1 Alignment octets */ - { 0x01, "Bmax default MS" }, /* 11.3.2 Bmax default MS */ - { 0x02, "BSS Area Indication" }, /* 11.3.3 BSS Area Indication */ - { 0x03, "Bucket Leak Rate (R)" }, /* 11.3.4 Bucket Leak Rate (R) */ - { 0x04, "BVCI (BSSGP Virtual Connection Identifier)" }, /* 11.3.6 BVCI (BSSGP Virtual Connection Identifier) */ - { 0x05, "BVC Bucket size" }, /* 11.3.5 BVC Bucket Size */ - { 0x06, "BVC Measurement" }, /* 11.3.7 BVC Measurement */ - { 0x07, "Cause" }, /* 11.3.8 Cause */ - { 0x08, "Cell Identifier" }, /* 11.3.9 Cell Identifier */ - { 0x09, "Channel needed" }, /* 11.3.10 Channel needed */ - { 0x0a, "DRX Parameters" }, /* 11.3.11 DRX Parameters */ - { 0x0b, "eMLPP-Priority" }, /* 11.3.12 eMLPP-Priority */ - { 0x0c, "Flush Action" }, /* 11.3.13 Flush Action */ - { 0x0d, "IMSI" }, /* 11.3.14 IMSI */ - { 0x0e, "LLC-PDU" }, /* 11.3.15 LLC-PDU */ - { 0x0f, "LLC Frames Discarded" }, /* 11.3.16 LLC Frames Discarded */ - { 0x10, "Location Area" }, /* 11.3.17 Location Area */ - { 0x11, "Mobile Id" }, /* 11.3.20 Mobile Id */ - { 0x12, "MS Bucket Size" }, /* 11.3.21 MS Bucket Size */ - { 0x13, "MS Radio Access Capability" }, /* 11.3.22 MS Radio Access Capability GSM_A_PDU_TYPE_GM, DE_MS_RAD_ACC_CAP */ - { 0x14, "OMC Id" }, /* 11.3.23 OMC Id */ - { 0x15, "PDU In Error" }, /* 11.3.24 PDU In Error */ - { 0x16, "PDU Lifetime" }, /* 11.3.25 PDU Lifetime */ - { 0x17, "Priority" }, /* 11.3.27 Priority */ - { 0x18, "QoS Profile" }, /* 11.3.28 QoS Profile */ - { 0x19, "Radio Cause" }, /* 11.3.29 Radio Cause */ - { 0x1a, "RA-Cap-UPD-Cause" }, /* 11.3.30 RA-Cap-UPD-Cause */ - { 0x1b, "Routeing Area" }, /* 11.3.31 Routeing Area */ - { 0x1c, "R_default_MS" }, /* 11.3.32 R_default_MS */ - { 0x1d, "Suspend Reference Number" }, /* 11.3.33 Suspend Reference Number */ - { 0x1e, "Tag" }, /* 11.3.34 Tag */ - { 0x1f, "Temporary logical link Identity (TLLI)" }, /* 11.3.35 Temporary logical link Identity (TLLI) GSM_A_PDU_TYPE_RR, DE_RR_TLLI*/ - { 0x20, "Temporary Mobile Subscriber Identity (TMSI)" }, /* 11.3.36 Temporary Mobile Subscriber Identity (TMSI)GSM_A_PDU_TYPE_RR, DE_RR_TMSI_PTMSI */ - { 0x21, "Trace Reference" }, /* 11.3.37 Trace Reference */ - { 0x22, "Trace Type" }, /* 11.3.38 Trace Type */ - { 0x23, "Transaction Id" }, /* 11.3.39 Transaction Id */ - { 0x24, "Trigger Id" }, /* 11.3.40 Trigger Id */ - { 0x25, "Number of octets affected" }, /* 11.3.41 Number of octets affected */ - { 0x26, "LSA Identifier List" }, /* 11.3.18 LSA Identifier List */ - { 0x27, "LSA Information" }, /* 11.3.19 LSA Information */ - { 0x28, "Packet Flow Identifier (PFI)" }, /* 11.3.42 Packet Flow Identifier (PFI) GSM_A_PDU_TYPE_GM, DE_PACKET_FLOW_ID*/ - /* 11.3.42a (void) */ - { 0x29, "GPRS Timer" }, /* 11.3.44 GPRS Timer */ - { 0x3a, "Aggregate BSS QoS Profile" }, /* 11.3.43 Aggregate BSS QoS Profile GSM_A_PDU_TYPE_GM, DE_QOS*/ - { 0x3b, "Feature Bitmap" }, /* 11.3.45 Feature Bitmap */ - { 0x3c, "Bucket Full Ratio" }, /* 11.3.46 Bucket Full Ratio */ - { 0x3d, "Service UTRAN CCO" }, /* 11.3.47 Service UTRAN CCO */ - { 0x3e, "NSEI (Network Service Entity Identifier)" }, /* 11.3.48 NSEI (Network Service Entity Identifier) */ - { 0x00, "RRLP APDU" }, /* 11.3.49 RRLP APDU */ - /* 11.3.50 LCS QoS BSSGP_IEI_LCS_QOS, GSM_PDU_TYPE_BSSMAP_LE, DE_BMAPLE_LCSQOS*/ - /* 11.3.51 LCS Client Type BSSGP_IEI_LCS_CLIENT_TYPE, GSM_PDU_TYPE_BSSMAP_LE, DE_BMAPLE_LCS_CLIENT_TYPE*/ - /* 11.3.52 Requested GPS Assistance Data BSSGP_IEI_REQUESTED_GPS_ASSISTANCE_DATA, GSM_PDU_TYPE_BSSMAP_LE, DE_BMAPLE_REQ_GPS_ASSIST_D*/ - /* 11.3.53 Location Type 0x7c, GSM_PDU_TYPE_BSSMAP_LE, DE_BMAPLE_GANSS_LOC_TYPE*/ - /* 11.3.54 Location Estimate BSSGP_IEI_LOCATION_ESTIMATE, GSM_A_PDU_TYPE_BSSMAP, BE_LOC_EST*/ - /* 11.3.55 Positioning Data 0x7d, GSM_PDU_TYPE_BSSMAP_LE, DE_BMAPLE_POS_DATA*/ - /* 11.3.56 Deciphering Keys BSSGP_IEI_DECIPHERING_KEYS, GSM_PDU_TYPE_BSSMAP_LE, DE_BMAPLE_DECIPH_KEYS */ - /* 11.3.57 LCS Priority BSSGP_IEI_LCS_PRIORITY, GSM_A_PDU_TYPE_BSSMAP, BE_LCS_PRIO;*/ - /* 11.3.58 LCS Cause BSSGP_IEI_LCS_CAUSE, GSM_PDU_TYPE_BSSMAP_LE, DE_BMAPLE_LCS_CAUSE */ - /* 11.3.59 LCS Capability 0x49 , GSM_A_PDU_TYPE_GM, DE_PS_LCS_CAP*/ - { 0x00, "RRLP Flags" }, /* 11.3.60 RRLP Flags */ - { 0x00, "RIM Application Identity" }, /* 11.3.61 RIM Application Identity */ - { 0x00, "RIM Sequence Number" }, /* 11.3.62 RIM Sequence Number */ - /* 11.3.62a RIM Container */ - /* 11.3.62a.0 General */ - { 0x00, "RAN-INFORMATION-REQUEST RIM Container" }, /* 11.3.62a.1 RAN-INFORMATION-REQUEST RIM Container */ - { 0x00, "RAN-INFORMATION RIM Container" }, /* 11.3.62a.2 RAN-INFORMATION RIM Container */ - { 0x00, "RAN-INFORMATION-ACK RIM Container" }, /* 11.3.62a.3 RAN-INFORMATION-ACK RIM Container */ - { 0x00, "RAN-INFORMATION-ERROR RIM Container" }, /* 11.3.62a.4 RAN-INFORMATION-ERROR RIM Container */ - { 0x00, "RAN-INFORMATION-APPLICATION-ERROR RIM Container" }, /* 11.3.62a.5 RAN-INFORMATION-APPLICATION-ERROR RIM Container */ - /* 11.3.63 Application Container */ - { 0x00, "RAN-INFORMATION-REQUEST Application Container" }, /* 11.3.63.1 RAN-INFORMATION-REQUEST Application Container */ - /* 11.3.63.1.0 General */ - /* 11.3.63.1.1 RAN-INFORMATION-REQUEST Application Container for the NACC Application */ - /* 11.3.63.1.2 RAN-INFORMATION-REQUEST Application Container for the SI3 Application */ - /* 11.3.63.1.3 RAN-INFORMATION-REQUEST Application Container for the MBMS data channel Application */ - /* 11.3.63.1.4 RAN-INFORMATION-REQUEST Application Container for the SON Transfer Application */ - { 0x00, "RAN-INFORMATION Application Container Unit" }, /* 11.3.63.2 RAN-INFORMATION Application Container Unit */ - /* 11.3.63.2.0 General */ - /* 11.3.63.2.1 RAN-INFORMATION Application Container for the NACC Application */ - /* 11.3.63.2.2 RAN-INFORMATION Application Container for the SI3 Application */ - /* 11.3.63.2.3 RAN-INFORMATION Application Container for the MBMS data channel Application */ - /* 11.3.63.2.4 RAN-INFORMATION Application Container for the SON Transfer Application */ - { 0x00, "Application Error Container" }, /* 11.3.64 Application Error Container */ - /* 11.3.64.1 Application Error Container layout for the NACC application */ - /* 11.3.64.2 Application Error Container for the SI3 application */ - /* 11.3.64.3 Application Error Container for the MBMS data channel application */ - /* 11.3.64.4 Application Error Container for the SON Transfer Application */ - { 0x00, "RIM PDU Indications" }, /* 11.3.65 RIM PDU Indications */ - /* 11.3.65.0 General */ - /* 11.3.65.1 RAN-INFORMATION-REQUEST RIM PDU Indications */ - /* 11.3.65.2 RAN-INFORMATION RIM PDU Indications */ - /* 11.3.65.3 RAN-INFORMATION-APPLICATION-ERROR RIM PDU Indications */ - /* 11.3.66 (void) */ - { 0x00, "RIM Protocol Version Number" }, /* 11.3.67 RIM Protocol Version Number */ - { 0x00, "PFC Flow Control parameters" }, /* 11.3.68 PFC Flow Control parameters */ - /* 0x53, SGSAP_PDU_TYPE, DE_SGSAP_GLOBAL_CN_ID */ /* 11.3.69 Global CN-Id */ - { 0x00, "RIM Routing Information" }, /* 11.3.70 RIM Routing Information */ - { 0x00, "MBMS Session Identity" }, /* 11.3.71 MBMS Session Identity */ - { 0x00, "MBMS Session Duration" }, /* 11.3.72 MBMS Session Duration */ - { 0x00, "MBMS Service Area Identity List" }, /* 11.3.73 MBMS Service Area Identity List */ - { 0x00, "MBMS Response" }, /* 11.3.74 MBMS Response */ - { 0x00, "MBMS Routing Area List" }, /* 11.3.75 MBMS Routing Area List */ - { 0x00, "MBMS Session Information" }, /* 11.3.76 MBMS Session Information */ - /* ELEM_MAND_TELV(GSM_A_PDU_TYPE_GM, DE_TMGI, */ /* 11.3.77 TMGI (Temporary Mobile Group Identity) */ - { 0x00, "MBMS Stop Cause" }, /* 11.3.78 MBMS Stop Cause */ - { 0x00, "Source BSS to Target BSS Transparent Container" }, /* 11.3.79 Source BSS to Target BSS Transparent Container */ - { 0x00, "Target BSS to Source BSS Transparent Container" }, /* 11.3.80 Target BSS to Source BSS Transparent Container */ - /* 11.3.81 NAS container for PS Handover */ - { 0x00, "PFCs to be set-up list" }, /* 11.3.82 PFCs to be set-up list */ - { 0x00, "List of set-up PFCs" }, /* 11.3.83 List of set-up PFCs */ - { 0x00, "Extended Feature Bitmap" }, /* 11.3.84 Extended Feature Bitmap */ - { 0x00, "Source to Target Transparent Container" }, /* 11.3.85 Source to Target Transparent Container */ - { 0x00, "Target to Source Transparent Container" }, /* 11.3.86 Target to Source Transparent Container */ - { 0x00, "RNC Identifier" }, /* 11.3.87 RNC Identifier */ - { 0x00, "Page Mode" }, /* 11.3.88 Page Mode */ - { 0x00, "Container ID" }, /* 11.3.89 Container ID */ - { 0x00, "Global TFI" }, /* 11.3.90 Global TFI */ - /* 11.3.91 IMEI */ - { 0x00, "Time to MBMS Data Transfer" }, /* 11.3.92 Time to MBMS Data Transfer */ - { 0x00, "MBMS Session Repetition Number" }, /* 11.3.93 MBMS Session Repetition Number */ - { 0x00, "Inter RAT Handover Info" }, /* 11.3.94 Inter RAT Handover Info */ - { 0x00, "PS Handover Command" }, /* 11.3.95 PS Handover Command */ - { 0x00, "PS Handover Indications" }, /* 11.3.95a PS Handover Indications */ - { 0x00, "SI/PSI Container" }, /* 11.3.95b SI/PSI Container */ - { 0x00, "Active PFCs List" }, /* 11.3.95c Active PFCs List */ - { 0x00, "Velocity Data" }, /* 11.3.96 Velocity Data */ - { 0x00, "DTM Handover Command" }, /* 11.3.97 DTM Handover Command */ - { 0x00, "PS Handover Indications" }, /* 11.3.98 CS Indication */ - /* 11.3.99 Requested GANSS Assistance Data 0x7b, GSM_A_PDU_TYPE_BSSMAP, BE_GANSS_ASS_DTA*/ - /* 11.3.100 GANSS Location Type 0x7c, GSM_A_PDU_TYPE_BSSMAP, BE_GANSS_LOC_TYP*/ - /* 11.3.101 GANSS Positioning Data ENC_BIG_ENDIAN);*/ - { 0x00, "Flow Control Granularity" }, /* 11.3.102 Flow Control Granularity */ - { 0x00, "eNB Identifier" }, /* 11.3.103 eNB Identifier */ - { 0x00, "E-UTRAN Inter RAT Handover Info" }, /* 11.3.104 E-UTRAN Inter RAT Handover Info */ - { 0x00, "Subscriber Profile ID for RAT/Frequency priority" }, /* 11.3.105 Subscriber Profile ID for RAT/Frequency priority */ - { 0x00, "Request for Inter-RAT Handover Info" }, /* 11.3.106 Request for Inter-RAT Handover Info */ - { 0x00, "Reliable Inter-RAT Handover Info" }, /* 11.3.107 Reliable Inter-RAT Handover Info */ - { 0x00, "Reliable Inter-RAT Handover Info" }, /* 11.3.108 SON Transfer Application Identity */ - { 0x00, "CSG Identifier" }, /* 11.3.109 CSG Identifier */ + { 0x00, "Alignment Octets" }, /* 11.3.1 Alignment octets */ + { 0x01, "Bmax default MS" }, /* 11.3.2 Bmax default MS */ + { 0x02, "BSS Area Indication" }, /* 11.3.3 BSS Area Indication */ + { 0x03, "Bucket Leak Rate (R)" }, /* 11.3.4 Bucket Leak Rate (R) */ + { 0x04, "BVCI (BSSGP Virtual Connection Identifier)" }, /* 11.3.6 BVCI (BSSGP Virtual Connection Identifier) */ + { 0x05, "BVC Bucket size" }, /* 11.3.5 BVC Bucket Size */ + { 0x06, "BVC Measurement" }, /* 11.3.7 BVC Measurement */ + { 0x07, "Cause" }, /* 11.3.8 Cause */ + { 0x08, "Cell Identifier" }, /* 11.3.9 Cell Identifier */ + { 0x09, "Channel needed" }, /* 11.3.10 Channel needed */ + { 0x0a, "DRX Parameters" }, /* 11.3.11 DRX Parameters */ + { 0x0b, "eMLPP-Priority" }, /* 11.3.12 eMLPP-Priority */ + { 0x0c, "Flush Action" }, /* 11.3.13 Flush Action */ + { 0x0d, "IMSI" }, /* 11.3.14 IMSI */ + { 0x0e, "LLC-PDU" }, /* 11.3.15 LLC-PDU */ + { 0x0f, "LLC Frames Discarded" }, /* 11.3.16 LLC Frames Discarded */ + { 0x10, "Location Area" }, /* 11.3.17 Location Area */ + { 0x11, "Mobile Id" }, /* 11.3.20 Mobile Id */ + { 0x12, "MS Bucket Size" }, /* 11.3.21 MS Bucket Size */ + { 0x13, "MS Radio Access Capability" }, /* 11.3.22 MS Radio Access Capability GSM_A_PDU_TYPE_GM, DE_MS_RAD_ACC_CAP */ + { 0x14, "OMC Id" }, /* 11.3.23 OMC Id */ + { 0x15, "PDU In Error" }, /* 11.3.24 PDU In Error */ + { 0x16, "PDU Lifetime" }, /* 11.3.25 PDU Lifetime */ + { 0x17, "Priority" }, /* 11.3.27 Priority */ + { 0x18, "QoS Profile" }, /* 11.3.28 QoS Profile */ + { 0x19, "Radio Cause" }, /* 11.3.29 Radio Cause */ + { 0x1a, "RA-Cap-UPD-Cause" }, /* 11.3.30 RA-Cap-UPD-Cause */ + { 0x1b, "Routeing Area" }, /* 11.3.31 Routeing Area */ + { 0x1c, "R_default_MS" }, /* 11.3.32 R_default_MS */ + { 0x1d, "Suspend Reference Number" }, /* 11.3.33 Suspend Reference Number */ + { 0x1e, "Tag" }, /* 11.3.34 Tag */ + { 0x1f, "Temporary logical link Identity (TLLI)" }, /* 11.3.35 Temporary logical link Identity (TLLI) GSM_A_PDU_TYPE_RR, DE_RR_TLLI*/ + { 0x20, "Temporary Mobile Subscriber Identity (TMSI)" }, /* 11.3.36 Temporary Mobile Subscriber Identity (TMSI)GSM_A_PDU_TYPE_RR, DE_RR_TMSI_PTMSI */ + { 0x21, "Trace Reference" }, /* 11.3.37 Trace Reference */ + { 0x22, "Trace Type" }, /* 11.3.38 Trace Type */ + { 0x23, "Transaction Id" }, /* 11.3.39 Transaction Id */ + { 0x24, "Trigger Id" }, /* 11.3.40 Trigger Id */ + { 0x25, "Number of octets affected" }, /* 11.3.41 Number of octets affected */ + { 0x26, "LSA Identifier List" }, /* 11.3.18 LSA Identifier List */ + { 0x27, "LSA Information" }, /* 11.3.19 LSA Information */ + { 0x28, "Packet Flow Identifier (PFI)" }, /* 11.3.42 Packet Flow Identifier (PFI) GSM_A_PDU_TYPE_GM, DE_PACKET_FLOW_ID*/ + /* 11.3.42a (void) */ + { 0x29, "GPRS Timer" }, /* 11.3.44 GPRS Timer */ + { 0x3a, "Aggregate BSS QoS Profile" }, /* 11.3.43 Aggregate BSS QoS Profile GSM_A_PDU_TYPE_GM, DE_QOS*/ + { 0x3b, "Feature Bitmap" }, /* 11.3.45 Feature Bitmap */ + { 0x3c, "Bucket Full Ratio" }, /* 11.3.46 Bucket Full Ratio */ + { 0x3d, "Service UTRAN CCO" }, /* 11.3.47 Service UTRAN CCO */ + { 0x3e, "NSEI (Network Service Entity Identifier)" }, /* 11.3.48 NSEI (Network Service Entity Identifier) */ + { 0x00, "RRLP APDU" }, /* 11.3.49 RRLP APDU */ + /* 11.3.50 LCS QoS BSSGP_IEI_LCS_QOS, GSM_PDU_TYPE_BSSMAP_LE, DE_BMAPLE_LCSQOS*/ + /* 11.3.51 LCS Client Type BSSGP_IEI_LCS_CLIENT_TYPE, GSM_PDU_TYPE_BSSMAP_LE, DE_BMAPLE_LCS_CLIENT_TYPE*/ + /* 11.3.52 Requested GPS Assistance Data BSSGP_IEI_REQUESTED_GPS_ASSISTANCE_DATA, GSM_PDU_TYPE_BSSMAP_LE, DE_BMAPLE_REQ_GPS_ASSIST_D*/ + /* 11.3.53 Location Type 0x7c, GSM_PDU_TYPE_BSSMAP_LE, DE_BMAPLE_GANSS_LOC_TYPE*/ + /* 11.3.54 Location Estimate BSSGP_IEI_LOCATION_ESTIMATE, GSM_A_PDU_TYPE_BSSMAP, BE_LOC_EST*/ + /* 11.3.55 Positioning Data 0x7d, GSM_PDU_TYPE_BSSMAP_LE, DE_BMAPLE_POS_DATA*/ + /* 11.3.56 Deciphering Keys BSSGP_IEI_DECIPHERING_KEYS, GSM_PDU_TYPE_BSSMAP_LE, DE_BMAPLE_DECIPH_KEYS */ + /* 11.3.57 LCS Priority BSSGP_IEI_LCS_PRIORITY, GSM_A_PDU_TYPE_BSSMAP, BE_LCS_PRIO;*/ + /* 11.3.58 LCS Cause BSSGP_IEI_LCS_CAUSE, GSM_PDU_TYPE_BSSMAP_LE, DE_BMAPLE_LCS_CAUSE */ + /* 11.3.59 LCS Capability 0x49 , GSM_A_PDU_TYPE_GM, DE_PS_LCS_CAP*/ + { 0x00, "RRLP Flags" }, /* 11.3.60 RRLP Flags */ + { 0x00, "RIM Application Identity" }, /* 11.3.61 RIM Application Identity */ + { 0x00, "RIM Sequence Number" }, /* 11.3.62 RIM Sequence Number */ + /* 11.3.62a RIM Container */ + /* 11.3.62a.0 General */ + { 0x00, "RAN-INFORMATION-REQUEST RIM Container" }, /* 11.3.62a.1 RAN-INFORMATION-REQUEST RIM Container */ + { 0x00, "RAN-INFORMATION RIM Container" }, /* 11.3.62a.2 RAN-INFORMATION RIM Container */ + { 0x00, "RAN-INFORMATION-ACK RIM Container" }, /* 11.3.62a.3 RAN-INFORMATION-ACK RIM Container */ + { 0x00, "RAN-INFORMATION-ERROR RIM Container" }, /* 11.3.62a.4 RAN-INFORMATION-ERROR RIM Container */ + { 0x00, "RAN-INFORMATION-APPLICATION-ERROR RIM Container" }, /* 11.3.62a.5 RAN-INFORMATION-APPLICATION-ERROR RIM Container */ + /* 11.3.63 Application Container */ + { 0x00, "RAN-INFORMATION-REQUEST Application Container" }, /* 11.3.63.1 RAN-INFORMATION-REQUEST Application Container */ + /* 11.3.63.1.0 General */ + /* 11.3.63.1.1 RAN-INFORMATION-REQUEST Application Container for the NACC Application */ + /* 11.3.63.1.2 RAN-INFORMATION-REQUEST Application Container for the SI3 Application */ + /* 11.3.63.1.3 RAN-INFORMATION-REQUEST Application Container for the MBMS data channel Application */ + /* 11.3.63.1.4 RAN-INFORMATION-REQUEST Application Container for the SON Transfer Application */ + { 0x00, "RAN-INFORMATION Application Container Unit" }, /* 11.3.63.2 RAN-INFORMATION Application Container Unit */ + /* 11.3.63.2.0 General */ + /* 11.3.63.2.1 RAN-INFORMATION Application Container for the NACC Application */ + /* 11.3.63.2.2 RAN-INFORMATION Application Container for the SI3 Application */ + /* 11.3.63.2.3 RAN-INFORMATION Application Container for the MBMS data channel Application */ + /* 11.3.63.2.4 RAN-INFORMATION Application Container for the SON Transfer Application */ + { 0x00, "Application Error Container" }, /* 11.3.64 Application Error Container */ + /* 11.3.64.1 Application Error Container layout for the NACC application */ + /* 11.3.64.2 Application Error Container for the SI3 application */ + /* 11.3.64.3 Application Error Container for the MBMS data channel application */ + /* 11.3.64.4 Application Error Container for the SON Transfer Application */ + { 0x00, "RIM PDU Indications" }, /* 11.3.65 RIM PDU Indications */ + /* 11.3.65.0 General */ + /* 11.3.65.1 RAN-INFORMATION-REQUEST RIM PDU Indications */ + /* 11.3.65.2 RAN-INFORMATION RIM PDU Indications */ + /* 11.3.65.3 RAN-INFORMATION-APPLICATION-ERROR RIM PDU Indications */ + /* 11.3.66 (void) */ + { 0x00, "RIM Protocol Version Number" }, /* 11.3.67 RIM Protocol Version Number */ + { 0x00, "PFC Flow Control parameters" }, /* 11.3.68 PFC Flow Control parameters */ + /* 0x53, SGSAP_PDU_TYPE, DE_SGSAP_GLOBAL_CN_ID */ /* 11.3.69 Global CN-Id */ + { 0x00, "RIM Routing Information" }, /* 11.3.70 RIM Routing Information */ + { 0x00, "MBMS Session Identity" }, /* 11.3.71 MBMS Session Identity */ + { 0x00, "MBMS Session Duration" }, /* 11.3.72 MBMS Session Duration */ + { 0x00, "MBMS Service Area Identity List" }, /* 11.3.73 MBMS Service Area Identity List */ + { 0x00, "MBMS Response" }, /* 11.3.74 MBMS Response */ + { 0x00, "MBMS Routing Area List" }, /* 11.3.75 MBMS Routing Area List */ + { 0x00, "MBMS Session Information" }, /* 11.3.76 MBMS Session Information */ + /* ELEM_MAND_TELV(GSM_A_PDU_TYPE_GM, DE_TMGI, */ /* 11.3.77 TMGI (Temporary Mobile Group Identity) */ + { 0x00, "MBMS Stop Cause" }, /* 11.3.78 MBMS Stop Cause */ + { 0x00, "Source BSS to Target BSS Transparent Container" }, /* 11.3.79 Source BSS to Target BSS Transparent Container */ + { 0x00, "Target BSS to Source BSS Transparent Container" }, /* 11.3.80 Target BSS to Source BSS Transparent Container */ + /* 11.3.81 NAS container for PS Handover */ + { 0x00, "PFCs to be set-up list" }, /* 11.3.82 PFCs to be set-up list */ + { 0x00, "List of set-up PFCs" }, /* 11.3.83 List of set-up PFCs */ + { 0x00, "Extended Feature Bitmap" }, /* 11.3.84 Extended Feature Bitmap */ + { 0x00, "Source to Target Transparent Container" }, /* 11.3.85 Source to Target Transparent Container */ + { 0x00, "Target to Source Transparent Container" }, /* 11.3.86 Target to Source Transparent Container */ + { 0x00, "RNC Identifier" }, /* 11.3.87 RNC Identifier */ + { 0x00, "Page Mode" }, /* 11.3.88 Page Mode */ + { 0x00, "Container ID" }, /* 11.3.89 Container ID */ + { 0x00, "Global TFI" }, /* 11.3.90 Global TFI */ + /* 11.3.91 IMEI */ + { 0x00, "Time to MBMS Data Transfer" }, /* 11.3.92 Time to MBMS Data Transfer */ + { 0x00, "MBMS Session Repetition Number" }, /* 11.3.93 MBMS Session Repetition Number */ + { 0x00, "Inter RAT Handover Info" }, /* 11.3.94 Inter RAT Handover Info */ + { 0x00, "PS Handover Command" }, /* 11.3.95 PS Handover Command */ + { 0x00, "PS Handover Indications" }, /* 11.3.95a PS Handover Indications */ + { 0x00, "SI/PSI Container" }, /* 11.3.95b SI/PSI Container */ + { 0x00, "Active PFCs List" }, /* 11.3.95c Active PFCs List */ + { 0x00, "Velocity Data" }, /* 11.3.96 Velocity Data */ + { 0x00, "DTM Handover Command" }, /* 11.3.97 DTM Handover Command */ + { 0x00, "PS Handover Indications" }, /* 11.3.98 CS Indication */ + /* 11.3.99 Requested GANSS Assistance Data 0x7b, GSM_A_PDU_TYPE_BSSMAP, BE_GANSS_ASS_DTA*/ + /* 11.3.100 GANSS Location Type 0x7c, GSM_A_PDU_TYPE_BSSMAP, BE_GANSS_LOC_TYP*/ + /* 11.3.101 GANSS Positioning Data ENC_BIG_ENDIAN);*/ + { 0x00, "Flow Control Granularity" }, /* 11.3.102 Flow Control Granularity */ + { 0x00, "eNB Identifier" }, /* 11.3.103 eNB Identifier */ + { 0x00, "E-UTRAN Inter RAT Handover Info" }, /* 11.3.104 E-UTRAN Inter RAT Handover Info */ + { 0x00, "Subscriber Profile ID for RAT/Frequency priority" }, /* 11.3.105 Subscriber Profile ID for RAT/Frequency priority */ + { 0x00, "Request for Inter-RAT Handover Info" }, /* 11.3.106 Request for Inter-RAT Handover Info */ + { 0x00, "Reliable Inter-RAT Handover Info" }, /* 11.3.107 Reliable Inter-RAT Handover Info */ + { 0x00, "Reliable Inter-RAT Handover Info" }, /* 11.3.108 SON Transfer Application Identity */ + { 0x00, "CSG Identifier" }, /* 11.3.109 CSG Identifier */ /* 11.3.110 Tracking Area Code */ - { 0, NULL } + { 0, NULL } }; -#define NUM_BSSGP_ELEM (sizeof(bssgp_elem_strings)/sizeof(value_string)) +#define NUM_BSSGP_ELEM (sizeof(bssgp_elem_strings)/sizeof(value_string)) gint ett_bssgp_elem[NUM_BSSGP_ELEM]; typedef enum { - DE_BSSGP_ALIGNMENT_OCTETS, /* 11.3.1 0x00 Alignment octets */ - DE_BSSGP_BMAX_DEFAULT_MS, /* 11.3.2 0x01 Bmax default MS */ - DE_BSSGP_BSS_AREA_IND, /* 11.3.3 0x02 BSS Area Indication */ - DE_BSSGP_BUCKET_LEAK_RATE, /* 11.3.4 0x03 Bucket Leak Rate (R) */ - DE_BSSGP_BVCI, /* 11.3.6 0x04 BVCI (BSSGP Virtual Connection Identifier) */ - DE_BSSGP_BVC_BUCKET_SIZE, /* 11.3.5 0x05 BVC Bucket Size */ - DE_BSSGP_BVC_MEAS, /* 11.3.7 0x06 BVC Measurement */ - DE_BSSGP_CAUSE, /* 11.3.8 0x07 Cause */ - DE_BSSGP_CELL_ID, /* 11.3.9 0x08 Cell Identifier */ - DE_BSSGP_CHLN_NEEDED, /* 11.3.10 0x09 Channel needed */ - DE_BBSGP_DRX_PARAM, /* 11.3.11 0x0a DRX Parameters GSM_A_PDU_TYPE_GM, DE_DRX_PARAM */ - DE_BBSGP_EMLPP_PRIO, /* 11.3.12 0x0b eMLPP-Priority GSM_A_PDU_TYPE_BSSMAP, BE_EMLPP_PRIO*/ - DE_BSSGP_FLUSH_ACTION, /* 11.3.13 0x0c Flush Action */ - DE_BSSGP_IMSI, /* 11.3.14 0x0d IMSI */ - DE_BSSGP_LLC_PDU, /* 11.3.15 0x0e LLC-PDU */ - DE_BSSGP_LLC_FRAMES_DISC, /* 11.3.16 0x0f LLC Frames Discarded */ - DE_BSSGP_LAI , /* 11.3.17 0x10 Location Area GSM_A_PDU_TYPE_COMMON, DE_LAI*/ - DE_BSSGP_MID, /* 11.3.20 0x11 Mobile Id GSM_A_PDU_TYPE_COMMON, DE_MID*/ - DE_BSSGP_MS_BUCKET_SIZE, /* 11.3.21 0x12 MS Bucket Size */ - DE_BSSGP_MS_RAD_ACC_CAP, /* 11.3.22 0x13 MS Radio Access Capability GSM_A_PDU_TYPE_GM, DE_MS_RAD_ACC_CAP*/ - DE_BSSGP_OMC_ID, /* 11.3.23 0x14 OMC Id */ - DE_BSSGP_PDU_IN_ERROR, /* 11.3.24 0x15 PDU In Error */ - DE_BSSGP_PDU_LIFETIME, /* 11.3.25 0x16 PDU Lifetime */ - DE_BSSP_PRIORITY, /* 11.3.27 0x17 Priority */ - DE_BSSGP_QOS_PROFILE, /* 11.3.28 0x18 QoS Profile */ - DE_BSSGP_RA_CAUSE, /* 11.3.29 0x19 Radio Cause */ - DE_BSSGP_RA_CAP_UPD_CAUSE, /* 11.3.30 0x1a RA-Cap-UPD-Cause */ - DE_BSSGP_RAI, /* 11.3.31 0x1b Routeing Area GSM_A_PDU_TYPE_GM, DE_RAI*/ - DE_BSSGP_R_DEFAULT_MS, /* 11.3.32 0x1c R_default_MS */ - DE_BBSGP_SUSPEND_REF_NO, /* 11.3.33 0x1d Suspend Reference Number */ - DE_BSSGP_TAG, /* 11.3.34 0x1e Tag */ - DE_BSSGP_TLLI, /* 11.3.35 0x1f Temporary logical link Identity (TLLI) GSM_A_PDU_TYPE_RR, DE_RR_TLLI*/ - DE_BSSGP_TMSI_PTMSI, /* 11.3.36 0x20 Temporary Mobile Subscriber Identity (TMSI) GSM_A_PDU_TYPE_RR, DE_RR_TMSI_PTMSI*/ - DE_BSSGP_TRACE_REF, /* 11.3.37 0x21 Trace Reference */ - DE_BSSGP_TRACE_TYPE, /* 11.3.38 0x22 Trace Type */ - DE_BSSGP_TRANSACTION_ID, /* 11.3.39 0x23 Transaction Id */ - DE_BSSGP_TRIGGER_ID, /* 11.3.40 0x24 Trigger Id */ - DE_BSSGP_NO_OF_OCT_AFFECTED, /* 11.3.41 0x25 Number of octets affected */ - DE_BSSGP_LSA_ID_LIST, /* 11.3.18 0x26 LSA Identifier List GSM_A_PDU_TYPE_BSSMAP, BE_LSA_ID_LIST*/ - DE_BSSGP_LSA_INFO, /* 11.3.19 0x27 LSA Information GSM_A_PDU_TYPE_BSSMAP, BE_LSA_INFO */ - DE_BSSGP_ACKET_FLOW_ID, /* 11.3.42 0x28 Packet Flow Identifier (PFI) GSM_A_PDU_TYPE_GM, DE_PACKET_FLOW_ID*/ - DE_BSSGP_GPRS_TIMER, /* 11.3.44 0x29 GPRS Timer */ - DE_BSSGP_QOS, /* 11.3.43 0x3a Aggregate BSS QoS Profile GSM_A_PDU_TYPE_GM, DE_QOS*/ - DE_BSSGP_FEATURE_BITMAP, /* 11.3.45 0x3b Feature Bitmap */ - DE_BSSGP_BUCKET_FULL_RATIO, /* 11.3.46 0x3c Bucket Full Ratio */ - DE_BSSGP_SERV_UTRAN_CCO, /* 11.3.47 0x3d Service UTRAN CCO */ - DE_BSSGP_NSEI, /* 11.3.48 0x3e NSEI (Network Service Entity Identifier) */ - DE_BSSGP_RRLP_APDU, /* 11.3.49 RRLP APDU */ - DE_BSSGP_RRLP_FLAGS, /* 11.3.60 RRLP Flags */ - DE_BSSGP_RIM_APP_ID, /* 11.3.61 RIM Application Identity */ - DE_BSSGP_RIM_SEQ_NO, /* 11.3.62 RIM Sequence Number */ - DE_BSSGP_RAN_INF_REQUEST_RIM_CONT, /* 11.3.62a.1 RAN-INFORMATION-REQUEST RIM Container */ - DE_BSSGP_RAN_INF_RIM_CONT, /* 11.3.62a.2 RAN-INFORMATION RIM Container */ - DE_BSSGP_RAN_INFORMATION_ACK_RIM_CONT, /* 11.3.62a.3 RAN-INFORMATION-ACK RIM Container */ - DE_BSSGP_RAN_INFORMATION_ERROR_RIM_CONT, /* 11.3.62a.4 RAN-INFORMATION-ERROR RIM Container */ - DE_BSSGP_RAN_INF_APP_ERROR_RIM_CONT, /* 11.3.62a.5 RAN-INFORMATION-APPLICATION-ERROR RIM Container */ - DE_BSSGP_RAN_INFORMATION_REQUEST_APP_CONT, /* 11.3.63.1 RAN-INFORMATION-REQUEST Application Container */ - DE_BSSGP_RAN_INFORMATION_APP_CONT_UNIT, /* 11.3.63.2 RAN-INFORMATION Application Container Unit */ - DE_BSSGP_RAN_APP_ERROR_CONT, /* 11.3.64 Application Error Container */ - DE_BSSGP_RIM_PDU_INDICATIONS, /* 11.3.65 RIM PDU Indications */ - DE_BSSGP_RIM_PROTO_VER_NO, /* 11.3.67 RIM Protocol Version Number */ - - DE_BSSGP_PFC_FLOW_CTRL, /* 11.3.68 PFC Flow Control parameters */ - DE_BSSGP_RIM_ROUTING_INF, /* 11.3.70 RIM Routing Information */ - - DE_BSSGP_MBMS_SESSION_ID, /* 11.3.71 MBMS Session Identity */ - DE_BSSGP_MBMS_SESSION_DUR, /* 11.3.72 MBMS Session Duration */ - DE_BSSGP_MBMS_SAI_LIST, /* 11.3.73 MBMS Service Area Identity List */ - DE_BSSGP_MBMS_RESPONSE, /* 11.3.74 MBMS Response */ - DE_BSSGP_MBMS_RA_LIST, /* 11.3.75 MBMS Routing Area List */ - DE_BSSGP_MBMS_SESSION_INF, /* 11.3.76 MBMS Session Information */ - - DE_BSSGP_TMGI, /* 11.3.77 TMGI (Temporary Mobile Group Identity) GSM_A_PDU_TYPE_GM, DE_TMGI*/ - DE_BSSGP_MBMS_STOP_CAUSE, /* 11.3.78 MBMS Stop Cause */ - DE_BSSGP_SOURCE_BSS_TO_TARGET_BSS_TRANSP_CONT, /* 11.3.79 Source BSS to Target BSS Transparent Container */ - DE_BSSGP_TARGET_BSS_TO_SOURCE_BSS_TRANSP_CONT, /* 11.3.80 Target BSS to Source BSS Transparent Container */ - DE_BSSGP_PFCS_TO_BE_SET_UP_LIST, /* 11.3.82 PFCs to be set-up list */ - DE_BSSGP_LIST_OF_SETUP_PFCS, /* 11.3.83 List of set-up PFCs */ - DE_BSSGP_EXT_FEATURE_BITMAP, /* 11.3.84 Extended Feature Bitmap */ - DE_BSSGP_SRC_TO_TRG_TRANSP_CONT, /* 11.3.85 Source to Target Transparent Container */ - DE_BSSGP_TRG_TO_SRC_TRANSP_CONT, /* 11.3.86 Target to Source Transparent Container */ - BE_BSSGP_RNC_ID, /* 11.3.87 RNC Identifier */ - DE_BSSGP_PAGE_MODE, /* 11.3.88 Page Mode */ - DE_BSSGP_CONTAINER_ID, /* 11.3.89 Container ID */ - DE_BSSGP_GLOBAL_TFI, /* 11.3.90 Global TFI */ - DE_BSSGP_TIME_TO_MBMS_DATA_TRAN, /* 11.3.92 Time to MBMS Data Transfer */ - DE_BSSGP_MBMS_SESSION_REP_NO, /* 11.3.93 MBMS Session Repetition Number */ - - DE_BSSGP_INTER_RAT_HO_INFO, /* 11.3.94 Inter RAT Handover Info */ - DE_BSSGP_PS_HO_CMD, /* 11.3.95 PS Handover Command */ - DE_BSSGP_PS_HO_INDICATIONS, /* 11.3.95a PS Handover Indications */ - DE_BSSGP_SIPSI_CONTAINER, /* 11.3.95b SI/PSI Container */ - DE_BSSGP_ACTIVE_PFCS_LIST, /* 11.3.95c Active PFCs List */ - DE_BSSGP_VELOCITY_DATA, /* 11.3.96 Velocity Data */ - DE_BBSGP_DTM_HO_CMD, /* 11.3.97 DTM Handover Command */ - DE_BSSGP_CS_INDICATION, /* 11.3.98 CS Indication */ - DE_BSSGP_FLOW_CONTROL_GRAN, /* 11.3.102 Flow Control Granularity */ - DE_BSSGP_ENB_ID, /* 11.3.103 eNB Identifier */ - DE_BSSGP_E_UTRAN_INTER_RAT_HO_INFO, /* 11.3.104 E-UTRAN Inter RAT Handover Info */ - DE_BSSGP_SUB_PROF_ID_F_RAT_FRQ_PRIO, /* 11.3.105 Subscriber Profile ID for RAT/Frequency priority */ - DE_BSSGP_REQ_FOR_INTER_RAT_HO_INFO, /* 11.3.106 Request for Inter-RAT Handover Info */ - DE_BSSGP_RELIABLE_INTER_RAT_HO_INF, /* 11.3.107 Reliable Inter-RAT Handover Info */ - DE_BSSGP_SON_TRANSFER_APP_ID, /* 11.3.108 SON Transfer Application Identity */ - DE_BSSGP_CSG_ID, /* 11.3.109 CSG Identifier */ - DE_BSSGP_NONE /* NONE */ + DE_BSSGP_ALIGNMENT_OCTETS, /* 11.3.1 0x00 Alignment octets */ + DE_BSSGP_BMAX_DEFAULT_MS, /* 11.3.2 0x01 Bmax default MS */ + DE_BSSGP_BSS_AREA_IND, /* 11.3.3 0x02 BSS Area Indication */ + DE_BSSGP_BUCKET_LEAK_RATE, /* 11.3.4 0x03 Bucket Leak Rate (R) */ + DE_BSSGP_BVCI, /* 11.3.6 0x04 BVCI (BSSGP Virtual Connection Identifier) */ + DE_BSSGP_BVC_BUCKET_SIZE, /* 11.3.5 0x05 BVC Bucket Size */ + DE_BSSGP_BVC_MEAS, /* 11.3.7 0x06 BVC Measurement */ + DE_BSSGP_CAUSE, /* 11.3.8 0x07 Cause */ + DE_BSSGP_CELL_ID, /* 11.3.9 0x08 Cell Identifier */ + DE_BSSGP_CHLN_NEEDED, /* 11.3.10 0x09 Channel needed */ + DE_BBSGP_DRX_PARAM, /* 11.3.11 0x0a DRX Parameters GSM_A_PDU_TYPE_GM, DE_DRX_PARAM */ + DE_BBSGP_EMLPP_PRIO, /* 11.3.12 0x0b eMLPP-Priority GSM_A_PDU_TYPE_BSSMAP, BE_EMLPP_PRIO*/ + DE_BSSGP_FLUSH_ACTION, /* 11.3.13 0x0c Flush Action */ + DE_BSSGP_IMSI, /* 11.3.14 0x0d IMSI */ + DE_BSSGP_LLC_PDU, /* 11.3.15 0x0e LLC-PDU */ + DE_BSSGP_LLC_FRAMES_DISC, /* 11.3.16 0x0f LLC Frames Discarded */ + DE_BSSGP_LAI , /* 11.3.17 0x10 Location Area GSM_A_PDU_TYPE_COMMON, DE_LAI*/ + DE_BSSGP_MID, /* 11.3.20 0x11 Mobile Id GSM_A_PDU_TYPE_COMMON, DE_MID*/ + DE_BSSGP_MS_BUCKET_SIZE, /* 11.3.21 0x12 MS Bucket Size */ + DE_BSSGP_MS_RAD_ACC_CAP, /* 11.3.22 0x13 MS Radio Access Capability GSM_A_PDU_TYPE_GM, DE_MS_RAD_ACC_CAP*/ + DE_BSSGP_OMC_ID, /* 11.3.23 0x14 OMC Id */ + DE_BSSGP_PDU_IN_ERROR, /* 11.3.24 0x15 PDU In Error */ + DE_BSSGP_PDU_LIFETIME, /* 11.3.25 0x16 PDU Lifetime */ + DE_BSSP_PRIORITY, /* 11.3.27 0x17 Priority */ + DE_BSSGP_QOS_PROFILE, /* 11.3.28 0x18 QoS Profile */ + DE_BSSGP_RA_CAUSE, /* 11.3.29 0x19 Radio Cause */ + DE_BSSGP_RA_CAP_UPD_CAUSE, /* 11.3.30 0x1a RA-Cap-UPD-Cause */ + DE_BSSGP_RAI, /* 11.3.31 0x1b Routeing Area GSM_A_PDU_TYPE_GM, DE_RAI*/ + DE_BSSGP_R_DEFAULT_MS, /* 11.3.32 0x1c R_default_MS */ + DE_BBSGP_SUSPEND_REF_NO, /* 11.3.33 0x1d Suspend Reference Number */ + DE_BSSGP_TAG, /* 11.3.34 0x1e Tag */ + DE_BSSGP_TLLI, /* 11.3.35 0x1f Temporary logical link Identity (TLLI) GSM_A_PDU_TYPE_RR, DE_RR_TLLI*/ + DE_BSSGP_TMSI_PTMSI, /* 11.3.36 0x20 Temporary Mobile Subscriber Identity (TMSI) GSM_A_PDU_TYPE_RR, DE_RR_TMSI_PTMSI*/ + DE_BSSGP_TRACE_REF, /* 11.3.37 0x21 Trace Reference */ + DE_BSSGP_TRACE_TYPE, /* 11.3.38 0x22 Trace Type */ + DE_BSSGP_TRANSACTION_ID, /* 11.3.39 0x23 Transaction Id */ + DE_BSSGP_TRIGGER_ID, /* 11.3.40 0x24 Trigger Id */ + DE_BSSGP_NO_OF_OCT_AFFECTED, /* 11.3.41 0x25 Number of octets affected */ + DE_BSSGP_LSA_ID_LIST, /* 11.3.18 0x26 LSA Identifier List GSM_A_PDU_TYPE_BSSMAP, BE_LSA_ID_LIST*/ + DE_BSSGP_LSA_INFO, /* 11.3.19 0x27 LSA Information GSM_A_PDU_TYPE_BSSMAP, BE_LSA_INFO */ + DE_BSSGP_ACKET_FLOW_ID, /* 11.3.42 0x28 Packet Flow Identifier (PFI) GSM_A_PDU_TYPE_GM, DE_PACKET_FLOW_ID*/ + DE_BSSGP_GPRS_TIMER, /* 11.3.44 0x29 GPRS Timer */ + DE_BSSGP_QOS, /* 11.3.43 0x3a Aggregate BSS QoS Profile GSM_A_PDU_TYPE_GM, DE_QOS*/ + DE_BSSGP_FEATURE_BITMAP, /* 11.3.45 0x3b Feature Bitmap */ + DE_BSSGP_BUCKET_FULL_RATIO, /* 11.3.46 0x3c Bucket Full Ratio */ + DE_BSSGP_SERV_UTRAN_CCO, /* 11.3.47 0x3d Service UTRAN CCO */ + DE_BSSGP_NSEI, /* 11.3.48 0x3e NSEI (Network Service Entity Identifier) */ + DE_BSSGP_RRLP_APDU, /* 11.3.49 RRLP APDU */ + DE_BSSGP_RRLP_FLAGS, /* 11.3.60 RRLP Flags */ + DE_BSSGP_RIM_APP_ID, /* 11.3.61 RIM Application Identity */ + DE_BSSGP_RIM_SEQ_NO, /* 11.3.62 RIM Sequence Number */ + DE_BSSGP_RAN_INF_REQUEST_RIM_CONT, /* 11.3.62a.1 RAN-INFORMATION-REQUEST RIM Container */ + DE_BSSGP_RAN_INF_RIM_CONT, /* 11.3.62a.2 RAN-INFORMATION RIM Container */ + DE_BSSGP_RAN_INFORMATION_ACK_RIM_CONT, /* 11.3.62a.3 RAN-INFORMATION-ACK RIM Container */ + DE_BSSGP_RAN_INFORMATION_ERROR_RIM_CONT, /* 11.3.62a.4 RAN-INFORMATION-ERROR RIM Container */ + DE_BSSGP_RAN_INF_APP_ERROR_RIM_CONT, /* 11.3.62a.5 RAN-INFORMATION-APPLICATION-ERROR RIM Container */ + DE_BSSGP_RAN_INFORMATION_REQUEST_APP_CONT, /* 11.3.63.1 RAN-INFORMATION-REQUEST Application Container */ + DE_BSSGP_RAN_INFORMATION_APP_CONT_UNIT, /* 11.3.63.2 RAN-INFORMATION Application Container Unit */ + DE_BSSGP_RAN_APP_ERROR_CONT, /* 11.3.64 Application Error Container */ + DE_BSSGP_RIM_PDU_INDICATIONS, /* 11.3.65 RIM PDU Indications */ + DE_BSSGP_RIM_PROTO_VER_NO, /* 11.3.67 RIM Protocol Version Number */ + + DE_BSSGP_PFC_FLOW_CTRL, /* 11.3.68 PFC Flow Control parameters */ + DE_BSSGP_RIM_ROUTING_INF, /* 11.3.70 RIM Routing Information */ + + DE_BSSGP_MBMS_SESSION_ID, /* 11.3.71 MBMS Session Identity */ + DE_BSSGP_MBMS_SESSION_DUR, /* 11.3.72 MBMS Session Duration */ + DE_BSSGP_MBMS_SAI_LIST, /* 11.3.73 MBMS Service Area Identity List */ + DE_BSSGP_MBMS_RESPONSE, /* 11.3.74 MBMS Response */ + DE_BSSGP_MBMS_RA_LIST, /* 11.3.75 MBMS Routing Area List */ + DE_BSSGP_MBMS_SESSION_INF, /* 11.3.76 MBMS Session Information */ + + DE_BSSGP_TMGI, /* 11.3.77 TMGI (Temporary Mobile Group Identity) GSM_A_PDU_TYPE_GM, DE_TMGI*/ + DE_BSSGP_MBMS_STOP_CAUSE, /* 11.3.78 MBMS Stop Cause */ + DE_BSSGP_SOURCE_BSS_TO_TARGET_BSS_TRANSP_CONT, /* 11.3.79 Source BSS to Target BSS Transparent Container */ + DE_BSSGP_TARGET_BSS_TO_SOURCE_BSS_TRANSP_CONT, /* 11.3.80 Target BSS to Source BSS Transparent Container */ + DE_BSSGP_PFCS_TO_BE_SET_UP_LIST, /* 11.3.82 PFCs to be set-up list */ + DE_BSSGP_LIST_OF_SETUP_PFCS, /* 11.3.83 List of set-up PFCs */ + DE_BSSGP_EXT_FEATURE_BITMAP, /* 11.3.84 Extended Feature Bitmap */ + DE_BSSGP_SRC_TO_TRG_TRANSP_CONT, /* 11.3.85 Source to Target Transparent Container */ + DE_BSSGP_TRG_TO_SRC_TRANSP_CONT, /* 11.3.86 Target to Source Transparent Container */ + BE_BSSGP_RNC_ID, /* 11.3.87 RNC Identifier */ + DE_BSSGP_PAGE_MODE, /* 11.3.88 Page Mode */ + DE_BSSGP_CONTAINER_ID, /* 11.3.89 Container ID */ + DE_BSSGP_GLOBAL_TFI, /* 11.3.90 Global TFI */ + DE_BSSGP_TIME_TO_MBMS_DATA_TRAN, /* 11.3.92 Time to MBMS Data Transfer */ + DE_BSSGP_MBMS_SESSION_REP_NO, /* 11.3.93 MBMS Session Repetition Number */ + + DE_BSSGP_INTER_RAT_HO_INFO, /* 11.3.94 Inter RAT Handover Info */ + DE_BSSGP_PS_HO_CMD, /* 11.3.95 PS Handover Command */ + DE_BSSGP_PS_HO_INDICATIONS, /* 11.3.95a PS Handover Indications */ + DE_BSSGP_SIPSI_CONTAINER, /* 11.3.95b SI/PSI Container */ + DE_BSSGP_ACTIVE_PFCS_LIST, /* 11.3.95c Active PFCs List */ + DE_BSSGP_VELOCITY_DATA, /* 11.3.96 Velocity Data */ + DE_BBSGP_DTM_HO_CMD, /* 11.3.97 DTM Handover Command */ + DE_BSSGP_CS_INDICATION, /* 11.3.98 CS Indication */ + DE_BSSGP_FLOW_CONTROL_GRAN, /* 11.3.102 Flow Control Granularity */ + DE_BSSGP_ENB_ID, /* 11.3.103 eNB Identifier */ + DE_BSSGP_E_UTRAN_INTER_RAT_HO_INFO, /* 11.3.104 E-UTRAN Inter RAT Handover Info */ + DE_BSSGP_SUB_PROF_ID_F_RAT_FRQ_PRIO, /* 11.3.105 Subscriber Profile ID for RAT/Frequency priority */ + DE_BSSGP_REQ_FOR_INTER_RAT_HO_INFO, /* 11.3.106 Request for Inter-RAT Handover Info */ + DE_BSSGP_RELIABLE_INTER_RAT_HO_INF, /* 11.3.107 Reliable Inter-RAT Handover Info */ + DE_BSSGP_SON_TRANSFER_APP_ID, /* 11.3.108 SON Transfer Application Identity */ + DE_BSSGP_CSG_ID, /* 11.3.109 CSG Identifier */ + DE_BSSGP_NONE /* NONE */ } bssgp_elem_idx_t; guint16 (*bssgp_elem_fcn[])(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len, gchar *add_string, int string_len) = { - de_bssgp_aligment_octets, /* 11.3.1 0x00 Alignment octets */ - de_bssgp_bmax_default_ms, /* 11.3.2 0x01 Bmax default MS */ - de_bssgp_bss_area_ind, /* 11.3.3 0x02 BSS Area Indication */ - de_bssgp_bucket_leak_rate, /* 11.3.4 0x03 Bucket Leak Rate (R) */ - de_bssgp_bvci, /* 11.3.6 0x04 BVCI (BSSGP Virtual Connection Identifier) */ - de_bssgp_bvc_bucket_size, /* 11.3.5 0x05 BVC Bucket Size */ - de_bssgp_bvc_meas, /* 11.3.7 0x06 BVC Measurement */ - de_bssgp_cause, /* 11.3.8 0x07 Cause */ - de_bssgp_cell_id, /* 11.3.9 0x08 Cell Identifier */ - de_bssgp_chnl_needed, /* 11.3.10 0x09 Channel needed */ - NULL, /* 11.3.11 0x0a DRX Parameters */ - NULL, /* 11.3.12 0x0b eMLPP-Priority */ - de_bssgp_flush_action, /* 11.3.13 0x0c Flush Action */ - de_mid, /* 11.3.14 0x0d IMSI */ - de_bssgp_llc_pdu, /* 11.3.15 0x0e LLC-PDU */ - de_bssgp_llc_frames_disc, /* 11.3.16 0x0f LLC Frames Discarded */ - NULL, /* 11.3.17 0x10 Location Area */ - NULL, /* 11.3.20 0x11 Mobile Id */ - de_bssgp_ms_bucket_size, /* 11.3.21 0x12 MS Bucket Size */ - NULL, /* 11.3.22 0x13 MS Radio Access Capability */ - de_bssgp_omc_id, /* 11.3.23 0x14 OMC Id */ - de_bssgp_pdu_in_error, /* 11.3.24 0x15 PDU In Error */ - de_bssgp_pdu_lifetime, /* 11.3.25 0x16 PDU Lifetime */ - NULL, /* 11.3.27 0x17 Priority */ - de_bssgp_qos_profile, /* 11.3.28 0x18 QoS Profile */ - de_bssgp_ra_cause, /* 11.3.29 0x19 Radio Cause */ - de_bssgp_ra_cap_upd_cause, /* 11.3.30 0x1a RA-Cap-UPD-Cause */ - NULL, /* 11.3.31 0x1b Routeing Area */ - de_bssgp_r_default_ms, /* 11.3.32 0x1c R_default_MS */ - de_bssgp_suspend_ref_no, /* 11.3.33 0x1d Suspend Reference Number */ - de_bssgp_tag, /* 11.3.34 0x1e Tag */ - NULL, /* 11.3.35 0x1f Temporary logical link Identity (TLLI) */ - NULL, /* 11.3.36 0x20 Temporary Mobile Subscriber Identity (TMSI) */ - de_bssgp_trace_ref, /* 11.3.37 0x21 Trace Reference */ - de_bssgp_trace_type, /* 11.3.38 0x22 Trace Type */ - de_bssgp_transaction_id, /* 11.3.39 0x23 Transaction Id */ - de_bssgp_trigger_id, /* 11.3.40 0x24 Trigger Id */ - de_bssgp_no_of_oct_affected, /* 11.3.41 0x25 Number of octets affected */ - NULL, /* 11.3.18 0x26 LSA Identifier List GSM_A_PDU_TYPE_BSSMAP, BE_LSA_ID_LIST*/ - NULL, /* 11.3.19 0x27 LSA Information */ - NULL, /* 11.3.42 0x28 Packet Flow Identifier (PFI) */ - de_bssgp_gprs_timer, /* 11.3.44 0x29 GPRS Timer */ - NULL, /* 11.3.43 0x3a Aggregate BSS QoS Profile */ - de_bssgp_feature_bitmap, /* 11.3.45 0x3b Feature Bitmap */ - de_bssgp_bucket_full_ratio, /* 11.3.46 0x3c Bucket Full Ratio */ - de_bssgp_serv_utran_cco, /* 11.3.47 0x3d Service UTRAN CCO */ - de_bssgp_nsei, /* 11.3.48 0x3e NSEI (Network Service Entity Identifier) */ - de_bssgp_rrlp_apdu, /* 11.3.49 RRLP APDU */ - de_bssgp_rrlp_flags, /* 11.3.60 RRLP Flags */ - de_bssgp_rim_app_id, /* 11.3.61 RIM Application Identity */ - de_bssgp_rim_seq_no, /* 11.3.62 RIM Sequence Number */ - de_bssgp_ran_inf_request_rim_cont, /* 11.3.62a.1 RAN-INFORMATION-REQUEST RIM Container */ - de_bssgp_ran_inf_rim_cont, /* 11.3.62a.2 RAN-INFORMATION RIM Container */ - de_bssgp_ran_inf_ack_rim_cont, /* 11.3.62a.3 RAN-INFORMATION-ACK RIM Container */ - de_bssgp_ran_inf_error_rim_cont, /* 11.3.62a.4 RAN-INFORMATION-ERROR RIM Container */ - de_bssgp_ran_inf_app_error_rim_cont, /* 11.3.62a.5 RAN-INFORMATION-APPLICATION-ERROR RIM Container */ - - de_bssgp_ran_information_request_app_cont, /* 11.3.63.1 RAN-INFORMATION-REQUEST Application Container */ - de_bssgp_ran_information_app_cont_unit, /* 11.3.63.2 RAN-INFORMATION Application Container Unit */ - de_bssgp_ran_app_error_cont, /* 11.3.64 Application Error Container */ - de_bssgp_rim_pdu_indications, /* 11.3.65 RIM PDU Indications */ - de_bssgp_rim_proto_ver_no, /* 11.3.67 RIM Protocol Version Number */ - - de_bssgp_pfc_flow_ctrl, /* 11.3.68 PFC Flow Control parameters */ - de_bssgp_rim_routing_inf, /* 11.3.70 RIM Routing Information */ - de_bssgp_mbms_session_id, /* 11.3.71 MBMS Session Identity */ - de_bssgp_mbms_session_dur, /* 11.3.72 MBMS Session Duration */ - de_bssgp_mbms_sai_list, /* 11.3.73 MBMS Service Area Identity List */ - de_bssgp_mbms_response, /* 11.3.74 MBMS Response */ - de_bssgp_mbms_ra_list, /* 11.3.75 MBMS Routing Area List */ - de_bssgp_mbms_session_inf, /* 11.3.76 MBMS Session Information */ - NULL, /* 11.3.77 TMGI (Temporary Mobile Group Identity) */ - de_bssgp_mbms_stop_cause, /* 11.3.78 MBMS Stop Cause */ - de_bssgp_source_BSS_to_target_BSS_transp_cont, /* 11.3.79 Source BSS to Target BSS Transparent Container */ - de_bssgp_target_BSS_to_source_BSS_transp_cont, /* 11.3.80 Target BSS to Source BSS Transparent Container */ - de_bssgp_pfcs_to_be_set_up_list, /* 11.3.82 PFCs to be set-up list */ - de_bssgp_list_of_setup_pfcs, /* 11.3.83 List of set-up PFCs */ - de_bssgp_ext_feature_bitmap, /* 11.3.84 Extended Feature Bitmap */ - de_bssgp_src_to_trg_transp_cont, /* 11.3.85 Source to Target Transparent Container */ - de_bssgp_trg_to_src_transp_cont, /* 11.3.86 Target to Source Transparent Container */ - de_bssgp_rnc_identifier, /* 11.3.87 RNC Identifier */ - de_bssgp_page_mode, /* 11.3.88 Page Mode */ - de_bssgp_container_id, /* 11.3.89 Container ID */ - de_bssgp_global_tfi, /* 11.3.90 Global TFI */ - de_bssgp_time_to_MBMS_data_tran, /* 11.3.92 Time to MBMS Data Transfer */ - de_bssgp_mbms_session_rep_no, /* 11.3.93 MBMS Session Repetition Number */ - de_bssgp_inter_rat_ho_info, /* 11.3.94 Inter RAT Handover Info */ - de_bssgp_ps_ho_cmd, /* 11.3.95 PS Handover Command */ - de_bssgp_ps_ho_indications, /* 11.3.95a PS Handover Indications */ - de_bssgp_sipsi_container, /* 11.3.95b SI/PSI Container */ - de_bssgp_active_pfcs_list, /* 11.3.95c Active PFCs List */ - de_bssgp_velocity_data, /* 11.3.96 Velocity Data */ - de_bssgp_dtm_ho_cmd, /* 11.3.97 DTM Handover Command */ - de_bssgp_cs_indication, /* 11.3.98 CS Indication */ - de_bssgp_flow_control_gran, /* 11.3.102 Flow Control Granularity */ - de_bssgp_enb_id, /* 11.3.103 eNB Identifier */ - de_bssgp_e_utran_inter_rat_ho_info, /* 11.3.104 E-UTRAN Inter RAT Handover Info */ - de_bssgp_sub_prof_id_f_rat_freq_prio, /* 11.3.105 Subscriber Profile ID for RAT/Frequency priority */ - de_bssgp_reliable_inter_rat_ho_inf, /* 11.3.107 Reliable Inter-RAT Handover Info */ - de_bssgp_req_for_inter_rat_ho_inf, /* 11.3.106 Request for Inter-RAT Handover Info */ - de_bssgp_son_transfer_app_id, /* 11.3.108 SON Transfer Application Identity */ - de_bssgp_csg_id, /* 11.3.109 CSG Identifier */ - - NULL, /* NONE */ + de_bssgp_aligment_octets, /* 11.3.1 0x00 Alignment octets */ + de_bssgp_bmax_default_ms, /* 11.3.2 0x01 Bmax default MS */ + de_bssgp_bss_area_ind, /* 11.3.3 0x02 BSS Area Indication */ + de_bssgp_bucket_leak_rate, /* 11.3.4 0x03 Bucket Leak Rate (R) */ + de_bssgp_bvci, /* 11.3.6 0x04 BVCI (BSSGP Virtual Connection Identifier) */ + de_bssgp_bvc_bucket_size, /* 11.3.5 0x05 BVC Bucket Size */ + de_bssgp_bvc_meas, /* 11.3.7 0x06 BVC Measurement */ + de_bssgp_cause, /* 11.3.8 0x07 Cause */ + de_bssgp_cell_id, /* 11.3.9 0x08 Cell Identifier */ + de_bssgp_chnl_needed, /* 11.3.10 0x09 Channel needed */ + NULL, /* 11.3.11 0x0a DRX Parameters */ + NULL, /* 11.3.12 0x0b eMLPP-Priority */ + de_bssgp_flush_action, /* 11.3.13 0x0c Flush Action */ + de_mid, /* 11.3.14 0x0d IMSI */ + de_bssgp_llc_pdu, /* 11.3.15 0x0e LLC-PDU */ + de_bssgp_llc_frames_disc, /* 11.3.16 0x0f LLC Frames Discarded */ + NULL, /* 11.3.17 0x10 Location Area */ + NULL, /* 11.3.20 0x11 Mobile Id */ + de_bssgp_ms_bucket_size, /* 11.3.21 0x12 MS Bucket Size */ + NULL, /* 11.3.22 0x13 MS Radio Access Capability */ + de_bssgp_omc_id, /* 11.3.23 0x14 OMC Id */ + de_bssgp_pdu_in_error, /* 11.3.24 0x15 PDU In Error */ + de_bssgp_pdu_lifetime, /* 11.3.25 0x16 PDU Lifetime */ + NULL, /* 11.3.27 0x17 Priority */ + de_bssgp_qos_profile, /* 11.3.28 0x18 QoS Profile */ + de_bssgp_ra_cause, /* 11.3.29 0x19 Radio Cause */ + de_bssgp_ra_cap_upd_cause, /* 11.3.30 0x1a RA-Cap-UPD-Cause */ + NULL, /* 11.3.31 0x1b Routeing Area */ + de_bssgp_r_default_ms, /* 11.3.32 0x1c R_default_MS */ + de_bssgp_suspend_ref_no, /* 11.3.33 0x1d Suspend Reference Number */ + de_bssgp_tag, /* 11.3.34 0x1e Tag */ + NULL, /* 11.3.35 0x1f Temporary logical link Identity (TLLI) */ + NULL, /* 11.3.36 0x20 Temporary Mobile Subscriber Identity (TMSI) */ + de_bssgp_trace_ref, /* 11.3.37 0x21 Trace Reference */ + de_bssgp_trace_type, /* 11.3.38 0x22 Trace Type */ + de_bssgp_transaction_id, /* 11.3.39 0x23 Transaction Id */ + de_bssgp_trigger_id, /* 11.3.40 0x24 Trigger Id */ + de_bssgp_no_of_oct_affected, /* 11.3.41 0x25 Number of octets affected */ + NULL, /* 11.3.18 0x26 LSA Identifier List GSM_A_PDU_TYPE_BSSMAP, BE_LSA_ID_LIST*/ + NULL, /* 11.3.19 0x27 LSA Information */ + NULL, /* 11.3.42 0x28 Packet Flow Identifier (PFI) */ + de_bssgp_gprs_timer, /* 11.3.44 0x29 GPRS Timer */ + NULL, /* 11.3.43 0x3a Aggregate BSS QoS Profile */ + de_bssgp_feature_bitmap, /* 11.3.45 0x3b Feature Bitmap */ + de_bssgp_bucket_full_ratio, /* 11.3.46 0x3c Bucket Full Ratio */ + de_bssgp_serv_utran_cco, /* 11.3.47 0x3d Service UTRAN CCO */ + de_bssgp_nsei, /* 11.3.48 0x3e NSEI (Network Service Entity Identifier) */ + de_bssgp_rrlp_apdu, /* 11.3.49 RRLP APDU */ + de_bssgp_rrlp_flags, /* 11.3.60 RRLP Flags */ + de_bssgp_rim_app_id, /* 11.3.61 RIM Application Identity */ + de_bssgp_rim_seq_no, /* 11.3.62 RIM Sequence Number */ + de_bssgp_ran_inf_request_rim_cont, /* 11.3.62a.1 RAN-INFORMATION-REQUEST RIM Container */ + de_bssgp_ran_inf_rim_cont, /* 11.3.62a.2 RAN-INFORMATION RIM Container */ + de_bssgp_ran_inf_ack_rim_cont, /* 11.3.62a.3 RAN-INFORMATION-ACK RIM Container */ + de_bssgp_ran_inf_error_rim_cont, /* 11.3.62a.4 RAN-INFORMATION-ERROR RIM Container */ + de_bssgp_ran_inf_app_error_rim_cont, /* 11.3.62a.5 RAN-INFORMATION-APPLICATION-ERROR RIM Container */ + + de_bssgp_ran_information_request_app_cont, /* 11.3.63.1 RAN-INFORMATION-REQUEST Application Container */ + de_bssgp_ran_information_app_cont_unit, /* 11.3.63.2 RAN-INFORMATION Application Container Unit */ + de_bssgp_ran_app_error_cont, /* 11.3.64 Application Error Container */ + de_bssgp_rim_pdu_indications, /* 11.3.65 RIM PDU Indications */ + de_bssgp_rim_proto_ver_no, /* 11.3.67 RIM Protocol Version Number */ + + de_bssgp_pfc_flow_ctrl, /* 11.3.68 PFC Flow Control parameters */ + de_bssgp_rim_routing_inf, /* 11.3.70 RIM Routing Information */ + de_bssgp_mbms_session_id, /* 11.3.71 MBMS Session Identity */ + de_bssgp_mbms_session_dur, /* 11.3.72 MBMS Session Duration */ + de_bssgp_mbms_sai_list, /* 11.3.73 MBMS Service Area Identity List */ + de_bssgp_mbms_response, /* 11.3.74 MBMS Response */ + de_bssgp_mbms_ra_list, /* 11.3.75 MBMS Routing Area List */ + de_bssgp_mbms_session_inf, /* 11.3.76 MBMS Session Information */ + NULL, /* 11.3.77 TMGI (Temporary Mobile Group Identity) */ + de_bssgp_mbms_stop_cause, /* 11.3.78 MBMS Stop Cause */ + de_bssgp_source_BSS_to_target_BSS_transp_cont, /* 11.3.79 Source BSS to Target BSS Transparent Container */ + de_bssgp_target_BSS_to_source_BSS_transp_cont, /* 11.3.80 Target BSS to Source BSS Transparent Container */ + de_bssgp_pfcs_to_be_set_up_list, /* 11.3.82 PFCs to be set-up list */ + de_bssgp_list_of_setup_pfcs, /* 11.3.83 List of set-up PFCs */ + de_bssgp_ext_feature_bitmap, /* 11.3.84 Extended Feature Bitmap */ + de_bssgp_src_to_trg_transp_cont, /* 11.3.85 Source to Target Transparent Container */ + de_bssgp_trg_to_src_transp_cont, /* 11.3.86 Target to Source Transparent Container */ + de_bssgp_rnc_identifier, /* 11.3.87 RNC Identifier */ + de_bssgp_page_mode, /* 11.3.88 Page Mode */ + de_bssgp_container_id, /* 11.3.89 Container ID */ + de_bssgp_global_tfi, /* 11.3.90 Global TFI */ + de_bssgp_time_to_MBMS_data_tran, /* 11.3.92 Time to MBMS Data Transfer */ + de_bssgp_mbms_session_rep_no, /* 11.3.93 MBMS Session Repetition Number */ + de_bssgp_inter_rat_ho_info, /* 11.3.94 Inter RAT Handover Info */ + de_bssgp_ps_ho_cmd, /* 11.3.95 PS Handover Command */ + de_bssgp_ps_ho_indications, /* 11.3.95a PS Handover Indications */ + de_bssgp_sipsi_container, /* 11.3.95b SI/PSI Container */ + de_bssgp_active_pfcs_list, /* 11.3.95c Active PFCs List */ + de_bssgp_velocity_data, /* 11.3.96 Velocity Data */ + de_bssgp_dtm_ho_cmd, /* 11.3.97 DTM Handover Command */ + de_bssgp_cs_indication, /* 11.3.98 CS Indication */ + de_bssgp_flow_control_gran, /* 11.3.102 Flow Control Granularity */ + de_bssgp_enb_id, /* 11.3.103 eNB Identifier */ + de_bssgp_e_utran_inter_rat_ho_info, /* 11.3.104 E-UTRAN Inter RAT Handover Info */ + de_bssgp_sub_prof_id_f_rat_freq_prio, /* 11.3.105 Subscriber Profile ID for RAT/Frequency priority */ + de_bssgp_reliable_inter_rat_ho_inf, /* 11.3.107 Reliable Inter-RAT Handover Info */ + de_bssgp_req_for_inter_rat_ho_inf, /* 11.3.106 Request for Inter-RAT Handover Info */ + de_bssgp_son_transfer_app_id, /* 11.3.108 SON Transfer Application Identity */ + de_bssgp_csg_id, /* 11.3.109 CSG Identifier */ + + NULL, /* NONE */ }; /* - * 11.3.62a RIM Container - * 11.3.62a.0 General - * 11.3.62a.1 RAN-INFORMATION-REQUEST RIM Container + * 11.3.62a RIM Container + * 11.3.62a.0 General + * 11.3.62a.1 RAN-INFORMATION-REQUEST RIM Container */ static guint16 de_bssgp_ran_inf_request_rim_cont(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* RAN-INFORMATION-REQUEST RIM Container Contents coded as - * defined in table 11.3.62a.1b - */ - /* RIM Application Identity RIM Application Identity/11.3.61 M TLV 3 */ - ELEM_IN_ELEM_MAND_TELV(BSSGP_IEI_RIM_APP_ID, BSSGP_PDU_TYPE, DE_BSSGP_RIM_APP_ID, NULL); - /* RIM Sequence Number RIM Sequence Number/11.3.62 M TLV 6 */ - ELEM_IN_ELEM_MAND_TELV(BSSGP_IEI_RIM_SEQUENCE_NUMBER, BSSGP_PDU_TYPE, DE_BSSGP_RIM_SEQ_NO, NULL); - /* RIM PDU Indications RIM PDU Indications/11.3.65 M TLV 3 */ - ELEM_IN_ELEM_MAND_TELV(BSSGP_IEI_RIM_PDU_INDICATIONS, BSSGP_PDU_TYPE, DE_BSSGP_RIM_PDU_INDICATIONS, NULL); - /* RIM Protocol Version Number RIM Protocol Version Number/11.3.67 O TLV 3 */ - ELEM_IN_ELEM_OPT_TELV(BSSGP_IEI_RIM_PROTOCOL_VERSION, BSSGP_PDU_TYPE, DE_BSSGP_RIM_PROTO_VER_NO, NULL); - /* Application Container (note 1) RAN-INFORMATION-REQUEST Application Container/11.3.63.1 C TLV 4-? */ - ELEM_IN_ELEM_OPT_TELV(BSSGP_IEI_RAN_INF_REQUEST_APP_CONTAINER, BSSGP_PDU_TYPE, DE_BSSGP_RAN_INFORMATION_REQUEST_APP_CONT, NULL); - /* SON Transfer Application Identity (note 2) SON Transfer Application Identity/11.3.108 C TLV 3-m */ - ELEM_IN_ELEM_OPT_TELV(0x84, BSSGP_PDU_TYPE, DE_BSSGP_SON_TRANSFER_APP_ID, NULL); + /* RAN-INFORMATION-REQUEST RIM Container Contents coded as + * defined in table 11.3.62a.1b + */ + /* RIM Application Identity RIM Application Identity/11.3.61 M TLV 3 */ + ELEM_IN_ELEM_MAND_TELV(BSSGP_IEI_RIM_APP_ID, BSSGP_PDU_TYPE, DE_BSSGP_RIM_APP_ID, NULL); + /* RIM Sequence Number RIM Sequence Number/11.3.62 M TLV 6 */ + ELEM_IN_ELEM_MAND_TELV(BSSGP_IEI_RIM_SEQUENCE_NUMBER, BSSGP_PDU_TYPE, DE_BSSGP_RIM_SEQ_NO, NULL); + /* RIM PDU Indications RIM PDU Indications/11.3.65 M TLV 3 */ + ELEM_IN_ELEM_MAND_TELV(BSSGP_IEI_RIM_PDU_INDICATIONS, BSSGP_PDU_TYPE, DE_BSSGP_RIM_PDU_INDICATIONS, NULL); + /* RIM Protocol Version Number RIM Protocol Version Number/11.3.67 O TLV 3 */ + ELEM_IN_ELEM_OPT_TELV(BSSGP_IEI_RIM_PROTOCOL_VERSION, BSSGP_PDU_TYPE, DE_BSSGP_RIM_PROTO_VER_NO, NULL); + /* Application Container (note 1) RAN-INFORMATION-REQUEST Application Container/11.3.63.1 C TLV 4-? */ + ELEM_IN_ELEM_OPT_TELV(BSSGP_IEI_RAN_INF_REQUEST_APP_CONTAINER, BSSGP_PDU_TYPE, DE_BSSGP_RAN_INFORMATION_REQUEST_APP_CONT, NULL); + /* SON Transfer Application Identity (note 2) SON Transfer Application Identity/11.3.108 C TLV 3-m */ + ELEM_IN_ELEM_OPT_TELV(0x84, BSSGP_PDU_TYPE, DE_BSSGP_SON_TRANSFER_APP_ID, NULL); - return(curr_offset-offset); + return(curr_offset-offset); } /* - * 11.3.62a.2 RAN-INFORMATION RIM Container + * 11.3.62a.2 RAN-INFORMATION RIM Container */ static guint16 de_bssgp_ran_inf_rim_cont(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* RAN-INFORMATION RIM Container Contents coded as - * defined in table 11.3.62a.2b - */ - /* RIM Application Identity RIM Application Identity /11.3.61 M TLV 3 */ - ELEM_IN_ELEM_MAND_TELV(BSSGP_IEI_RIM_APP_ID, BSSGP_PDU_TYPE, DE_BSSGP_RIM_APP_ID, NULL); - /* RIM Sequence Number RIM Sequence Number /11.3.62 M TLV 6 */ - ELEM_IN_ELEM_MAND_TELV(BSSGP_IEI_RIM_SEQUENCE_NUMBER, BSSGP_PDU_TYPE, DE_BSSGP_RIM_SEQ_NO, NULL); - /* RIM PDU Indications RIM PDU Indications /11.3.65. M TLV 3 */ - ELEM_IN_ELEM_MAND_TELV(BSSGP_IEI_RIM_PDU_INDICATIONS, BSSGP_PDU_TYPE, DE_BSSGP_RIM_PDU_INDICATIONS, NULL); - /* RIM Protocol Version Number RIM Protocol Version Number/11.3.67 O TLV 3 */ - ELEM_IN_ELEM_OPT_TELV(BSSGP_IEI_RIM_PROTOCOL_VERSION, BSSGP_PDU_TYPE, DE_BSSGP_RIM_PROTO_VER_NO, NULL); - /* Application Container (NOTE 1) RAN-INFORMATION Application Container /11.3.63.2 C (Note 1) TLV 4-? */ - ELEM_IN_ELEM_OPT_TELV(BSSGP_IEI_RAN_INF_APP_CONTAINER, BSSGP_PDU_TYPE, DE_BSSGP_RAN_INFORMATION_APP_CONT_UNIT, NULL); - /* Application Error Container (NOTE 1) Application Error Container/11.3.64 C (Note 1) TLV n */ - ELEM_IN_ELEM_OPT_TELV(BSSGP_IEI_APPLICATION_ERROR_CONTAINER, BSSGP_PDU_TYPE, DE_BSSGP_RAN_APP_ERROR_CONT, NULL); - /* SON Transfer Application Identity (note 2) SON Transfer Application Identity/11.3.108 C TLV 3-m */ - ELEM_IN_ELEM_OPT_TELV(0x84, BSSGP_PDU_TYPE, DE_BSSGP_SON_TRANSFER_APP_ID, NULL); + /* RAN-INFORMATION RIM Container Contents coded as + * defined in table 11.3.62a.2b + */ + /* RIM Application Identity RIM Application Identity /11.3.61 M TLV 3 */ + ELEM_IN_ELEM_MAND_TELV(BSSGP_IEI_RIM_APP_ID, BSSGP_PDU_TYPE, DE_BSSGP_RIM_APP_ID, NULL); + /* RIM Sequence Number RIM Sequence Number /11.3.62 M TLV 6 */ + ELEM_IN_ELEM_MAND_TELV(BSSGP_IEI_RIM_SEQUENCE_NUMBER, BSSGP_PDU_TYPE, DE_BSSGP_RIM_SEQ_NO, NULL); + /* RIM PDU Indications RIM PDU Indications /11.3.65. M TLV 3 */ + ELEM_IN_ELEM_MAND_TELV(BSSGP_IEI_RIM_PDU_INDICATIONS, BSSGP_PDU_TYPE, DE_BSSGP_RIM_PDU_INDICATIONS, NULL); + /* RIM Protocol Version Number RIM Protocol Version Number/11.3.67 O TLV 3 */ + ELEM_IN_ELEM_OPT_TELV(BSSGP_IEI_RIM_PROTOCOL_VERSION, BSSGP_PDU_TYPE, DE_BSSGP_RIM_PROTO_VER_NO, NULL); + /* Application Container (NOTE 1) RAN-INFORMATION Application Container /11.3.63.2 C (Note 1) TLV 4-? */ + ELEM_IN_ELEM_OPT_TELV(BSSGP_IEI_RAN_INF_APP_CONTAINER, BSSGP_PDU_TYPE, DE_BSSGP_RAN_INFORMATION_APP_CONT_UNIT, NULL); + /* Application Error Container (NOTE 1) Application Error Container/11.3.64 C (Note 1) TLV n */ + ELEM_IN_ELEM_OPT_TELV(BSSGP_IEI_APPLICATION_ERROR_CONTAINER, BSSGP_PDU_TYPE, DE_BSSGP_RAN_APP_ERROR_CONT, NULL); + /* SON Transfer Application Identity (note 2) SON Transfer Application Identity/11.3.108 C TLV 3-m */ + ELEM_IN_ELEM_OPT_TELV(0x84, BSSGP_PDU_TYPE, DE_BSSGP_SON_TRANSFER_APP_ID, NULL); - return(curr_offset-offset); + return(curr_offset-offset); } /* - * 11.3.62a.3 RAN-INFORMATION-ACK RIM Container + * 11.3.62a.3 RAN-INFORMATION-ACK RIM Container */ static guint16 de_bssgp_ran_inf_ack_rim_cont(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* RAN-INFORMATION-ACK RIM Container Contents coded as - * defined in table 11.3.62a.3b - */ - /* RIM Application Identity RIM Application Identity /11.3.61 M TLV 3 */ - ELEM_IN_ELEM_MAND_TELV(BSSGP_IEI_RIM_APP_ID, BSSGP_PDU_TYPE, DE_BSSGP_RIM_APP_ID, NULL); - /* RIM Sequence Number RIM Sequence Number /11.3.62 M TLV 6 */ - ELEM_IN_ELEM_MAND_TELV(BSSGP_IEI_RIM_SEQUENCE_NUMBER, BSSGP_PDU_TYPE, DE_BSSGP_RIM_SEQ_NO, NULL); - /* RIM Protocol Version Number RIM Protocol Version Number/11.3.67 O TLV 4 */ - ELEM_IN_ELEM_OPT_TELV(BSSGP_IEI_RIM_PROTOCOL_VERSION, BSSGP_PDU_TYPE, DE_BSSGP_RIM_PROTO_VER_NO, NULL); - /* SON Transfer Application Identity (note 1) SON Transfer Application Identity/11.3.108 C TLV 3-m */ - ELEM_IN_ELEM_OPT_TELV(0x84, BSSGP_PDU_TYPE, DE_BSSGP_SON_TRANSFER_APP_ID, NULL); + /* RAN-INFORMATION-ACK RIM Container Contents coded as + * defined in table 11.3.62a.3b + */ + /* RIM Application Identity RIM Application Identity /11.3.61 M TLV 3 */ + ELEM_IN_ELEM_MAND_TELV(BSSGP_IEI_RIM_APP_ID, BSSGP_PDU_TYPE, DE_BSSGP_RIM_APP_ID, NULL); + /* RIM Sequence Number RIM Sequence Number /11.3.62 M TLV 6 */ + ELEM_IN_ELEM_MAND_TELV(BSSGP_IEI_RIM_SEQUENCE_NUMBER, BSSGP_PDU_TYPE, DE_BSSGP_RIM_SEQ_NO, NULL); + /* RIM Protocol Version Number RIM Protocol Version Number/11.3.67 O TLV 4 */ + ELEM_IN_ELEM_OPT_TELV(BSSGP_IEI_RIM_PROTOCOL_VERSION, BSSGP_PDU_TYPE, DE_BSSGP_RIM_PROTO_VER_NO, NULL); + /* SON Transfer Application Identity (note 1) SON Transfer Application Identity/11.3.108 C TLV 3-m */ + ELEM_IN_ELEM_OPT_TELV(0x84, BSSGP_PDU_TYPE, DE_BSSGP_SON_TRANSFER_APP_ID, NULL); - return(curr_offset-offset); + return(curr_offset-offset); } /* - * 11.3.62a.4 RAN-INFORMATION-ERROR RIM Container + * 11.3.62a.4 RAN-INFORMATION-ERROR RIM Container */ static guint16 de_bssgp_ran_inf_error_rim_cont(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* RAN-INFORMATION-ERROR RIM Container Contents coded as - * defined in table 11.3.62a.4b - */ - /* RIM Application Identity RIM Application Identity /11.3.61 M TLV 3 */ - ELEM_IN_ELEM_MAND_TELV(BSSGP_IEI_RIM_APP_ID, BSSGP_PDU_TYPE, DE_BSSGP_RIM_APP_ID, NULL); - /* RIM Cause Cause/11.3.8 M TLV 3 */ - ELEM_IN_ELEM_MAND_TELV(BSSGP_IEI_CAUSE,BSSGP_PDU_TYPE, DE_BSSGP_CAUSE, " - RIM"); - /* RIM Sequence Number RIM Sequence Number /11.3.62 M TLV 6 */ - ELEM_IN_ELEM_MAND_TELV(BSSGP_IEI_RIM_SEQUENCE_NUMBER, BSSGP_PDU_TYPE, DE_BSSGP_RIM_SEQ_NO, NULL); - /* RIM Protocol Version Number RIM Protocol Version Number/11.3.67 O TLV 3 */ - ELEM_IN_ELEM_OPT_TELV(BSSGP_IEI_RIM_PROTOCOL_VERSION, BSSGP_PDU_TYPE, DE_BSSGP_RIM_PROTO_VER_NO, NULL); - /* PDU in Error PDU in Error/11.3.24 M TLV 3-? */ - ELEM_IN_ELEM_OPT_TELV(0x15, BSSGP_PDU_TYPE, DE_BSSGP_PDU_IN_ERROR , NULL); - /* SON Transfer Application Identity (note 1) SON Transfer Application Identity/11.3.108 C TLV 3-m */ - ELEM_IN_ELEM_OPT_TELV(0x84, BSSGP_PDU_TYPE, DE_BSSGP_SON_TRANSFER_APP_ID, NULL); + /* RAN-INFORMATION-ERROR RIM Container Contents coded as + * defined in table 11.3.62a.4b + */ + /* RIM Application Identity RIM Application Identity /11.3.61 M TLV 3 */ + ELEM_IN_ELEM_MAND_TELV(BSSGP_IEI_RIM_APP_ID, BSSGP_PDU_TYPE, DE_BSSGP_RIM_APP_ID, NULL); + /* RIM Cause Cause/11.3.8 M TLV 3 */ + ELEM_IN_ELEM_MAND_TELV(BSSGP_IEI_CAUSE,BSSGP_PDU_TYPE, DE_BSSGP_CAUSE, " - RIM"); + /* RIM Sequence Number RIM Sequence Number /11.3.62 M TLV 6 */ + ELEM_IN_ELEM_MAND_TELV(BSSGP_IEI_RIM_SEQUENCE_NUMBER, BSSGP_PDU_TYPE, DE_BSSGP_RIM_SEQ_NO, NULL); + /* RIM Protocol Version Number RIM Protocol Version Number/11.3.67 O TLV 3 */ + ELEM_IN_ELEM_OPT_TELV(BSSGP_IEI_RIM_PROTOCOL_VERSION, BSSGP_PDU_TYPE, DE_BSSGP_RIM_PROTO_VER_NO, NULL); + /* PDU in Error PDU in Error/11.3.24 M TLV 3-? */ + ELEM_IN_ELEM_OPT_TELV(0x15, BSSGP_PDU_TYPE, DE_BSSGP_PDU_IN_ERROR , NULL); + /* SON Transfer Application Identity (note 1) SON Transfer Application Identity/11.3.108 C TLV 3-m */ + ELEM_IN_ELEM_OPT_TELV(0x84, BSSGP_PDU_TYPE, DE_BSSGP_SON_TRANSFER_APP_ID, NULL); - return(curr_offset-offset); + return(curr_offset-offset); } /* - * 11.3.62a.5 RAN-INFORMATION-APPLICATION-ERROR RIM Container + * 11.3.62a.5 RAN-INFORMATION-APPLICATION-ERROR RIM Container */ static guint16 de_bssgp_ran_inf_app_error_rim_cont(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* RRAN-INFORMATION-APPLICATION-ERROR RIM Container - * Contents coded as defined in table 11.3.62a.5b - */ - /* RIM Application Identity RIM Application Identity /11.3.61 M TLV 3 */ - ELEM_IN_ELEM_MAND_TELV(BSSGP_IEI_RIM_APP_ID, BSSGP_PDU_TYPE, DE_BSSGP_RIM_APP_ID, NULL); - /* RIM Sequence Number RIM Sequence Number /11.3.62 M TLV 6 */ - ELEM_IN_ELEM_MAND_TELV(BSSGP_IEI_RIM_SEQUENCE_NUMBER, BSSGP_PDU_TYPE, DE_BSSGP_RIM_SEQ_NO, NULL); - /* RIM PDU Indications RIM PDU Indications /11.3.65. M TLV 3 */ - ELEM_IN_ELEM_MAND_TELV(BSSGP_IEI_RIM_PDU_INDICATIONS, BSSGP_PDU_TYPE, DE_BSSGP_RIM_PDU_INDICATIONS, NULL); - /* RIM Protocol Version Number RIM Protocol Version Number/11.3.67 O TLV 3 */ - ELEM_IN_ELEM_OPT_TELV(BSSGP_IEI_RIM_PROTOCOL_VERSION, BSSGP_PDU_TYPE, DE_BSSGP_RIM_PROTO_VER_NO, NULL); - /* Application Error Container Application Error Container/11.3.64 M TLV n */ - ELEM_IN_ELEM_MAND_TELV(BSSGP_IEI_APPLICATION_ERROR_CONTAINER, BSSGP_PDU_TYPE, DE_BSSGP_RAN_APP_ERROR_CONT, NULL); - /* SON Transfer Application Identity (note 1) SON Transfer Application Identity/11.3.108 C TLV 3-m */ - ELEM_IN_ELEM_OPT_TELV(0x84, BSSGP_PDU_TYPE, DE_BSSGP_SON_TRANSFER_APP_ID, NULL); + /* RRAN-INFORMATION-APPLICATION-ERROR RIM Container + * Contents coded as defined in table 11.3.62a.5b + */ + /* RIM Application Identity RIM Application Identity /11.3.61 M TLV 3 */ + ELEM_IN_ELEM_MAND_TELV(BSSGP_IEI_RIM_APP_ID, BSSGP_PDU_TYPE, DE_BSSGP_RIM_APP_ID, NULL); + /* RIM Sequence Number RIM Sequence Number /11.3.62 M TLV 6 */ + ELEM_IN_ELEM_MAND_TELV(BSSGP_IEI_RIM_SEQUENCE_NUMBER, BSSGP_PDU_TYPE, DE_BSSGP_RIM_SEQ_NO, NULL); + /* RIM PDU Indications RIM PDU Indications /11.3.65. M TLV 3 */ + ELEM_IN_ELEM_MAND_TELV(BSSGP_IEI_RIM_PDU_INDICATIONS, BSSGP_PDU_TYPE, DE_BSSGP_RIM_PDU_INDICATIONS, NULL); + /* RIM Protocol Version Number RIM Protocol Version Number/11.3.67 O TLV 3 */ + ELEM_IN_ELEM_OPT_TELV(BSSGP_IEI_RIM_PROTOCOL_VERSION, BSSGP_PDU_TYPE, DE_BSSGP_RIM_PROTO_VER_NO, NULL); + /* Application Error Container Application Error Container/11.3.64 M TLV n */ + ELEM_IN_ELEM_MAND_TELV(BSSGP_IEI_APPLICATION_ERROR_CONTAINER, BSSGP_PDU_TYPE, DE_BSSGP_RAN_APP_ERROR_CONT, NULL); + /* SON Transfer Application Identity (note 1) SON Transfer Application Identity/11.3.108 C TLV 3-m */ + ELEM_IN_ELEM_OPT_TELV(0x84, BSSGP_PDU_TYPE, DE_BSSGP_SON_TRANSFER_APP_ID, NULL); - return(curr_offset-offset); + return(curr_offset-offset); } /* - * 11.3.79 Source BSS to Target BSS Transparent Container + * 11.3.79 Source BSS to Target BSS Transparent Container */ static guint16 de_bssgp_source_BSS_to_target_BSS_transp_cont(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* Octet 3-? Source BSS to Target BSS Transparent Container Contents coded - * as defined in table 11.3.79.b - */ - /* MS Radio Access Capability MS Radio Access Capability/11.3.22 M TLV 7-? */ - ELEM_IN_ELEM_MAND_TELV(BSSGP_IEI_MS_RADIO_ACCESS_CAPABILITY, GSM_A_PDU_TYPE_GM, DE_MS_RAD_ACC_CAP , NULL); - /* Inter RAT Handover Info Inter RAT Handover Info/11.3.94 O (note 1) TLV 3-? */ - ELEM_IN_ELEM_OPT_TELV(0x73, BSSGP_PDU_TYPE, DE_BSSGP_INTER_RAT_HO_INFO, NULL); - /* Page Mode Page Mode/11.3.88 O (note 2, note 3) TLV 3 */ - ELEM_IN_ELEM_OPT_TELV(0x6d, BSSGP_PDU_TYPE, DE_BSSGP_PAGE_MODE, NULL); - /* Container ID Container ID/11.3.89 O (note 2) TLV 3 */ - ELEM_IN_ELEM_OPT_TELV(0x6e, BSSGP_PDU_TYPE, DE_BSSGP_CONTAINER_ID, NULL); - /* Global TFI Global TFI/11.3.90 O (note 2, note 3) TLV 3 */ - ELEM_IN_ELEM_OPT_TELV(0x6f, BSSGP_PDU_TYPE, DE_BSSGP_GLOBAL_TFI, NULL); - /* PS Handover Indications PS Handover Indications/11.3.95a O TLV 3 */ - ELEM_IN_ELEM_OPT_TELV(0x75, BSSGP_PDU_TYPE, DE_BSSGP_PS_HO_INDICATIONS, NULL); - /* CS Indication CS Indication/11.3.98 O (note 3) TLV 3 */ - ELEM_IN_ELEM_OPT_TELV(0x7a, BSSGP_PDU_TYPE, DE_BSSGP_CS_INDICATION, NULL); - /* E-UTRAN Inter RAT Handover Info E-UTRAN Inter RAT HandoverInfo/11.3.104 O (note 1) TLV 3-? */ - ELEM_IN_ELEM_OPT_TELV(0x80, BSSGP_PDU_TYPE, DE_BSSGP_E_UTRAN_INTER_RAT_HO_INFO, NULL); + /* Octet 3-? Source BSS to Target BSS Transparent Container Contents coded + * as defined in table 11.3.79.b + */ + /* MS Radio Access Capability MS Radio Access Capability/11.3.22 M TLV 7-? */ + ELEM_IN_ELEM_MAND_TELV(BSSGP_IEI_MS_RADIO_ACCESS_CAPABILITY, GSM_A_PDU_TYPE_GM, DE_MS_RAD_ACC_CAP , NULL); + /* Inter RAT Handover Info Inter RAT Handover Info/11.3.94 O (note 1) TLV 3-? */ + ELEM_IN_ELEM_OPT_TELV(0x73, BSSGP_PDU_TYPE, DE_BSSGP_INTER_RAT_HO_INFO, NULL); + /* Page Mode Page Mode/11.3.88 O (note 2, note 3) TLV 3 */ + ELEM_IN_ELEM_OPT_TELV(0x6d, BSSGP_PDU_TYPE, DE_BSSGP_PAGE_MODE, NULL); + /* Container ID Container ID/11.3.89 O (note 2) TLV 3 */ + ELEM_IN_ELEM_OPT_TELV(0x6e, BSSGP_PDU_TYPE, DE_BSSGP_CONTAINER_ID, NULL); + /* Global TFI Global TFI/11.3.90 O (note 2, note 3) TLV 3 */ + ELEM_IN_ELEM_OPT_TELV(0x6f, BSSGP_PDU_TYPE, DE_BSSGP_GLOBAL_TFI, NULL); + /* PS Handover Indications PS Handover Indications/11.3.95a O TLV 3 */ + ELEM_IN_ELEM_OPT_TELV(0x75, BSSGP_PDU_TYPE, DE_BSSGP_PS_HO_INDICATIONS, NULL); + /* CS Indication CS Indication/11.3.98 O (note 3) TLV 3 */ + ELEM_IN_ELEM_OPT_TELV(0x7a, BSSGP_PDU_TYPE, DE_BSSGP_CS_INDICATION, NULL); + /* E-UTRAN Inter RAT Handover Info E-UTRAN Inter RAT HandoverInfo/11.3.104 O (note 1) TLV 3-? */ + ELEM_IN_ELEM_OPT_TELV(0x80, BSSGP_PDU_TYPE, DE_BSSGP_E_UTRAN_INTER_RAT_HO_INFO, NULL); - return(curr_offset-offset); + return(curr_offset-offset); } /* @@ -3783,2286 +3790,2286 @@ de_bssgp_source_BSS_to_target_BSS_transp_cont(tvbuff_t *tvb, proto_tree *tree, p static guint16 de_bssgp_target_BSS_to_source_BSS_transp_cont(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* Octet 3-? Target BSS to Source BSS Transparent Container Contents coded - * as defined in table 11.3.80.b - */ + /* Octet 3-? Target BSS to Source BSS Transparent Container Contents coded + * as defined in table 11.3.80.b + */ - /* PS Handover Command PS Handover Command/11.3.95 O (Note 2) TLV 4-? */ - ELEM_IN_ELEM_OPT_TELV(0x74, BSSGP_PDU_TYPE, DE_BSSGP_PS_HO_CMD, NULL); - /* SI/PSI Container SI/PSI Container/11.3.95b O (Note 1) TLV 3-? */ - ELEM_IN_ELEM_OPT_TELV(0x76, BSSGP_PDU_TYPE, DE_BSSGP_SIPSI_CONTAINER, NULL); - /* DTM Handover Command DTM Handover Command/11.3.97 O (Note 2) TLV 22-? */ - ELEM_IN_ELEM_OPT_TELV(0x79, BSSGP_PDU_TYPE, DE_BBSGP_DTM_HO_CMD, NULL); + /* PS Handover Command PS Handover Command/11.3.95 O (Note 2) TLV 4-? */ + ELEM_IN_ELEM_OPT_TELV(0x74, BSSGP_PDU_TYPE, DE_BSSGP_PS_HO_CMD, NULL); + /* SI/PSI Container SI/PSI Container/11.3.95b O (Note 1) TLV 3-? */ + ELEM_IN_ELEM_OPT_TELV(0x76, BSSGP_PDU_TYPE, DE_BSSGP_SIPSI_CONTAINER, NULL); + /* DTM Handover Command DTM Handover Command/11.3.97 O (Note 2) TLV 22-? */ + ELEM_IN_ELEM_OPT_TELV(0x79, BSSGP_PDU_TYPE, DE_BBSGP_DTM_HO_CMD, NULL); - return(curr_offset-offset); + return(curr_offset-offset); } /* MESSAGE FUNCTIONS */ /* - * 10.2 PDU functional definitions and contents at RL and BSSGP SAPs + * 10.2 PDU functional definitions and contents at RL and BSSGP SAPs * 10.2.1 DL-UNITDATA */ static void bssgp_dl_unitdata(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; - - curr_offset = offset; - curr_len = len; - - /* This PDU is sent to the BSS to transfer an LLC-PDU across the radio interface to an MS. */ - pinfo->link_dir = P2P_DIR_DL; - - /* TLLI (current) TLLI/11.3.35 M V 4 */ - ELEM_MAND_V(GSM_A_PDU_TYPE_RR, DE_RR_TLLI, " - current"); - /* QoS Profile (note 1) QoS Profile/11.3.28 M V 3 */ - ELEM_MAND_V(BSSGP_PDU_TYPE, DE_BSSGP_QOS_PROFILE, NULL); - - /* PDU Lifetime PDU Lifetime/11.3.25 M TLV 4 */ - ELEM_MAND_TELV(0x16, BSSGP_PDU_TYPE, DE_BSSGP_PDU_LIFETIME, NULL); - /* MS Radio Access Capability (note 2) MS Radio Access Capability/11.3.22 O TLV 7-? */ - ELEM_OPT_TELV(BSSGP_IEI_MS_RADIO_ACCESS_CAPABILITY, GSM_A_PDU_TYPE_GM, DE_MS_RAD_ACC_CAP , NULL); - /* Priority (note 3) Priority/11.3.27 O TLV 3 */ - ELEM_OPT_TELV(0x0b, GSM_A_PDU_TYPE_BSSMAP, BE_PRIO, NULL); - /* DRX Parameters DRX Parameters/11.3.11 O TLV 4 */ - ELEM_OPT_TELV(0x0a , GSM_A_PDU_TYPE_GM, DE_DRX_PARAM , NULL); - /* IMSI IMSI/11.3.14 O TLV 5-10 */ - ELEM_OPT_TELV(BSSGP_IEI_IMSI, BSSGP_PDU_TYPE, DE_BSSGP_IMSI , NULL); - /* TLLI (old) TLLI/11.3.35 O TLV 6 */ - ELEM_OPT_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI , " - old"); - /* PFI PFI/11.3.42 O TLV 3 */ - ELEM_OPT_TELV( BSSGP_IEI_PFI , GSM_A_PDU_TYPE_GM, DE_PACKET_FLOW_ID , NULL); - /* LSA Information LSA Information/11.3.19 O TLV 7-? */ - ELEM_OPT_TELV(0x27, GSM_A_PDU_TYPE_BSSMAP, BE_LSA_INFO, NULL); - /* Service UTRAN CCO Service UTRAN CCO/11.3.47 O TLV 3 */ - ELEM_OPT_TELV(BSSGP_IEI_SERVICE_UTRAN_CCO, BSSGP_PDU_TYPE, DE_BSSGP_SERV_UTRAN_CCO, NULL); - - /* Subscriber Profile ID for RAT/Frequency priority (note 5) - * Subscriber Profile ID for RAT/Frequency priority/11.3.105 O TLV 3 - */ - ELEM_OPT_TELV(0x81, BSSGP_PDU_TYPE, DE_BSSGP_SUB_PROF_ID_F_RAT_FRQ_PRIO, NULL); - /* Alignment octets Alignment octets/11.3.1 O TLV 2-5 */ - ELEM_OPT_TELV(0x00, BSSGP_PDU_TYPE, DE_BSSGP_ALIGNMENT_OCTETS, NULL); - /* LLC-PDU (note 4) LLC-PDU/11.3.15 M TLV 2-? */ - ELEM_MAND_TELV(0x0e, BSSGP_PDU_TYPE, DE_BSSGP_LLC_PDU, NULL); - - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); -} -/* - * 10.2.2 UL-UNITDATA + guint32 curr_offset; + guint32 consumed; + guint curr_len; + + curr_offset = offset; + curr_len = len; + + /* This PDU is sent to the BSS to transfer an LLC-PDU across the radio interface to an MS. */ + pinfo->link_dir = P2P_DIR_DL; + + /* TLLI (current) TLLI/11.3.35 M V 4 */ + ELEM_MAND_V(GSM_A_PDU_TYPE_RR, DE_RR_TLLI, " - current"); + /* QoS Profile (note 1) QoS Profile/11.3.28 M V 3 */ + ELEM_MAND_V(BSSGP_PDU_TYPE, DE_BSSGP_QOS_PROFILE, NULL); + + /* PDU Lifetime PDU Lifetime/11.3.25 M TLV 4 */ + ELEM_MAND_TELV(0x16, BSSGP_PDU_TYPE, DE_BSSGP_PDU_LIFETIME, NULL); + /* MS Radio Access Capability (note 2) MS Radio Access Capability/11.3.22 O TLV 7-? */ + ELEM_OPT_TELV(BSSGP_IEI_MS_RADIO_ACCESS_CAPABILITY, GSM_A_PDU_TYPE_GM, DE_MS_RAD_ACC_CAP , NULL); + /* Priority (note 3) Priority/11.3.27 O TLV 3 */ + ELEM_OPT_TELV(0x0b, GSM_A_PDU_TYPE_BSSMAP, BE_PRIO, NULL); + /* DRX Parameters DRX Parameters/11.3.11 O TLV 4 */ + ELEM_OPT_TELV(0x0a , GSM_A_PDU_TYPE_GM, DE_DRX_PARAM , NULL); + /* IMSI IMSI/11.3.14 O TLV 5-10 */ + ELEM_OPT_TELV(BSSGP_IEI_IMSI, BSSGP_PDU_TYPE, DE_BSSGP_IMSI , NULL); + /* TLLI (old) TLLI/11.3.35 O TLV 6 */ + ELEM_OPT_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI , " - old"); + /* PFI PFI/11.3.42 O TLV 3 */ + ELEM_OPT_TELV( BSSGP_IEI_PFI , GSM_A_PDU_TYPE_GM, DE_PACKET_FLOW_ID , NULL); + /* LSA Information LSA Information/11.3.19 O TLV 7-? */ + ELEM_OPT_TELV(0x27, GSM_A_PDU_TYPE_BSSMAP, BE_LSA_INFO, NULL); + /* Service UTRAN CCO Service UTRAN CCO/11.3.47 O TLV 3 */ + ELEM_OPT_TELV(BSSGP_IEI_SERVICE_UTRAN_CCO, BSSGP_PDU_TYPE, DE_BSSGP_SERV_UTRAN_CCO, NULL); + + /* Subscriber Profile ID for RAT/Frequency priority (note 5) + * Subscriber Profile ID for RAT/Frequency priority/11.3.105 O TLV 3 + */ + ELEM_OPT_TELV(0x81, BSSGP_PDU_TYPE, DE_BSSGP_SUB_PROF_ID_F_RAT_FRQ_PRIO, NULL); + /* Alignment octets Alignment octets/11.3.1 O TLV 2-5 */ + ELEM_OPT_TELV(0x00, BSSGP_PDU_TYPE, DE_BSSGP_ALIGNMENT_OCTETS, NULL); + /* LLC-PDU (note 4) LLC-PDU/11.3.15 M TLV 2-? */ + ELEM_MAND_TELV(0x0e, BSSGP_PDU_TYPE, DE_BSSGP_LLC_PDU, NULL); + + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); +} +/* + * 10.2.2 UL-UNITDATA */ static void bssgp_ul_unitdata(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; - - curr_offset = offset; - curr_len = len; - - /* This PDU transfers an MS's LLC-PDU and its associated radio interface information across the Gb-interface. - * Direction: BSS to SGSN - */ - pinfo->link_dir = P2P_DIR_UL; - /* TLLI TLLI/11.3.35 M V 4 */ - ELEM_MAND_V(GSM_A_PDU_TYPE_RR, DE_RR_TLLI, NULL); - /* QoS Profile QoS Profile/11.3.28 M V 3 */ - ELEM_MAND_V(BSSGP_PDU_TYPE, DE_BSSGP_QOS_PROFILE, NULL); - /* Cell Identifier Cell Identifier/11.3.9 M TLV 10 */ - ELEM_OPT_TELV(BSSGP_IEI_CELL_IDENTIFIER, BSSGP_PDU_TYPE, DE_BSSGP_CELL_ID , NULL); - /* PFI PFI/11.3.42 O TLV 3 */ - ELEM_OPT_TELV(BSSGP_IEI_PFI , GSM_A_PDU_TYPE_GM, DE_PACKET_FLOW_ID , NULL); - /* LSA Identifier List LSA Identifier List/11.3.18 O TLV 3-? */ - ELEM_OPT_TELV(0x26, GSM_A_PDU_TYPE_BSSMAP, BE_LSA_ID_LIST, NULL); - /* Alignment octets Alignment octets/11.3.1 O TLV 2-5 */ - ELEM_OPT_TELV(0x00, BSSGP_PDU_TYPE, DE_BSSGP_ALIGNMENT_OCTETS, NULL); - /* LLC-PDU (note) LLC-PDU/11.3.15 M TLV 2-? */ - ELEM_MAND_TELV(0x0e, BSSGP_PDU_TYPE, DE_BSSGP_LLC_PDU, NULL); - - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); -} -/* - * 10.2.3 RA-CAPABILITY + guint32 curr_offset; + guint32 consumed; + guint curr_len; + + curr_offset = offset; + curr_len = len; + + /* This PDU transfers an MS's LLC-PDU and its associated radio interface information across the Gb-interface. + * Direction: BSS to SGSN + */ + pinfo->link_dir = P2P_DIR_UL; + /* TLLI TLLI/11.3.35 M V 4 */ + ELEM_MAND_V(GSM_A_PDU_TYPE_RR, DE_RR_TLLI, NULL); + /* QoS Profile QoS Profile/11.3.28 M V 3 */ + ELEM_MAND_V(BSSGP_PDU_TYPE, DE_BSSGP_QOS_PROFILE, NULL); + /* Cell Identifier Cell Identifier/11.3.9 M TLV 10 */ + ELEM_OPT_TELV(BSSGP_IEI_CELL_IDENTIFIER, BSSGP_PDU_TYPE, DE_BSSGP_CELL_ID , NULL); + /* PFI PFI/11.3.42 O TLV 3 */ + ELEM_OPT_TELV(BSSGP_IEI_PFI , GSM_A_PDU_TYPE_GM, DE_PACKET_FLOW_ID , NULL); + /* LSA Identifier List LSA Identifier List/11.3.18 O TLV 3-? */ + ELEM_OPT_TELV(0x26, GSM_A_PDU_TYPE_BSSMAP, BE_LSA_ID_LIST, NULL); + /* Alignment octets Alignment octets/11.3.1 O TLV 2-5 */ + ELEM_OPT_TELV(0x00, BSSGP_PDU_TYPE, DE_BSSGP_ALIGNMENT_OCTETS, NULL); + /* LLC-PDU (note) LLC-PDU/11.3.15 M TLV 2-? */ + ELEM_MAND_TELV(0x0e, BSSGP_PDU_TYPE, DE_BSSGP_LLC_PDU, NULL); + + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); +} +/* + * 10.2.3 RA-CAPABILITY */ static void bssgp_ra_cap(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* This PDU informs the BSS of the new Radio Access Capability of an MS. */ - pinfo->link_dir = P2P_DIR_UL; + /* This PDU informs the BSS of the new Radio Access Capability of an MS. */ + pinfo->link_dir = P2P_DIR_UL; - /* TLLI TLLI/11.3.35 M TLV 6 */ - ELEM_MAND_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI , NULL); - /* MS Radio Access Capability MS Radio Access Capability/11.3.22 M TLV 7-? */ - ELEM_MAND_TELV(BSSGP_IEI_MS_RADIO_ACCESS_CAPABILITY, GSM_A_PDU_TYPE_GM, DE_MS_RAD_ACC_CAP , NULL); + /* TLLI TLLI/11.3.35 M TLV 6 */ + ELEM_MAND_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI , NULL); + /* MS Radio Access Capability MS Radio Access Capability/11.3.22 M TLV 7-? */ + ELEM_MAND_TELV(BSSGP_IEI_MS_RADIO_ACCESS_CAPABILITY, GSM_A_PDU_TYPE_GM, DE_MS_RAD_ACC_CAP , NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); } /* - * 10.2.4 (void) + * 10.2.4 (void) */ /* - * 10.2.5 DL-MBMS-UNITDATA + * 10.2.5 DL-MBMS-UNITDATA */ static void bssgp_dl_mbms_unitdata(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* This PDU is sent to the BSS to transfer an LLC-PDU across the radio interface. - * Direction: SGSN to BSS - */ - pinfo->link_dir = P2P_DIR_DL; + /* This PDU is sent to the BSS to transfer an LLC-PDU across the radio interface. + * Direction: SGSN to BSS + */ + pinfo->link_dir = P2P_DIR_DL; - /* PDU Lifetime PDU Lifetime/11.3.25 M TLV 4 */ - ELEM_MAND_TELV(0x16, BSSGP_PDU_TYPE, DE_BSSGP_PDU_LIFETIME, NULL); - /* TMGI TMGI/ 11.3.77 M TLV 3-8 */ - ELEM_MAND_TELV(0x5c, GSM_A_PDU_TYPE_GM, DE_TMGI, NULL); - /* MBMS Session Identity MBMS Session Identity/ 11.3.71 O TLV 3 */ - ELEM_OPT_TELV(0x5d, BSSGP_PDU_TYPE, DE_BSSGP_MBMS_SESSION_ID, NULL); - /* Alignment octets Alignment octets/11.3.1 O TLV 2-5 */ - ELEM_OPT_TELV(0x00, BSSGP_PDU_TYPE, DE_BSSGP_ALIGNMENT_OCTETS, NULL); - /* LLC-PDU LLC-PDU/11.3.15 M TLV 3-? */ - ELEM_MAND_TELV(0x0e, BSSGP_PDU_TYPE, DE_BSSGP_LLC_PDU, NULL); + /* PDU Lifetime PDU Lifetime/11.3.25 M TLV 4 */ + ELEM_MAND_TELV(0x16, BSSGP_PDU_TYPE, DE_BSSGP_PDU_LIFETIME, NULL); + /* TMGI TMGI/ 11.3.77 M TLV 3-8 */ + ELEM_MAND_TELV(0x5c, GSM_A_PDU_TYPE_GM, DE_TMGI, NULL); + /* MBMS Session Identity MBMS Session Identity/ 11.3.71 O TLV 3 */ + ELEM_OPT_TELV(0x5d, BSSGP_PDU_TYPE, DE_BSSGP_MBMS_SESSION_ID, NULL); + /* Alignment octets Alignment octets/11.3.1 O TLV 2-5 */ + ELEM_OPT_TELV(0x00, BSSGP_PDU_TYPE, DE_BSSGP_ALIGNMENT_OCTETS, NULL); + /* LLC-PDU LLC-PDU/11.3.15 M TLV 3-? */ + ELEM_MAND_TELV(0x0e, BSSGP_PDU_TYPE, DE_BSSGP_LLC_PDU, NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); } /* - * 10.2.6 UL-MBMS-UNITDATA + * 10.2.6 UL-MBMS-UNITDATA */ static void bssgp_ul_mbms_unitdata(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* This PDU transfers an LLC-PDU for an MBMS session across the Gb-interface. - * Direction: BSS to SGSN */ - pinfo->link_dir = P2P_DIR_UL; + /* This PDU transfers an LLC-PDU for an MBMS session across the Gb-interface. + * Direction: BSS to SGSN */ + pinfo->link_dir = P2P_DIR_UL; - /* TMGI TMGI/ 11.3.77 M TLV 3-8 */ - ELEM_MAND_TELV(0x5c, GSM_A_PDU_TYPE_GM, DE_TMGI, NULL); - /* MBMS Session Identity MBMS Session Identity/ 11.3.71 O TLV 3 */ - ELEM_OPT_TELV(0x5d, BSSGP_PDU_TYPE, DE_BSSGP_MBMS_SESSION_ID, NULL); - /* Alignment octets Alignment octets/11.3.1 O TLV 2-5 */ - ELEM_OPT_TELV(0x00, BSSGP_PDU_TYPE, DE_BSSGP_ALIGNMENT_OCTETS, NULL); - /* LLC-PDU (note 1) LLC-PDU/11.3.15 M TLV 2-? */ - ELEM_MAND_TELV(0x0e, BSSGP_PDU_TYPE, DE_BSSGP_LLC_PDU, NULL); + /* TMGI TMGI/ 11.3.77 M TLV 3-8 */ + ELEM_MAND_TELV(0x5c, GSM_A_PDU_TYPE_GM, DE_TMGI, NULL); + /* MBMS Session Identity MBMS Session Identity/ 11.3.71 O TLV 3 */ + ELEM_OPT_TELV(0x5d, BSSGP_PDU_TYPE, DE_BSSGP_MBMS_SESSION_ID, NULL); + /* Alignment octets Alignment octets/11.3.1 O TLV 2-5 */ + ELEM_OPT_TELV(0x00, BSSGP_PDU_TYPE, DE_BSSGP_ALIGNMENT_OCTETS, NULL); + /* LLC-PDU (note 1) LLC-PDU/11.3.15 M TLV 2-? */ + ELEM_MAND_TELV(0x0e, BSSGP_PDU_TYPE, DE_BSSGP_LLC_PDU, NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); } /* - * 10.3 PDU functional definitions and contents at GMM SAP - * 10.3.1 PAGING PS + * 10.3 PDU functional definitions and contents at GMM SAP + * 10.3.1 PAGING PS */ static void bssgp_paging_ps(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; - - curr_offset = offset; - curr_len = len; - /* This PDU indicates that a BSS shall initiate the packet paging procedure for an MS within a group of cells. - * Direction: SGSN to BSS */ - pinfo->link_dir = P2P_DIR_DL; - - /* IMSI IMSI/11.3.14 M TLV 5 -10 */ - ELEM_MAND_TELV(BSSGP_IEI_IMSI, BSSGP_PDU_TYPE, DE_BSSGP_IMSI , NULL); - /* DRX Parameters DRX Parameters/11.3.11 O TLV 4 */ - ELEM_OPT_TELV(0x0a , GSM_A_PDU_TYPE_GM, DE_DRX_PARAM , NULL); - /* BVCI a) BVCI/11.3.6 C TLV 4 */ - ELEM_OPT_TELV(BSSGP_IEI_BVCI, BSSGP_PDU_TYPE, DE_BSSGP_BVCI , NULL); - /* Location Area (note) Location Area/11.3.17 C TLV 7 */ - ELEM_OPT_TELV(0x10,GSM_A_PDU_TYPE_COMMON, DE_LAI, NULL); - /* Routeing Area (note) Routeing Area/11.3.31 C TLV 8 */ - ELEM_OPT_TELV(0x1b,GSM_A_PDU_TYPE_GM, DE_RAI, NULL); - /* BSS Area Indication (note) BSS Area Indication/11.3.3 C TLV 3 */ - ELEM_OPT_TELV(0x02,BSSGP_PDU_TYPE, DE_BSSGP_BSS_AREA_IND, NULL); - /* PFI PFI/11.3.42 O TLV 3 */ - ELEM_OPT_TELV(BSSGP_IEI_PFI , GSM_A_PDU_TYPE_GM, DE_PACKET_FLOW_ID , NULL); - /* ABQP ABQP/11.3.43 O TLV 13-? */ - ELEM_OPT_TELV(0x3a , GSM_A_PDU_TYPE_GM, DE_QOS , NULL); - /* QoS Profile QoS Profile/11.3.28 M TLV 5 */ - ELEM_MAND_TELV(0x18,BSSGP_PDU_TYPE, DE_BSSGP_QOS_PROFILE, NULL); - /* P-TMSI TMSI/11.3.36 O TLV 6 */ - ELEM_OPT_TELV(BSSGP_IEI_TMSI,GSM_A_PDU_TYPE_RR, DE_RR_TMSI_PTMSI, NULL); - - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); -} - -/* - * 10.3.2 PAGING CS + guint32 curr_offset; + guint32 consumed; + guint curr_len; + + curr_offset = offset; + curr_len = len; + /* This PDU indicates that a BSS shall initiate the packet paging procedure for an MS within a group of cells. + * Direction: SGSN to BSS */ + pinfo->link_dir = P2P_DIR_DL; + + /* IMSI IMSI/11.3.14 M TLV 5 -10 */ + ELEM_MAND_TELV(BSSGP_IEI_IMSI, BSSGP_PDU_TYPE, DE_BSSGP_IMSI , NULL); + /* DRX Parameters DRX Parameters/11.3.11 O TLV 4 */ + ELEM_OPT_TELV(0x0a , GSM_A_PDU_TYPE_GM, DE_DRX_PARAM , NULL); + /* BVCI a) BVCI/11.3.6 C TLV 4 */ + ELEM_OPT_TELV(BSSGP_IEI_BVCI, BSSGP_PDU_TYPE, DE_BSSGP_BVCI , NULL); + /* Location Area (note) Location Area/11.3.17 C TLV 7 */ + ELEM_OPT_TELV(0x10,GSM_A_PDU_TYPE_COMMON, DE_LAI, NULL); + /* Routeing Area (note) Routeing Area/11.3.31 C TLV 8 */ + ELEM_OPT_TELV(0x1b,GSM_A_PDU_TYPE_GM, DE_RAI, NULL); + /* BSS Area Indication (note) BSS Area Indication/11.3.3 C TLV 3 */ + ELEM_OPT_TELV(0x02,BSSGP_PDU_TYPE, DE_BSSGP_BSS_AREA_IND, NULL); + /* PFI PFI/11.3.42 O TLV 3 */ + ELEM_OPT_TELV(BSSGP_IEI_PFI , GSM_A_PDU_TYPE_GM, DE_PACKET_FLOW_ID , NULL); + /* ABQP ABQP/11.3.43 O TLV 13-? */ + ELEM_OPT_TELV(0x3a , GSM_A_PDU_TYPE_GM, DE_QOS , NULL); + /* QoS Profile QoS Profile/11.3.28 M TLV 5 */ + ELEM_MAND_TELV(0x18,BSSGP_PDU_TYPE, DE_BSSGP_QOS_PROFILE, NULL); + /* P-TMSI TMSI/11.3.36 O TLV 6 */ + ELEM_OPT_TELV(BSSGP_IEI_TMSI,GSM_A_PDU_TYPE_RR, DE_RR_TMSI_PTMSI, NULL); + + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); +} + +/* + * 10.3.2 PAGING CS */ static void bssgp_paging_cs(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; - - curr_offset = offset; - curr_len = len; - /* This PDU indicates that a BSS shall initiate a circuit-switched paging procedure for an MS within a group of cells. - * Direction: SGSN to BSS - */ - pinfo->link_dir = P2P_DIR_DL; - /* IMSI IMSI/11.3.14 M TLV 5 -10 */ - ELEM_MAND_TELV(BSSGP_IEI_IMSI, BSSGP_PDU_TYPE, DE_BSSGP_IMSI , NULL); - /* DRX Parameters DRX Parameters/11.3.11 M TLV 4 */ - ELEM_MAND_TELV(0x0a , GSM_A_PDU_TYPE_GM, DE_DRX_PARAM , NULL); - /* BVCI a) BVCI/11.3.6 C TLV 4 */ - ELEM_OPT_TELV(BSSGP_IEI_BVCI, BSSGP_PDU_TYPE, DE_BSSGP_BVCI , NULL); - /* Location Area (note 1) Location Area/11.3.17 C TLV 7 */ - ELEM_OPT_TELV(0x10,GSM_A_PDU_TYPE_COMMON, DE_LAI, NULL); - /* Routeing Area (note 1) Routeing Area/11.3.31 C TLV 8 */ - ELEM_OPT_TELV(0x1b,GSM_A_PDU_TYPE_GM, DE_RAI, NULL); - /* BSS Area Indication (note 1) BSS Area Indication/11.3.3 C TLV 3 */ - ELEM_OPT_TELV(0x02,BSSGP_PDU_TYPE, DE_BSSGP_BSS_AREA_IND, NULL); - /* TLLI TLLI/11.3.35 O TLV 6 */ - ELEM_OPT_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI , NULL); - /* Channel needed (note 2) Channel needed/11.3.10 O TLV 3 */ - ELEM_OPT_TELV(0x09, BSSGP_PDU_TYPE, DE_BSSGP_CHLN_NEEDED , NULL); - /* eMLPP-Priority (note 2) eMLPP-Priority/11.3.12 O TLV 3 */ - ELEM_OPT_TELV(0x0b, GSM_A_PDU_TYPE_BSSMAP, BE_EMLPP_PRIO, NULL); - /* TMSI (note 2) TMSI/11.3.36 O TLV 6 */ - ELEM_OPT_TELV(BSSGP_IEI_TMSI,GSM_A_PDU_TYPE_RR, DE_RR_TMSI_PTMSI, NULL); - /* Global CN-Id (note 2) Global CN-Id/11.3.69 O TLV 7 */ - ELEM_OPT_TELV(0x53, SGSAP_PDU_TYPE, DE_SGSAP_GLOBAL_CN_ID, NULL); - - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); -} - -/* - * 10.3.3 RA-CAPABILITY-UPDATE + guint32 curr_offset; + guint32 consumed; + guint curr_len; + + curr_offset = offset; + curr_len = len; + /* This PDU indicates that a BSS shall initiate a circuit-switched paging procedure for an MS within a group of cells. + * Direction: SGSN to BSS + */ + pinfo->link_dir = P2P_DIR_DL; + /* IMSI IMSI/11.3.14 M TLV 5 -10 */ + ELEM_MAND_TELV(BSSGP_IEI_IMSI, BSSGP_PDU_TYPE, DE_BSSGP_IMSI , NULL); + /* DRX Parameters DRX Parameters/11.3.11 M TLV 4 */ + ELEM_MAND_TELV(0x0a , GSM_A_PDU_TYPE_GM, DE_DRX_PARAM , NULL); + /* BVCI a) BVCI/11.3.6 C TLV 4 */ + ELEM_OPT_TELV(BSSGP_IEI_BVCI, BSSGP_PDU_TYPE, DE_BSSGP_BVCI , NULL); + /* Location Area (note 1) Location Area/11.3.17 C TLV 7 */ + ELEM_OPT_TELV(0x10,GSM_A_PDU_TYPE_COMMON, DE_LAI, NULL); + /* Routeing Area (note 1) Routeing Area/11.3.31 C TLV 8 */ + ELEM_OPT_TELV(0x1b,GSM_A_PDU_TYPE_GM, DE_RAI, NULL); + /* BSS Area Indication (note 1) BSS Area Indication/11.3.3 C TLV 3 */ + ELEM_OPT_TELV(0x02,BSSGP_PDU_TYPE, DE_BSSGP_BSS_AREA_IND, NULL); + /* TLLI TLLI/11.3.35 O TLV 6 */ + ELEM_OPT_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI , NULL); + /* Channel needed (note 2) Channel needed/11.3.10 O TLV 3 */ + ELEM_OPT_TELV(0x09, BSSGP_PDU_TYPE, DE_BSSGP_CHLN_NEEDED , NULL); + /* eMLPP-Priority (note 2) eMLPP-Priority/11.3.12 O TLV 3 */ + ELEM_OPT_TELV(0x0b, GSM_A_PDU_TYPE_BSSMAP, BE_EMLPP_PRIO, NULL); + /* TMSI (note 2) TMSI/11.3.36 O TLV 6 */ + ELEM_OPT_TELV(BSSGP_IEI_TMSI,GSM_A_PDU_TYPE_RR, DE_RR_TMSI_PTMSI, NULL); + /* Global CN-Id (note 2) Global CN-Id/11.3.69 O TLV 7 */ + ELEM_OPT_TELV(0x53, SGSAP_PDU_TYPE, DE_SGSAP_GLOBAL_CN_ID, NULL); + + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); +} + +/* + * 10.3.3 RA-CAPABILITY-UPDATE */ static void bssgp_ra_cap_upd(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; - /* This PDU requests that the SGSN send an MS's current Radio Access capability or IMSI to the BSS. */ - /* Direction: BSS to SGSN */ - pinfo->link_dir = P2P_DIR_UL; + curr_offset = offset; + curr_len = len; + /* This PDU requests that the SGSN send an MS's current Radio Access capability or IMSI to the BSS. */ + /* Direction: BSS to SGSN */ + pinfo->link_dir = P2P_DIR_UL; - /* TLLI TLLI/11.3.35 M TLV 6 */ - ELEM_MAND_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI , NULL); - /* Tag Tag/11.3.34 M TLV 3 */ - ELEM_MAND_TELV(BSSGP_IEI_TAG, BSSGP_PDU_TYPE, DE_BSSGP_TAG , NULL); - /* IMSI (note) IMSI/11.3.14 C TLV 5 -10 */ - ELEM_OPT_TELV(BSSGP_IEI_IMSI, BSSGP_PDU_TYPE, DE_BSSGP_IMSI , NULL); - /* RA-Cap-UPD-CAUSE RA-Cap-UPDCAUSE/11.3.30 M TLV 3 */ - ELEM_OPT_TELV(BSSGP_IEI_RA_CAP_UPD_CAUSE, BSSGP_PDU_TYPE, DE_BSSGP_RA_CAP_UPD_CAUSE , NULL); - /* MS Radio Access Capability MS Radio Access Capability/11.3.22 C TLV 7-? */ - ELEM_OPT_TELV(BSSGP_IEI_MS_RADIO_ACCESS_CAPABILITY, GSM_A_PDU_TYPE_GM, DE_MS_RAD_ACC_CAP , NULL); + /* TLLI TLLI/11.3.35 M TLV 6 */ + ELEM_MAND_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI , NULL); + /* Tag Tag/11.3.34 M TLV 3 */ + ELEM_MAND_TELV(BSSGP_IEI_TAG, BSSGP_PDU_TYPE, DE_BSSGP_TAG , NULL); + /* IMSI (note) IMSI/11.3.14 C TLV 5 -10 */ + ELEM_OPT_TELV(BSSGP_IEI_IMSI, BSSGP_PDU_TYPE, DE_BSSGP_IMSI , NULL); + /* RA-Cap-UPD-CAUSE RA-Cap-UPDCAUSE/11.3.30 M TLV 3 */ + ELEM_OPT_TELV(BSSGP_IEI_RA_CAP_UPD_CAUSE, BSSGP_PDU_TYPE, DE_BSSGP_RA_CAP_UPD_CAUSE , NULL); + /* MS Radio Access Capability MS Radio Access Capability/11.3.22 C TLV 7-? */ + ELEM_OPT_TELV(BSSGP_IEI_MS_RADIO_ACCESS_CAPABILITY, GSM_A_PDU_TYPE_GM, DE_MS_RAD_ACC_CAP , NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); } /* - * 10.3.4 RA-CAPABILITY-UPDATE-ACK + * 10.3.4 RA-CAPABILITY-UPDATE-ACK */ static void bssgp_ra_cap_upd_ack(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; - /* This PDU provides the BSS with an MS's current Radio Access capability and IMSI */ - /* Direction: SGSN to BSS */ - pinfo->link_dir = P2P_DIR_DL; + curr_offset = offset; + curr_len = len; + /* This PDU provides the BSS with an MS's current Radio Access capability and IMSI */ + /* Direction: SGSN to BSS */ + pinfo->link_dir = P2P_DIR_DL; - /* TLLI TLLI/11.3.35 M TLV 6 */ - ELEM_MAND_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI , NULL); - /* Tag Tag/11.3.34 M TLV 3 */ - ELEM_MAND_TELV(BSSGP_IEI_TAG, BSSGP_PDU_TYPE, DE_BSSGP_TAG , NULL); - /* IMSI (note) IMSI/11.3.14 C TLV 5 -10 */ - ELEM_OPT_TELV(BSSGP_IEI_IMSI, BSSGP_PDU_TYPE, DE_BSSGP_IMSI , NULL); - /* RA-Cap-UPD-CAUSE RA-Cap-UPDCAUSE/11.3.30 M TLV 3 */ - ELEM_OPT_TELV(BSSGP_IEI_RA_CAP_UPD_CAUSE, BSSGP_PDU_TYPE, DE_BSSGP_RA_CAP_UPD_CAUSE , NULL); - /* MS Radio Access Capability MS Radio Access Capability/11.3.22 C TLV 7-? */ - ELEM_OPT_TELV(BSSGP_IEI_MS_RADIO_ACCESS_CAPABILITY, GSM_A_PDU_TYPE_GM, DE_MS_RAD_ACC_CAP , NULL); + /* TLLI TLLI/11.3.35 M TLV 6 */ + ELEM_MAND_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI , NULL); + /* Tag Tag/11.3.34 M TLV 3 */ + ELEM_MAND_TELV(BSSGP_IEI_TAG, BSSGP_PDU_TYPE, DE_BSSGP_TAG , NULL); + /* IMSI (note) IMSI/11.3.14 C TLV 5 -10 */ + ELEM_OPT_TELV(BSSGP_IEI_IMSI, BSSGP_PDU_TYPE, DE_BSSGP_IMSI , NULL); + /* RA-Cap-UPD-CAUSE RA-Cap-UPDCAUSE/11.3.30 M TLV 3 */ + ELEM_OPT_TELV(BSSGP_IEI_RA_CAP_UPD_CAUSE, BSSGP_PDU_TYPE, DE_BSSGP_RA_CAP_UPD_CAUSE , NULL); + /* MS Radio Access Capability MS Radio Access Capability/11.3.22 C TLV 7-? */ + ELEM_OPT_TELV(BSSGP_IEI_MS_RADIO_ACCESS_CAPABILITY, GSM_A_PDU_TYPE_GM, DE_MS_RAD_ACC_CAP , NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); } /* - * 10.3.5 RADIO-STATUS + * 10.3.5 RADIO-STATUS */ static void bssgp_ra_status(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* This PDU indicates that an exception condition related to the radio interface has occurred. */ - /* BSS to SGSN */ - pinfo->link_dir = P2P_DIR_UL; + /* This PDU indicates that an exception condition related to the radio interface has occurred. */ + /* BSS to SGSN */ + pinfo->link_dir = P2P_DIR_UL; - /* TLLI (note) TLLI/11.3.35 C TLV 6 */ - ELEM_OPT_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI , NULL); - /* TMSI (note) TMSI/11.3.36 C TLV 6 */ - ELEM_OPT_TELV(BSSGP_IEI_TMSI,GSM_A_PDU_TYPE_RR, DE_RR_TMSI_PTMSI, NULL); - /* IMSI (note) IMSI/11.3.14 C TLV 5-10 */ - ELEM_OPT_TELV(BSSGP_IEI_IMSI, BSSGP_PDU_TYPE, DE_BSSGP_IMSI , NULL); - /* Radio Cause Radio Cause/11.3.29 M TLV 3 */ - ELEM_MAND_TELV(BSSGP_IEI_RADIO_CAUSE, BSSGP_PDU_TYPE, DE_BSSGP_RA_CAUSE , NULL); + /* TLLI (note) TLLI/11.3.35 C TLV 6 */ + ELEM_OPT_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI , NULL); + /* TMSI (note) TMSI/11.3.36 C TLV 6 */ + ELEM_OPT_TELV(BSSGP_IEI_TMSI,GSM_A_PDU_TYPE_RR, DE_RR_TMSI_PTMSI, NULL); + /* IMSI (note) IMSI/11.3.14 C TLV 5-10 */ + ELEM_OPT_TELV(BSSGP_IEI_IMSI, BSSGP_PDU_TYPE, DE_BSSGP_IMSI , NULL); + /* Radio Cause Radio Cause/11.3.29 M TLV 3 */ + ELEM_MAND_TELV(BSSGP_IEI_RADIO_CAUSE, BSSGP_PDU_TYPE, DE_BSSGP_RA_CAUSE , NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); } /* - * 10.3.6 SUSPEND + * 10.3.6 SUSPEND */ static void bssgp_suspend(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* This PDU indicates that an MS wishes to suspend its GPRS service. */ - /* Direction: BSS to SGSN */ - pinfo->link_dir = P2P_DIR_UL; + /* This PDU indicates that an MS wishes to suspend its GPRS service. */ + /* Direction: BSS to SGSN */ + pinfo->link_dir = P2P_DIR_UL; - /* TLLI TLLI/11.3.35 M TLV 6 */ - ELEM_MAND_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI , NULL); - /* Routeing Area Routeing Area/11.3.31 M TLV 8 */ - ELEM_MAND_TELV(0x1b,GSM_A_PDU_TYPE_GM, DE_RAI, NULL); + /* TLLI TLLI/11.3.35 M TLV 6 */ + ELEM_MAND_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI , NULL); + /* Routeing Area Routeing Area/11.3.31 M TLV 8 */ + ELEM_MAND_TELV(0x1b,GSM_A_PDU_TYPE_GM, DE_RAI, NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); } /* - * 10.3.7 SUSPEND-ACK + * 10.3.7 SUSPEND-ACK */ void bssgp_suspend_ack(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* This PDU positively acknowledges the reception of a SUSPEND PDU for an MS. */ - /* Direction: SGSN to BSS */ - pinfo->link_dir = P2P_DIR_DL; + /* This PDU positively acknowledges the reception of a SUSPEND PDU for an MS. */ + /* Direction: SGSN to BSS */ + pinfo->link_dir = P2P_DIR_DL; - /* TLLI TLLI/11.3.35 M TLV 6 */ - ELEM_MAND_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI , NULL); - /* Routeing Area Routeing Area/11.3.31 M TLV 8 */ - ELEM_MAND_TELV(0x1b,GSM_A_PDU_TYPE_GM, DE_RAI, NULL); - /* Suspend Reference Number Suspend Reference Number/11.3.33 M TLV 3 */ - ELEM_MAND_TELV(0x1d,BSSGP_PDU_TYPE, DE_BBSGP_SUSPEND_REF_NO, NULL); + /* TLLI TLLI/11.3.35 M TLV 6 */ + ELEM_MAND_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI , NULL); + /* Routeing Area Routeing Area/11.3.31 M TLV 8 */ + ELEM_MAND_TELV(0x1b,GSM_A_PDU_TYPE_GM, DE_RAI, NULL); + /* Suspend Reference Number Suspend Reference Number/11.3.33 M TLV 3 */ + ELEM_MAND_TELV(0x1d,BSSGP_PDU_TYPE, DE_BBSGP_SUSPEND_REF_NO, NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); } /* - * 10.3.8 SUSPEND-NACK + * 10.3.8 SUSPEND-NACK */ static void bssgp_suspend_nack(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* This PDU negatively acknowledges the reception of a SUSPEND PDU for an MS. */ - /* Direction: SGSN to BSS */ - pinfo->link_dir = P2P_DIR_DL; + /* This PDU negatively acknowledges the reception of a SUSPEND PDU for an MS. */ + /* Direction: SGSN to BSS */ + pinfo->link_dir = P2P_DIR_DL; - /* TLLI TLLI/11.3.35 M TLV 6 */ - ELEM_MAND_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI , NULL); - /* Routeing Area Routeing Area/11.3.31 M TLV 8 */ - ELEM_MAND_TELV(0x1b,GSM_A_PDU_TYPE_GM, DE_RAI, NULL); - /* Cause Cause/11.3.8 O TLV 3 */ - ELEM_MAND_TELV(BSSGP_IEI_CAUSE,BSSGP_PDU_TYPE, DE_BSSGP_CAUSE, NULL); + /* TLLI TLLI/11.3.35 M TLV 6 */ + ELEM_MAND_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI , NULL); + /* Routeing Area Routeing Area/11.3.31 M TLV 8 */ + ELEM_MAND_TELV(0x1b,GSM_A_PDU_TYPE_GM, DE_RAI, NULL); + /* Cause Cause/11.3.8 O TLV 3 */ + ELEM_MAND_TELV(BSSGP_IEI_CAUSE,BSSGP_PDU_TYPE, DE_BSSGP_CAUSE, NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); } /* - * 10.3.9 RESUME + * 10.3.9 RESUME */ static void bssgp_resume(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* This PDU indicates that an MS wishes to RESUME its GPRS service. */ - /* Direction: BSS to SGSN */ - pinfo->link_dir = P2P_DIR_UL; + /* This PDU indicates that an MS wishes to RESUME its GPRS service. */ + /* Direction: BSS to SGSN */ + pinfo->link_dir = P2P_DIR_UL; - /* TLLI TLLI/11.3.35 M TLV 6 */ - ELEM_MAND_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI , NULL); - /* Routeing Area Routeing Area/11.3.31 M TLV 8 */ - ELEM_MAND_TELV(0x1b,GSM_A_PDU_TYPE_GM, DE_RAI, NULL); - /* Suspend Reference Number Suspend Reference Number/11.3.33 M TLV 3 */ - ELEM_MAND_TELV(0x1d,BSSGP_PDU_TYPE, DE_BBSGP_SUSPEND_REF_NO, NULL); + /* TLLI TLLI/11.3.35 M TLV 6 */ + ELEM_MAND_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI , NULL); + /* Routeing Area Routeing Area/11.3.31 M TLV 8 */ + ELEM_MAND_TELV(0x1b,GSM_A_PDU_TYPE_GM, DE_RAI, NULL); + /* Suspend Reference Number Suspend Reference Number/11.3.33 M TLV 3 */ + ELEM_MAND_TELV(0x1d,BSSGP_PDU_TYPE, DE_BBSGP_SUSPEND_REF_NO, NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); } /* - * 10.3.10 RESUME-ACK + * 10.3.10 RESUME-ACK */ static void bssgp_resume_ack(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* This PDU positively acknowledges the reception of a RESUME PDU for an MS. */ - /* Direction: SGSN to BSS */ - pinfo->link_dir = P2P_DIR_DL; + /* This PDU positively acknowledges the reception of a RESUME PDU for an MS. */ + /* Direction: SGSN to BSS */ + pinfo->link_dir = P2P_DIR_DL; - /* TLLI TLLI/11.3.35 M TLV 6 */ - ELEM_MAND_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI , NULL); - /* Routeing Area Routeing Area/11.3.31 M TLV 8 */ - ELEM_MAND_TELV(0x1b,GSM_A_PDU_TYPE_GM, DE_RAI, NULL); + /* TLLI TLLI/11.3.35 M TLV 6 */ + ELEM_MAND_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI , NULL); + /* Routeing Area Routeing Area/11.3.31 M TLV 8 */ + ELEM_MAND_TELV(0x1b,GSM_A_PDU_TYPE_GM, DE_RAI, NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); } /* - * 10.3.11 RESUME-NACK + * 10.3.11 RESUME-NACK */ static void bssgp_resume_nack(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* This PDU negatively acknowledges the reception of a RESUME PDU for an MS. */ - /* Direction: SGSN to BSS */ - pinfo->link_dir = P2P_DIR_DL; + /* This PDU negatively acknowledges the reception of a RESUME PDU for an MS. */ + /* Direction: SGSN to BSS */ + pinfo->link_dir = P2P_DIR_DL; - /* TLLI TLLI/11.3.35 M TLV 6 */ - ELEM_MAND_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI , NULL); - /* Routeing Area Routeing Area/11.3.31 M TLV 8 */ - ELEM_MAND_TELV(0x1b,GSM_A_PDU_TYPE_GM, DE_RAI, NULL); - /* Cause Cause/11.3.8 O TLV 3 */ - ELEM_OPT_TELV(BSSGP_IEI_CAUSE,BSSGP_PDU_TYPE, DE_BSSGP_CAUSE, NULL); + /* TLLI TLLI/11.3.35 M TLV 6 */ + ELEM_MAND_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI , NULL); + /* Routeing Area Routeing Area/11.3.31 M TLV 8 */ + ELEM_MAND_TELV(0x1b,GSM_A_PDU_TYPE_GM, DE_RAI, NULL); + /* Cause Cause/11.3.8 O TLV 3 */ + ELEM_OPT_TELV(BSSGP_IEI_CAUSE,BSSGP_PDU_TYPE, DE_BSSGP_CAUSE, NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); } /* - * 10.4 PDU functional definitions and contents at NM SAP - * 10.4.1 FLUSH-LL + * 10.4 PDU functional definitions and contents at NM SAP + * 10.4.1 FLUSH-LL */ static void bssgp_flush_ll(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* This PDU informs a BSS that an MS has moved from one cell to another. */ - /* Direction: SGSN to BSS */ - pinfo->link_dir = P2P_DIR_DL; + /* This PDU informs a BSS that an MS has moved from one cell to another. */ + /* Direction: SGSN to BSS */ + pinfo->link_dir = P2P_DIR_DL; - /* TLLI TLLI/11.3.35 M TLV 6 */ - ELEM_MAND_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI , NULL); - /* BVCI (old) BVCI/11.3.6 M TLV 4 */ - ELEM_MAND_TELV(BSSGP_IEI_BVCI, BSSGP_PDU_TYPE, DE_BSSGP_BVCI , " - Old"); - /* BVCI (new) BVCI/11.3.6 O TLV 4 */ - ELEM_OPT_TELV(BSSGP_IEI_BVCI, BSSGP_PDU_TYPE, DE_BSSGP_BVCI , " - New"); - /* NSEI (new) NSEI/11.3.48 O (note) TLV 4 */ - ELEM_OPT_TELV(0x3e, GSM_A_PDU_TYPE_RR, DE_BSSGP_NSEI , " - New"); + /* TLLI TLLI/11.3.35 M TLV 6 */ + ELEM_MAND_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI , NULL); + /* BVCI (old) BVCI/11.3.6 M TLV 4 */ + ELEM_MAND_TELV(BSSGP_IEI_BVCI, BSSGP_PDU_TYPE, DE_BSSGP_BVCI , " - Old"); + /* BVCI (new) BVCI/11.3.6 O TLV 4 */ + ELEM_OPT_TELV(BSSGP_IEI_BVCI, BSSGP_PDU_TYPE, DE_BSSGP_BVCI , " - New"); + /* NSEI (new) NSEI/11.3.48 O (note) TLV 4 */ + ELEM_OPT_TELV(0x3e, GSM_A_PDU_TYPE_RR, DE_BSSGP_NSEI , " - New"); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); } /* - * 10.4.2 FLUSH-LL-ACK + * 10.4.2 FLUSH-LL-ACK */ static void bssgp_flush_ll_ack(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* This PDU indicates that LLC-PDU(s) buffered for an MS in the old cell - * have been either deleted or transferred to the new cell within the routing area. */ - /* Direction: BSS to SGSN */ - pinfo->link_dir = P2P_DIR_UL; + /* This PDU indicates that LLC-PDU(s) buffered for an MS in the old cell + * have been either deleted or transferred to the new cell within the routing area. */ + /* Direction: BSS to SGSN */ + pinfo->link_dir = P2P_DIR_UL; - /* TLLI TLLI/11.3.35 M TLV 6 */ - ELEM_MAND_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI , NULL); - /* Flush Action Flush Action/11.3.13 M TLV 3 */ - ELEM_MAND_TELV(0x0c, BSSGP_PDU_TYPE, DE_BSSGP_FLUSH_ACTION , NULL); - /* BVCI (new) BVCI/11.3.13 C (note 1) TLV 4 */ - ELEM_OPT_TELV(BSSGP_IEI_BVCI, BSSGP_PDU_TYPE, DE_BSSGP_BVCI , " - New"); - /* Number of octets affected Number of octets affected/11.3.41 M TLV 5 */ - ELEM_MAND_TELV(BSSGP_IEI_NUMBER_OF_OCTETS_AFFECTED, BSSGP_PDU_TYPE, DE_BSSGP_NO_OF_OCT_AFFECTED , NULL); - /* NSEI (new) NSEI/11.3.48 C (note 2) TLV 4 */ - ELEM_OPT_TELV(0x3e, GSM_A_PDU_TYPE_RR, DE_BSSGP_NSEI , " - New"); + /* TLLI TLLI/11.3.35 M TLV 6 */ + ELEM_MAND_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI , NULL); + /* Flush Action Flush Action/11.3.13 M TLV 3 */ + ELEM_MAND_TELV(0x0c, BSSGP_PDU_TYPE, DE_BSSGP_FLUSH_ACTION , NULL); + /* BVCI (new) BVCI/11.3.13 C (note 1) TLV 4 */ + ELEM_OPT_TELV(BSSGP_IEI_BVCI, BSSGP_PDU_TYPE, DE_BSSGP_BVCI , " - New"); + /* Number of octets affected Number of octets affected/11.3.41 M TLV 5 */ + ELEM_MAND_TELV(BSSGP_IEI_NUMBER_OF_OCTETS_AFFECTED, BSSGP_PDU_TYPE, DE_BSSGP_NO_OF_OCT_AFFECTED , NULL); + /* NSEI (new) NSEI/11.3.48 C (note 2) TLV 4 */ + ELEM_OPT_TELV(0x3e, GSM_A_PDU_TYPE_RR, DE_BSSGP_NSEI , " - New"); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); } /* - * 10.4.3 LLC-DISCARDED + * 10.4.3 LLC-DISCARDED */ static void bssgp_llc_discarded(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* Direction: BSS to SGSN */ - pinfo->link_dir = P2P_DIR_UL; + /* Direction: BSS to SGSN */ + pinfo->link_dir = P2P_DIR_UL; - /* TLLI TLLI/11.3.35 M TLV 6 */ - ELEM_MAND_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI , NULL); - /* LLC Frames Discarded LLC Frames Discarded/11.3.16 M TLV 3 */ - ELEM_MAND_TELV(BSSGP_IEI_LLC_FRAMES_DISCARDED, BSSGP_PDU_TYPE, DE_BSSGP_LLC_FRAMES_DISC , NULL); - /* BVCI BVCI/11.3.6 M TLV 4 */ - ELEM_MAND_TELV(BSSGP_IEI_BVCI, BSSGP_PDU_TYPE, DE_BSSGP_BVCI , NULL); - /* Number of octets deleted Number of octets affected/11.3.41 M TLV 5 */ - ELEM_MAND_TELV(BSSGP_IEI_NUMBER_OF_OCTETS_AFFECTED, BSSGP_PDU_TYPE, DE_BSSGP_NO_OF_OCT_AFFECTED , NULL); - /* PFI (note) PFI/11.3.42 O TLV 3 */ - ELEM_OPT_TELV(BSSGP_IEI_PFI , GSM_A_PDU_TYPE_GM, DE_PACKET_FLOW_ID , NULL); + /* TLLI TLLI/11.3.35 M TLV 6 */ + ELEM_MAND_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI , NULL); + /* LLC Frames Discarded LLC Frames Discarded/11.3.16 M TLV 3 */ + ELEM_MAND_TELV(BSSGP_IEI_LLC_FRAMES_DISCARDED, BSSGP_PDU_TYPE, DE_BSSGP_LLC_FRAMES_DISC , NULL); + /* BVCI BVCI/11.3.6 M TLV 4 */ + ELEM_MAND_TELV(BSSGP_IEI_BVCI, BSSGP_PDU_TYPE, DE_BSSGP_BVCI , NULL); + /* Number of octets deleted Number of octets affected/11.3.41 M TLV 5 */ + ELEM_MAND_TELV(BSSGP_IEI_NUMBER_OF_OCTETS_AFFECTED, BSSGP_PDU_TYPE, DE_BSSGP_NO_OF_OCT_AFFECTED , NULL); + /* PFI (note) PFI/11.3.42 O TLV 3 */ + ELEM_OPT_TELV(BSSGP_IEI_PFI , GSM_A_PDU_TYPE_GM, DE_PACKET_FLOW_ID , NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); } /* - * 10.4.4 FLOW-CONTROL-BVC + * 10.4.4 FLOW-CONTROL-BVC */ static void bssgp_flow_control_bvc(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* This PDU informs the flow control mechanism at an SGSN of the status of a - * BVC's maximum acceptable SGSN to BSS throughput on the Gb interface. - */ - /* Direction: BSS to SGSN */ - pinfo->link_dir = P2P_DIR_UL; + /* This PDU informs the flow control mechanism at an SGSN of the status of a + * BVC's maximum acceptable SGSN to BSS throughput on the Gb interface. + */ + /* Direction: BSS to SGSN */ + pinfo->link_dir = P2P_DIR_UL; - /* Tag Tag/11.3.34 M TLV 3 */ - ELEM_MAND_TELV(BSSGP_IEI_TAG, BSSGP_PDU_TYPE, DE_BSSGP_TAG , NULL); - /* BVC Bucket Size BVC Bucket Size/11.3.5 M TLV 4 */ - ELEM_MAND_TELV(0x05, BSSGP_PDU_TYPE, DE_BSSGP_BVC_BUCKET_SIZE , NULL); - /* Bucket Leak Rate Bucket Leak Rate/11.3.4 M TLV 4 */ - ELEM_MAND_TELV(BSSGP_IEI_BUCKET_LEAK_RATE, BSSGP_PDU_TYPE, DE_BSSGP_BUCKET_LEAK_RATE , NULL); - /* Bmax default MS Bmax default MS/11.3.2 M TLV 4 */ - ELEM_MAND_TELV(0x01, BSSGP_PDU_TYPE, DE_BSSGP_BMAX_DEFAULT_MS , NULL); - /* R_default_MS R_default_MS/11.3.32 M TLV 4 */ - ELEM_MAND_TELV(0x1c, BSSGP_PDU_TYPE, DE_BSSGP_R_DEFAULT_MS , NULL); - /* Bucket_Full Ratio Bucket_Full Ratio/11.3.46 C TLV 3 */ - ELEM_OPT_TELV(BSSGP_IEI_BUCKET_FULL_RATIO, BSSGP_PDU_TYPE, DE_BSSGP_BUCKET_FULL_RATIO , NULL); - /* BVC Measurement BVC Measurement/11.3.7 O TLV 4 */ - ELEM_OPT_TELV(0x06, BSSGP_PDU_TYPE, DE_BSSGP_BVC_MEAS , NULL); - /* Flow Control Granularity (note) Flow Control Granularity/11.3.102 O TLV 3 */ - ELEM_OPT_TELV(0x7e, BSSGP_PDU_TYPE, DE_BSSGP_FLOW_CONTROL_GRAN , NULL); + /* Tag Tag/11.3.34 M TLV 3 */ + ELEM_MAND_TELV(BSSGP_IEI_TAG, BSSGP_PDU_TYPE, DE_BSSGP_TAG , NULL); + /* BVC Bucket Size BVC Bucket Size/11.3.5 M TLV 4 */ + ELEM_MAND_TELV(0x05, BSSGP_PDU_TYPE, DE_BSSGP_BVC_BUCKET_SIZE , NULL); + /* Bucket Leak Rate Bucket Leak Rate/11.3.4 M TLV 4 */ + ELEM_MAND_TELV(BSSGP_IEI_BUCKET_LEAK_RATE, BSSGP_PDU_TYPE, DE_BSSGP_BUCKET_LEAK_RATE , NULL); + /* Bmax default MS Bmax default MS/11.3.2 M TLV 4 */ + ELEM_MAND_TELV(0x01, BSSGP_PDU_TYPE, DE_BSSGP_BMAX_DEFAULT_MS , NULL); + /* R_default_MS R_default_MS/11.3.32 M TLV 4 */ + ELEM_MAND_TELV(0x1c, BSSGP_PDU_TYPE, DE_BSSGP_R_DEFAULT_MS , NULL); + /* Bucket_Full Ratio Bucket_Full Ratio/11.3.46 C TLV 3 */ + ELEM_OPT_TELV(BSSGP_IEI_BUCKET_FULL_RATIO, BSSGP_PDU_TYPE, DE_BSSGP_BUCKET_FULL_RATIO , NULL); + /* BVC Measurement BVC Measurement/11.3.7 O TLV 4 */ + ELEM_OPT_TELV(0x06, BSSGP_PDU_TYPE, DE_BSSGP_BVC_MEAS , NULL); + /* Flow Control Granularity (note) Flow Control Granularity/11.3.102 O TLV 3 */ + ELEM_OPT_TELV(0x7e, BSSGP_PDU_TYPE, DE_BSSGP_FLOW_CONTROL_GRAN , NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); } /* - * 10.4.5 FLOW-CONTROL-BVC-ACK + * 10.4.5 FLOW-CONTROL-BVC-ACK */ static void bssgp_flow_control_bvc_ack(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* This PDU informs the flow control mechanism at the BSS that the SGSN has received - * the FLOW-CONTROL-BVC PDU indicated by the Tag. - */ + /* This PDU informs the flow control mechanism at the BSS that the SGSN has received + * the FLOW-CONTROL-BVC PDU indicated by the Tag. + */ - /* Direction: SGSN to BSS */ - pinfo->link_dir = P2P_DIR_DL; + /* Direction: SGSN to BSS */ + pinfo->link_dir = P2P_DIR_DL; - /* Tag Tag/11.3.34 M TLV 3 */ - ELEM_MAND_TELV(BSSGP_IEI_TAG, BSSGP_PDU_TYPE, DE_BSSGP_TAG , NULL); + /* Tag Tag/11.3.34 M TLV 3 */ + ELEM_MAND_TELV(BSSGP_IEI_TAG, BSSGP_PDU_TYPE, DE_BSSGP_TAG , NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); } /* - * 10.4.6 FLOW-CONTROL-MS + * 10.4.6 FLOW-CONTROL-MS */ static void bssgp_flow_control_ms(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* This PDU informs the flow control mechanism at an SGSN of the status of an MS's - * maximum acceptable SGSN to BSS throughput on the Gb interface. - */ + /* This PDU informs the flow control mechanism at an SGSN of the status of an MS's + * maximum acceptable SGSN to BSS throughput on the Gb interface. + */ - /* Direction: BSS to SGSN */ - pinfo->link_dir = P2P_DIR_UL; + /* Direction: BSS to SGSN */ + pinfo->link_dir = P2P_DIR_UL; - /* TLLI TLLI/11.3.35 M TLV 6 */ - ELEM_MAND_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI , NULL); - /* Tag Tag/11.3.34 M TLV 3 */ - ELEM_MAND_TELV(BSSGP_IEI_TAG, BSSGP_PDU_TYPE, DE_BSSGP_TAG , NULL); - /* MS Bucket Size MS Bucket Size/11.3.21 M TLV 4 */ - ELEM_MAND_TELV(BSSGP_IEI_MS_BUCKET_SIZE, BSSGP_PDU_TYPE, DE_BSSGP_MS_BUCKET_SIZE , NULL); - /* Bucket Leak rate Bucket Leak rate/11.3.4 M TLV 4 */ - ELEM_MAND_TELV(BSSGP_IEI_BUCKET_LEAK_RATE, BSSGP_PDU_TYPE, DE_BSSGP_BUCKET_LEAK_RATE , NULL); - /* Bucket_Full Ratio Bucket_Full Ratio/11.3.46 C TLV 3 */ - ELEM_OPT_TELV(BSSGP_IEI_BUCKET_FULL_RATIO, BSSGP_PDU_TYPE, DE_BSSGP_BUCKET_FULL_RATIO , NULL); - /* Flow Control Granularity (note) Flow Control Granularity/11.3.102 O TLV 3 */ - ELEM_OPT_TELV(0x7e, BSSGP_PDU_TYPE, DE_BSSGP_FLOW_CONTROL_GRAN , NULL); + /* TLLI TLLI/11.3.35 M TLV 6 */ + ELEM_MAND_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI , NULL); + /* Tag Tag/11.3.34 M TLV 3 */ + ELEM_MAND_TELV(BSSGP_IEI_TAG, BSSGP_PDU_TYPE, DE_BSSGP_TAG , NULL); + /* MS Bucket Size MS Bucket Size/11.3.21 M TLV 4 */ + ELEM_MAND_TELV(BSSGP_IEI_MS_BUCKET_SIZE, BSSGP_PDU_TYPE, DE_BSSGP_MS_BUCKET_SIZE , NULL); + /* Bucket Leak rate Bucket Leak rate/11.3.4 M TLV 4 */ + ELEM_MAND_TELV(BSSGP_IEI_BUCKET_LEAK_RATE, BSSGP_PDU_TYPE, DE_BSSGP_BUCKET_LEAK_RATE , NULL); + /* Bucket_Full Ratio Bucket_Full Ratio/11.3.46 C TLV 3 */ + ELEM_OPT_TELV(BSSGP_IEI_BUCKET_FULL_RATIO, BSSGP_PDU_TYPE, DE_BSSGP_BUCKET_FULL_RATIO , NULL); + /* Flow Control Granularity (note) Flow Control Granularity/11.3.102 O TLV 3 */ + ELEM_OPT_TELV(0x7e, BSSGP_PDU_TYPE, DE_BSSGP_FLOW_CONTROL_GRAN , NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); } /* - * 10.4.7 FLOW-CONTROL-MS-ACK + * 10.4.7 FLOW-CONTROL-MS-ACK */ static void bssgp_flow_control_ms_ack(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* This PDU informs the flow control mechanism at the BSS that the SGSN has received - * the FLOW-CONTROL-MS PDU indicated by the TLLI and the Tag. */ - /* Direction: SGSN to BSS */ - pinfo->link_dir = P2P_DIR_DL; + /* This PDU informs the flow control mechanism at the BSS that the SGSN has received + * the FLOW-CONTROL-MS PDU indicated by the TLLI and the Tag. */ + /* Direction: SGSN to BSS */ + pinfo->link_dir = P2P_DIR_DL; - /* TLLI TLLI/11.3.35 M TLV 6 */ - ELEM_MAND_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI , NULL); - /* Tag Tag/11.3.34 M TLV 3 */ - ELEM_MAND_TELV(BSSGP_IEI_TAG, BSSGP_PDU_TYPE, DE_BSSGP_TAG , NULL); + /* TLLI TLLI/11.3.35 M TLV 6 */ + ELEM_MAND_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI , NULL); + /* Tag Tag/11.3.34 M TLV 3 */ + ELEM_MAND_TELV(BSSGP_IEI_TAG, BSSGP_PDU_TYPE, DE_BSSGP_TAG , NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); } /* - * 10.4.8 BVC-BLOCK + * 10.4.8 BVC-BLOCK */ static void bssgp_bvc_block(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* This PDU indicates that the contained BVC shall be blocked at the recipient entity. */ - /* BSS to SGSN */ - pinfo->link_dir = P2P_DIR_UL; + /* This PDU indicates that the contained BVC shall be blocked at the recipient entity. */ + /* BSS to SGSN */ + pinfo->link_dir = P2P_DIR_UL; - /* BVCI BVCI/11.3.6 M TLV 4 */ - ELEM_MAND_TELV(BSSGP_IEI_BVCI, BSSGP_PDU_TYPE, DE_BSSGP_BVCI , NULL); - /* Cause Cause/11.3.8 M TLV 3 */ - ELEM_MAND_TELV(BSSGP_IEI_CAUSE,BSSGP_PDU_TYPE, DE_BSSGP_CAUSE, NULL); + /* BVCI BVCI/11.3.6 M TLV 4 */ + ELEM_MAND_TELV(BSSGP_IEI_BVCI, BSSGP_PDU_TYPE, DE_BSSGP_BVCI , NULL); + /* Cause Cause/11.3.8 M TLV 3 */ + ELEM_MAND_TELV(BSSGP_IEI_CAUSE,BSSGP_PDU_TYPE, DE_BSSGP_CAUSE, NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); } /* - * 10.4.9 BVC-BLOCK-ACK + * 10.4.9 BVC-BLOCK-ACK */ static void bssgp_bvc_block_ack(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* This PDU acknowledges that a BVC has been blocked. */ - /* SGSN to BSS */ - pinfo->link_dir = P2P_DIR_DL; + /* This PDU acknowledges that a BVC has been blocked. */ + /* SGSN to BSS */ + pinfo->link_dir = P2P_DIR_DL; - /* BVCI BVCI/11.3.6 M TLV 4 */ - ELEM_MAND_TELV(BSSGP_IEI_BVCI, BSSGP_PDU_TYPE, DE_BSSGP_BVCI , NULL); + /* BVCI BVCI/11.3.6 M TLV 4 */ + ELEM_MAND_TELV(BSSGP_IEI_BVCI, BSSGP_PDU_TYPE, DE_BSSGP_BVCI , NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); } /* - * 10.4.10 BVC-UNBLOCK + * 10.4.10 BVC-UNBLOCK */ static void bssgp_bvc_un_block(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* This PDU indicates that the identified BVC shall be unblocked at the recipient entity. */ - /* Direction: BSS to SGSN */ - pinfo->link_dir = P2P_DIR_UL; + /* This PDU indicates that the identified BVC shall be unblocked at the recipient entity. */ + /* Direction: BSS to SGSN */ + pinfo->link_dir = P2P_DIR_UL; - /* BVCI BVCI/11.3.6 M TLV 4 */ - ELEM_MAND_TELV(BSSGP_IEI_BVCI, BSSGP_PDU_TYPE, DE_BSSGP_BVCI , NULL); + /* BVCI BVCI/11.3.6 M TLV 4 */ + ELEM_MAND_TELV(BSSGP_IEI_BVCI, BSSGP_PDU_TYPE, DE_BSSGP_BVCI , NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); } /* - * 10.4.11 BVC-UNBLOCK-ACK + * 10.4.11 BVC-UNBLOCK-ACK */ static void bssgp_bvc_un_block_ack(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* This PDU acknowledges that a BVC has been unblocked. */ - /* Direction: SGSN to BSS */ - pinfo->link_dir = P2P_DIR_DL; + /* This PDU acknowledges that a BVC has been unblocked. */ + /* Direction: SGSN to BSS */ + pinfo->link_dir = P2P_DIR_DL; - /* BVCI BVCI/11.3.6 M TLV 4 */ - ELEM_MAND_TELV(BSSGP_IEI_BVCI, BSSGP_PDU_TYPE, DE_BSSGP_BVCI , NULL); + /* BVCI BVCI/11.3.6 M TLV 4 */ + ELEM_MAND_TELV(BSSGP_IEI_BVCI, BSSGP_PDU_TYPE, DE_BSSGP_BVCI , NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); } /* - * 10.4.12 BVC-RESET + * 10.4.12 BVC-RESET */ static void bssgp_bvc_reset(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* This PDU indicates that BVC initialisation is required, e.g. because of a BVC failure. */ - /* Direction: SGSN to BSS, BSS to SGSN */ + /* This PDU indicates that BVC initialisation is required, e.g. because of a BVC failure. */ + /* Direction: SGSN to BSS, BSS to SGSN */ - /* BVCI BVCI/11.3.6 M TLV 4 */ - ELEM_MAND_TELV(BSSGP_IEI_BVCI, BSSGP_PDU_TYPE, DE_BSSGP_BVCI , NULL); - /* Cause Cause/11.3.8 M TLV 3 */ - ELEM_MAND_TELV(BSSGP_IEI_CAUSE,BSSGP_PDU_TYPE, DE_BSSGP_CAUSE, NULL); - /* Cell Identifier (note 1) C TLV 10 */ - ELEM_OPT_TELV(BSSGP_IEI_CELL_IDENTIFIER, BSSGP_PDU_TYPE, DE_BSSGP_CELL_ID , NULL); - /* Feature bitmap (note 2) Feature bitmap/11.3.45 O TLV 3 */ - ELEM_OPT_TELV(0x3b, BSSGP_PDU_TYPE, DE_BSSGP_FEATURE_BITMAP , NULL); - /* Extended Feature Bitmap (note 3) Extended Feature Bitmap/11.3.84 O TLV 3 */ - ELEM_OPT_TELV(0x69, BSSGP_PDU_TYPE, DE_BSSGP_EXT_FEATURE_BITMAP , NULL); + /* BVCI BVCI/11.3.6 M TLV 4 */ + ELEM_MAND_TELV(BSSGP_IEI_BVCI, BSSGP_PDU_TYPE, DE_BSSGP_BVCI , NULL); + /* Cause Cause/11.3.8 M TLV 3 */ + ELEM_MAND_TELV(BSSGP_IEI_CAUSE,BSSGP_PDU_TYPE, DE_BSSGP_CAUSE, NULL); + /* Cell Identifier (note 1) C TLV 10 */ + ELEM_OPT_TELV(BSSGP_IEI_CELL_IDENTIFIER, BSSGP_PDU_TYPE, DE_BSSGP_CELL_ID , NULL); + /* Feature bitmap (note 2) Feature bitmap/11.3.45 O TLV 3 */ + ELEM_OPT_TELV(0x3b, BSSGP_PDU_TYPE, DE_BSSGP_FEATURE_BITMAP , NULL); + /* Extended Feature Bitmap (note 3) Extended Feature Bitmap/11.3.84 O TLV 3 */ + ELEM_OPT_TELV(0x69, BSSGP_PDU_TYPE, DE_BSSGP_EXT_FEATURE_BITMAP , NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); } /* - * 10.4.13 BVC-RESET-ACK + * 10.4.13 BVC-RESET-ACK */ static void bssgp_bvc_reset_ack(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* This PDU indicates that BVC initialisation has been executed */ - /* BSS to SGSN, SGSN to BSS */ + /* This PDU indicates that BVC initialisation has been executed */ + /* BSS to SGSN, SGSN to BSS */ - /* BVCI BVCI/11.3.6 M TLV 4 */ - ELEM_MAND_TELV(BSSGP_IEI_BVCI, BSSGP_PDU_TYPE, DE_BSSGP_BVCI , NULL); - /* Cell Identifier (note 1) C TLV 10 */ - ELEM_OPT_TELV(BSSGP_IEI_CELL_IDENTIFIER, BSSGP_PDU_TYPE, DE_BSSGP_CELL_ID , NULL); - /* Feature bitmap (note 2) Feature bitmap/11.3.45 O TLV 3 */ - ELEM_OPT_TELV(0x3b, BSSGP_PDU_TYPE, DE_BSSGP_FEATURE_BITMAP , NULL); - /* Extended Feature Bitmap (note 3) Extended Feature Bitmap/11.3.84 O TLV 3 */ - ELEM_OPT_TELV(0x69, BSSGP_PDU_TYPE, DE_BSSGP_EXT_FEATURE_BITMAP , NULL); + /* BVCI BVCI/11.3.6 M TLV 4 */ + ELEM_MAND_TELV(BSSGP_IEI_BVCI, BSSGP_PDU_TYPE, DE_BSSGP_BVCI , NULL); + /* Cell Identifier (note 1) C TLV 10 */ + ELEM_OPT_TELV(BSSGP_IEI_CELL_IDENTIFIER, BSSGP_PDU_TYPE, DE_BSSGP_CELL_ID , NULL); + /* Feature bitmap (note 2) Feature bitmap/11.3.45 O TLV 3 */ + ELEM_OPT_TELV(0x3b, BSSGP_PDU_TYPE, DE_BSSGP_FEATURE_BITMAP , NULL); + /* Extended Feature Bitmap (note 3) Extended Feature Bitmap/11.3.84 O TLV 3 */ + ELEM_OPT_TELV(0x69, BSSGP_PDU_TYPE, DE_BSSGP_EXT_FEATURE_BITMAP , NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); } /* - * 10.4.14 STATUS + * 10.4.14 STATUS */ static void bssgp_status(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* This PDU indicates that an exception condition occurred. */ - /* Direction: SGSN to BSS, BSS to SGSN */ + /* This PDU indicates that an exception condition occurred. */ + /* Direction: SGSN to BSS, BSS to SGSN */ - /* Cause Cause/11.3.8 M TLV 3 */ - ELEM_MAND_TELV(BSSGP_IEI_CAUSE,BSSGP_PDU_TYPE, DE_BSSGP_CAUSE, NULL); - /* BVCI BVCI/11.3.6 C TLV 4 */ - ELEM_MAND_TELV(BSSGP_IEI_BVCI, BSSGP_PDU_TYPE, DE_BSSGP_BVCI , NULL); - /* PDU In Error (note) PDU In Error/11.3.24 O TLV 3-? */ - ELEM_MAND_TELV(0x15, BSSGP_PDU_TYPE, DE_BSSGP_PDU_IN_ERROR , NULL); + /* Cause Cause/11.3.8 M TLV 3 */ + ELEM_MAND_TELV(BSSGP_IEI_CAUSE,BSSGP_PDU_TYPE, DE_BSSGP_CAUSE, NULL); + /* BVCI BVCI/11.3.6 C TLV 4 */ + ELEM_MAND_TELV(BSSGP_IEI_BVCI, BSSGP_PDU_TYPE, DE_BSSGP_BVCI , NULL); + /* PDU In Error (note) PDU In Error/11.3.24 O TLV 3-? */ + ELEM_MAND_TELV(0x15, BSSGP_PDU_TYPE, DE_BSSGP_PDU_IN_ERROR , NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); } /* - * 10.4.15 SGSN-INVOKE-TRACE + * 10.4.15 SGSN-INVOKE-TRACE */ static void bssgp_sgsn_invoke_trace(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* This PDU indicates that the BSS shall begin the production of a trace record for an MS. */ - /* Direction: SGSN to BSS */ + /* This PDU indicates that the BSS shall begin the production of a trace record for an MS. */ + /* Direction: SGSN to BSS */ - pinfo->link_dir = P2P_DIR_UL; + pinfo->link_dir = P2P_DIR_UL; - /* Trace Type Trace Type/11.3.38 M TLV 3 */ - ELEM_MAND_TELV(0x22, BSSGP_PDU_TYPE, DE_BSSGP_BVCI , NULL); - /* Trace Reference Trace Reference/11.3.37 M TLV 4 */ - ELEM_MAND_TELV(0x21, BSSGP_PDU_TYPE, DE_BSSGP_TRACE_REF , NULL); - /* Trigger Id Trigger Id/11.3.40 O TLV 4-24 */ - ELEM_OPT_TELV(0x24, BSSGP_PDU_TYPE, DE_BSSGP_TRIGGER_ID , NULL); - /* Mobile Id Mobile Id/11.3.20 O TLV 3-10 */ - ELEM_OPT_TELV(0x11,GSM_A_PDU_TYPE_COMMON, DE_MID, NULL); - /* OMC Id OMC Id/11.3.23 O TLV 4-24 */ - ELEM_OPT_TELV(0x14,GSM_A_PDU_TYPE_COMMON, DE_BSSGP_OMC_ID, NULL); - /* TransactionId TransactionId/11.3.39 O TLV 4 */ - ELEM_OPT_TELV(0x23, BSSGP_PDU_TYPE, DE_BSSGP_TRANSACTION_ID , NULL); + /* Trace Type Trace Type/11.3.38 M TLV 3 */ + ELEM_MAND_TELV(0x22, BSSGP_PDU_TYPE, DE_BSSGP_BVCI , NULL); + /* Trace Reference Trace Reference/11.3.37 M TLV 4 */ + ELEM_MAND_TELV(0x21, BSSGP_PDU_TYPE, DE_BSSGP_TRACE_REF , NULL); + /* Trigger Id Trigger Id/11.3.40 O TLV 4-24 */ + ELEM_OPT_TELV(0x24, BSSGP_PDU_TYPE, DE_BSSGP_TRIGGER_ID , NULL); + /* Mobile Id Mobile Id/11.3.20 O TLV 3-10 */ + ELEM_OPT_TELV(0x11,GSM_A_PDU_TYPE_COMMON, DE_MID, NULL); + /* OMC Id OMC Id/11.3.23 O TLV 4-24 */ + ELEM_OPT_TELV(0x14,GSM_A_PDU_TYPE_COMMON, DE_BSSGP_OMC_ID, NULL); + /* TransactionId TransactionId/11.3.39 O TLV 4 */ + ELEM_OPT_TELV(0x23, BSSGP_PDU_TYPE, DE_BSSGP_TRANSACTION_ID , NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); } /* - * 10.4.16 DOWNLOAD-BSS-PFC + * 10.4.16 DOWNLOAD-BSS-PFC */ static void bssgp_download_bss_pfc(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* This PDU requests a SGSN to initiate a CREATE-BSS-PFC procedure. */ - /* Direction: BSS to SGSN */ - pinfo->link_dir = P2P_DIR_UL; + /* This PDU requests a SGSN to initiate a CREATE-BSS-PFC procedure. */ + /* Direction: BSS to SGSN */ + pinfo->link_dir = P2P_DIR_UL; - /* TLLI TLLI/11.3.35 M TLV 6 */ - ELEM_MAND_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI , NULL); - /* PFI PFI/11.3.42 M TLV 3 */ - ELEM_MAND_TELV(BSSGP_IEI_PFI , GSM_A_PDU_TYPE_GM, DE_PACKET_FLOW_ID , NULL); + /* TLLI TLLI/11.3.35 M TLV 6 */ + ELEM_MAND_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI , NULL); + /* PFI PFI/11.3.42 M TLV 3 */ + ELEM_MAND_TELV(BSSGP_IEI_PFI , GSM_A_PDU_TYPE_GM, DE_PACKET_FLOW_ID , NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); } /* - * 10.4.17 CREATE-BSS-PFC + * 10.4.17 CREATE-BSS-PFC */ static void bssgp_create_bss_pfc(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; - - curr_offset = offset; - curr_len = len; - - /* This PDU allows the SGSN to request that a BSS create or modify a BSS Packet Flow Context. */ - /* Direction: SGSN to BSS */ - pinfo->link_dir = P2P_DIR_DL; - - /* TLLI TLLI/11.3.35 M TLV 6 */ - ELEM_MAND_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI , NULL); - /* IMSI IMSI/11.3.14 O (note 4) TLV 5 -10 */ - ELEM_OPT_TELV(BSSGP_IEI_IMSI, BSSGP_PDU_TYPE, DE_BSSGP_IMSI , NULL); - /* PFI PFI/11.3.42 M TLV 3 */ - ELEM_MAND_TELV(BSSGP_IEI_PFI , GSM_A_PDU_TYPE_GM, DE_PACKET_FLOW_ID , NULL); - /* PFT GPRS Timer/11.3.44 M TLV 3 */ - ELEM_MAND_TELV(0x29, BSSGP_PDU_TYPE, DE_BSSGP_GPRS_TIMER , " - PFT"); - /* ABQP ABQP/11.3.43 M TLV 13-? */ - ELEM_MAND_TELV(0x3a , GSM_A_PDU_TYPE_GM, DE_QOS , NULL); - /* Service UTRAN CCO Service UTRAN CCO/11.3.47 O TLV 3 */ - ELEM_OPT_TELV(BSSGP_IEI_SERVICE_UTRAN_CCO, BSSGP_PDU_TYPE, DE_BSSGP_SERV_UTRAN_CCO, NULL); - /* MS Radio Access Capability MS Radio Access Capability/11.3.22 O (note 1) TLV 7-? */ - ELEM_OPT_TELV(BSSGP_IEI_MS_RADIO_ACCESS_CAPABILITY, GSM_A_PDU_TYPE_GM, DE_MS_RAD_ACC_CAP , NULL); - /* Allocation/Retention Priority Priority/11.3.27 O TLV 3 */ - ELEM_OPT_TELV(0x0b, GSM_A_PDU_TYPE_BSSMAP, BE_PRIO, NULL); - /* T10 GPRS Timer/11.3.44 C (note 2) TLV 3 */ - ELEM_MAND_TELV(BSSGP_IEI_GPRS_TIMER, BSSGP_PDU_TYPE, DE_BSSGP_GPRS_TIMER , " - T10"); - /* Inter RAT Handover Info Inter RAT Handover Info/11.3.94 O (note 3) TLV 3-? */ - ELEM_OPT_TELV(0x73, BSSGP_PDU_TYPE, DE_BSSGP_INTER_RAT_HO_INFO, NULL); - /* E-UTRAN Inter RAT Handover Info E-UTRAN Inter RAT Handover Info/11.3.104 O (note 3) TLV 3-? */ - ELEM_OPT_TELV(0x80, BSSGP_PDU_TYPE, DE_BSSGP_E_UTRAN_INTER_RAT_HO_INFO, NULL); - /* Subscriber Profile ID for RAT/Frequency priority (note 5) - * Subscriber Profile ID for RAT/Frequency priority/11.3.105 O TLV 3 - */ - ELEM_OPT_TELV(0x81, BSSGP_PDU_TYPE, DE_BSSGP_SUB_PROF_ID_F_RAT_FRQ_PRIO, NULL); - - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); -} - -/* - * 10.4.18 CREATE-BSS-PFC-ACK + guint32 curr_offset; + guint32 consumed; + guint curr_len; + + curr_offset = offset; + curr_len = len; + + /* This PDU allows the SGSN to request that a BSS create or modify a BSS Packet Flow Context. */ + /* Direction: SGSN to BSS */ + pinfo->link_dir = P2P_DIR_DL; + + /* TLLI TLLI/11.3.35 M TLV 6 */ + ELEM_MAND_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI , NULL); + /* IMSI IMSI/11.3.14 O (note 4) TLV 5 -10 */ + ELEM_OPT_TELV(BSSGP_IEI_IMSI, BSSGP_PDU_TYPE, DE_BSSGP_IMSI , NULL); + /* PFI PFI/11.3.42 M TLV 3 */ + ELEM_MAND_TELV(BSSGP_IEI_PFI , GSM_A_PDU_TYPE_GM, DE_PACKET_FLOW_ID , NULL); + /* PFT GPRS Timer/11.3.44 M TLV 3 */ + ELEM_MAND_TELV(0x29, BSSGP_PDU_TYPE, DE_BSSGP_GPRS_TIMER , " - PFT"); + /* ABQP ABQP/11.3.43 M TLV 13-? */ + ELEM_MAND_TELV(0x3a , GSM_A_PDU_TYPE_GM, DE_QOS , NULL); + /* Service UTRAN CCO Service UTRAN CCO/11.3.47 O TLV 3 */ + ELEM_OPT_TELV(BSSGP_IEI_SERVICE_UTRAN_CCO, BSSGP_PDU_TYPE, DE_BSSGP_SERV_UTRAN_CCO, NULL); + /* MS Radio Access Capability MS Radio Access Capability/11.3.22 O (note 1) TLV 7-? */ + ELEM_OPT_TELV(BSSGP_IEI_MS_RADIO_ACCESS_CAPABILITY, GSM_A_PDU_TYPE_GM, DE_MS_RAD_ACC_CAP , NULL); + /* Allocation/Retention Priority Priority/11.3.27 O TLV 3 */ + ELEM_OPT_TELV(0x0b, GSM_A_PDU_TYPE_BSSMAP, BE_PRIO, NULL); + /* T10 GPRS Timer/11.3.44 C (note 2) TLV 3 */ + ELEM_MAND_TELV(BSSGP_IEI_GPRS_TIMER, BSSGP_PDU_TYPE, DE_BSSGP_GPRS_TIMER , " - T10"); + /* Inter RAT Handover Info Inter RAT Handover Info/11.3.94 O (note 3) TLV 3-? */ + ELEM_OPT_TELV(0x73, BSSGP_PDU_TYPE, DE_BSSGP_INTER_RAT_HO_INFO, NULL); + /* E-UTRAN Inter RAT Handover Info E-UTRAN Inter RAT Handover Info/11.3.104 O (note 3) TLV 3-? */ + ELEM_OPT_TELV(0x80, BSSGP_PDU_TYPE, DE_BSSGP_E_UTRAN_INTER_RAT_HO_INFO, NULL); + /* Subscriber Profile ID for RAT/Frequency priority (note 5) + * Subscriber Profile ID for RAT/Frequency priority/11.3.105 O TLV 3 + */ + ELEM_OPT_TELV(0x81, BSSGP_PDU_TYPE, DE_BSSGP_SUB_PROF_ID_F_RAT_FRQ_PRIO, NULL); + + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); +} + +/* + * 10.4.18 CREATE-BSS-PFC-ACK */ static void bssgp_create_bss_pfc_ack(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* This PDU allows the BSS to acknowledge a request from the SGSN for the creation - * or modification of a BSS Packet Flow Context. - */ - /* Direction: BSS to SGSN */ - pinfo->link_dir = P2P_DIR_UL; + /* This PDU allows the BSS to acknowledge a request from the SGSN for the creation + * or modification of a BSS Packet Flow Context. + */ + /* Direction: BSS to SGSN */ + pinfo->link_dir = P2P_DIR_UL; - /* TLLI TLLI/11.3.35 M TLV 6 */ - ELEM_MAND_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI , NULL); - /* PFI PFI/11.3.42 M TLV 3 */ - ELEM_MAND_TELV(BSSGP_IEI_PFI , GSM_A_PDU_TYPE_GM, DE_PACKET_FLOW_ID , NULL); - /* ABQP ABQP/11.3.43 M TLV 13-? */ - ELEM_MAND_TELV(0x3a , GSM_A_PDU_TYPE_GM, DE_QOS , NULL); - /* Cause Cause/11.3.8 O TLV 3 */ - ELEM_OPT_TELV(BSSGP_IEI_CAUSE,BSSGP_PDU_TYPE, DE_BSSGP_CAUSE, NULL); + /* TLLI TLLI/11.3.35 M TLV 6 */ + ELEM_MAND_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI , NULL); + /* PFI PFI/11.3.42 M TLV 3 */ + ELEM_MAND_TELV(BSSGP_IEI_PFI , GSM_A_PDU_TYPE_GM, DE_PACKET_FLOW_ID , NULL); + /* ABQP ABQP/11.3.43 M TLV 13-? */ + ELEM_MAND_TELV(0x3a , GSM_A_PDU_TYPE_GM, DE_QOS , NULL); + /* Cause Cause/11.3.8 O TLV 3 */ + ELEM_OPT_TELV(BSSGP_IEI_CAUSE,BSSGP_PDU_TYPE, DE_BSSGP_CAUSE, NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); } /* - * 10.4.19 CREATE-BSS-PFC-NACK + * 10.4.19 CREATE-BSS-PFC-NACK */ static void bssgp_create_bss_pfc_nack(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* This PDU allows the BSS to Nack a request from the SGSN for the - * creation of a BSS Packet Flow Context - */ - /* Direction: BSS to SGSN */ - pinfo->link_dir = P2P_DIR_UL; + /* This PDU allows the BSS to Nack a request from the SGSN for the + * creation of a BSS Packet Flow Context + */ + /* Direction: BSS to SGSN */ + pinfo->link_dir = P2P_DIR_UL; - /* TLLI TLLI/11.3.35 M TLV 6 */ - ELEM_MAND_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI , NULL); - /* PFI PFI/11.3.42 M TLV 3 */ - ELEM_MAND_TELV(BSSGP_IEI_PFI , GSM_A_PDU_TYPE_GM, DE_PACKET_FLOW_ID , NULL); - /* Cause Cause/11.3.8 M TLV 3 */ - ELEM_MAND_TELV(BSSGP_IEI_CAUSE,BSSGP_PDU_TYPE, DE_BSSGP_CAUSE, NULL); + /* TLLI TLLI/11.3.35 M TLV 6 */ + ELEM_MAND_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI , NULL); + /* PFI PFI/11.3.42 M TLV 3 */ + ELEM_MAND_TELV(BSSGP_IEI_PFI , GSM_A_PDU_TYPE_GM, DE_PACKET_FLOW_ID , NULL); + /* Cause Cause/11.3.8 M TLV 3 */ + ELEM_MAND_TELV(BSSGP_IEI_CAUSE,BSSGP_PDU_TYPE, DE_BSSGP_CAUSE, NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); } /* - * 10.4.20 MODIFY-BSS-PFC + * 10.4.20 MODIFY-BSS-PFC */ static void bssgp_modify_bss_pfc(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* This PDU allows the BSS to request a modification of a BSS Packet Flow Context. */ - /* Direction: BSS to SGSN */ - pinfo->link_dir = P2P_DIR_UL; + /* This PDU allows the BSS to request a modification of a BSS Packet Flow Context. */ + /* Direction: BSS to SGSN */ + pinfo->link_dir = P2P_DIR_UL; - /* TLLI TLLI/11.3.35 M TLV 6 */ - ELEM_MAND_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI , NULL); - /* PFI PFI/11.3.42 M TLV 3 */ - ELEM_MAND_TELV(BSSGP_IEI_PFI , GSM_A_PDU_TYPE_GM, DE_PACKET_FLOW_ID , NULL); - /* ABQP ABQP/11.3.43 M TLV 13-? */ - ELEM_MAND_TELV(0x3a , GSM_A_PDU_TYPE_GM, DE_QOS , NULL); + /* TLLI TLLI/11.3.35 M TLV 6 */ + ELEM_MAND_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI , NULL); + /* PFI PFI/11.3.42 M TLV 3 */ + ELEM_MAND_TELV(BSSGP_IEI_PFI , GSM_A_PDU_TYPE_GM, DE_PACKET_FLOW_ID , NULL); + /* ABQP ABQP/11.3.43 M TLV 13-? */ + ELEM_MAND_TELV(0x3a , GSM_A_PDU_TYPE_GM, DE_QOS , NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); } /* - * 10.4.21 MODIFY-BSS-PFC-ACK + * 10.4.21 MODIFY-BSS-PFC-ACK */ static void bssgp_modify_bss_pfc_ack(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* This PDU allows the SGSN to acknowledge a modification to a BSS Packet Flow Context. */ - /* Direction: SGSN to BSS */ - pinfo->link_dir = P2P_DIR_DL; + /* This PDU allows the SGSN to acknowledge a modification to a BSS Packet Flow Context. */ + /* Direction: SGSN to BSS */ + pinfo->link_dir = P2P_DIR_DL; - /* TLLI TLLI/11.3.35 M TLV 6 */ - ELEM_MAND_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI , NULL); - /* PFI PFI/11.3.42 M TLV 3 */ - ELEM_MAND_TELV(BSSGP_IEI_PFI , GSM_A_PDU_TYPE_GM, DE_PACKET_FLOW_ID , NULL); - /* PFT GPRS Timer/11.3.44 M TLV 3 */ - ELEM_MAND_TELV(BSSGP_IEI_GPRS_TIMER, BSSGP_PDU_TYPE, DE_BSSGP_GPRS_TIMER , " - PFT"); - /* ABQP ABQP/11.3.43 M TLV 13-? */ - ELEM_MAND_TELV(0x3a , GSM_A_PDU_TYPE_GM, DE_QOS , NULL); + /* TLLI TLLI/11.3.35 M TLV 6 */ + ELEM_MAND_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI , NULL); + /* PFI PFI/11.3.42 M TLV 3 */ + ELEM_MAND_TELV(BSSGP_IEI_PFI , GSM_A_PDU_TYPE_GM, DE_PACKET_FLOW_ID , NULL); + /* PFT GPRS Timer/11.3.44 M TLV 3 */ + ELEM_MAND_TELV(BSSGP_IEI_GPRS_TIMER, BSSGP_PDU_TYPE, DE_BSSGP_GPRS_TIMER , " - PFT"); + /* ABQP ABQP/11.3.43 M TLV 13-? */ + ELEM_MAND_TELV(0x3a , GSM_A_PDU_TYPE_GM, DE_QOS , NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); } /* - * 10.4.22 DELETE-BSS-PFC + * 10.4.22 DELETE-BSS-PFC */ static void bssgp_delete_bss_pfc(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* This PDU allows the SGSN to request that a BSS delete a BSS Packet Flow Context. */ - /* Direction: SGSN to BSS */ - pinfo->link_dir = P2P_DIR_DL; + /* This PDU allows the SGSN to request that a BSS delete a BSS Packet Flow Context. */ + /* Direction: SGSN to BSS */ + pinfo->link_dir = P2P_DIR_DL; - /* TLLI TLLI/11.3.35 M TLV 6 */ - ELEM_MAND_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI , NULL); - /* PFI PFI/11.3.42 M TLV 3 */ - ELEM_MAND_TELV(BSSGP_IEI_PFI , GSM_A_PDU_TYPE_GM, DE_PACKET_FLOW_ID , NULL); + /* TLLI TLLI/11.3.35 M TLV 6 */ + ELEM_MAND_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI , NULL); + /* PFI PFI/11.3.42 M TLV 3 */ + ELEM_MAND_TELV(BSSGP_IEI_PFI , GSM_A_PDU_TYPE_GM, DE_PACKET_FLOW_ID , NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); } /* - * 10.4.23 DELETE-BSS-PFC-ACK + * 10.4.23 DELETE-BSS-PFC-ACK */ static void bssgp_delete_bss_pfc_ack(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* This PDU allows the BSS to acknowledge a request for the deletion of a BSS Packet Flow Context. */ - /* Direction: BSS to SGSN */ - pinfo->link_dir = P2P_DIR_UL; + /* This PDU allows the BSS to acknowledge a request for the deletion of a BSS Packet Flow Context. */ + /* Direction: BSS to SGSN */ + pinfo->link_dir = P2P_DIR_UL; - /* TLLI TLLI/11.3.35 M TLV 6 */ - ELEM_MAND_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI , NULL); - /* PFI PFI/11.3.42 M TLV 3 */ - ELEM_MAND_TELV(BSSGP_IEI_PFI , GSM_A_PDU_TYPE_GM, DE_PACKET_FLOW_ID , NULL); + /* TLLI TLLI/11.3.35 M TLV 6 */ + ELEM_MAND_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI , NULL); + /* PFI PFI/11.3.42 M TLV 3 */ + ELEM_MAND_TELV(BSSGP_IEI_PFI , GSM_A_PDU_TYPE_GM, DE_PACKET_FLOW_ID , NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); } /* - * 10.4.24 FLOW-CONTROL-PFC + * 10.4.24 FLOW-CONTROL-PFC */ static void bssgp_flow_cntrl_pfc(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* This PDU provides the SGSN with flow control information regarding one or more PFC(s) of a given Mobile Station. */ - /* Direction: BSS to SGSN */ - pinfo->link_dir = P2P_DIR_UL; + /* This PDU provides the SGSN with flow control information regarding one or more PFC(s) of a given Mobile Station. */ + /* Direction: BSS to SGSN */ + pinfo->link_dir = P2P_DIR_UL; - /* TLLI TLLI/11.3.35 M TLV 6 */ - ELEM_MAND_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI , NULL); - /* Tag Tag/11.3.34 M TLV 3 */ - ELEM_MAND_TELV(BSSGP_IEI_TAG, BSSGP_PDU_TYPE, DE_BSSGP_TAG , NULL); - /* MS Bucket Size MS Bucket Size/11.3.21 O TLV 4 */ - ELEM_OPT_TELV(BSSGP_IEI_MS_BUCKET_SIZE, BSSGP_PDU_TYPE, DE_BSSGP_MS_BUCKET_SIZE , NULL); - /* Bucket Leak rate Bucket Leak rate/11.3.4 O TLV 4 */ - ELEM_OPT_TELV(0x3b, BSSGP_PDU_TYPE, DE_BSSGP_FEATURE_BITMAP , NULL); - /* Bucket_Full Ratio Bucket_Full Ratio/11.3.46 O TLV 3 */ - ELEM_OPT_TELV(BSSGP_IEI_BUCKET_FULL_RATIO, BSSGP_PDU_TYPE, DE_BSSGP_BUCKET_FULL_RATIO , NULL); - /* PFC flow control parameters PFC flow control parameters/11.3.68 M TLV */ - ELEM_MAND_TELV(0x52, BSSGP_PDU_TYPE, DE_BSSGP_PFC_FLOW_CTRL , NULL); - /* Flow Control Granularity (note) Flow Control Granularity/11.3.102 O TLV 3 */ - ELEM_OPT_TELV(0x7e, BSSGP_PDU_TYPE, DE_BSSGP_FLOW_CONTROL_GRAN , NULL); + /* TLLI TLLI/11.3.35 M TLV 6 */ + ELEM_MAND_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI , NULL); + /* Tag Tag/11.3.34 M TLV 3 */ + ELEM_MAND_TELV(BSSGP_IEI_TAG, BSSGP_PDU_TYPE, DE_BSSGP_TAG , NULL); + /* MS Bucket Size MS Bucket Size/11.3.21 O TLV 4 */ + ELEM_OPT_TELV(BSSGP_IEI_MS_BUCKET_SIZE, BSSGP_PDU_TYPE, DE_BSSGP_MS_BUCKET_SIZE , NULL); + /* Bucket Leak rate Bucket Leak rate/11.3.4 O TLV 4 */ + ELEM_OPT_TELV(0x3b, BSSGP_PDU_TYPE, DE_BSSGP_FEATURE_BITMAP , NULL); + /* Bucket_Full Ratio Bucket_Full Ratio/11.3.46 O TLV 3 */ + ELEM_OPT_TELV(BSSGP_IEI_BUCKET_FULL_RATIO, BSSGP_PDU_TYPE, DE_BSSGP_BUCKET_FULL_RATIO , NULL); + /* PFC flow control parameters PFC flow control parameters/11.3.68 M TLV */ + ELEM_MAND_TELV(0x52, BSSGP_PDU_TYPE, DE_BSSGP_PFC_FLOW_CTRL , NULL); + /* Flow Control Granularity (note) Flow Control Granularity/11.3.102 O TLV 3 */ + ELEM_OPT_TELV(0x7e, BSSGP_PDU_TYPE, DE_BSSGP_FLOW_CONTROL_GRAN , NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); } /* - * 10.4.25 FLOW-CONTROL-PFC-ACK + * 10.4.25 FLOW-CONTROL-PFC-ACK */ static void bssgp_flow_cntrl_pfc_ack(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* This PDU informs the flow control mechanism at the BSS that the SGSN has received the FLOW-CONTROL-PFC - * PDU indicated by the TLLI and the Tag. - */ - /* Direction: SGSN to BSS */ - pinfo->link_dir = P2P_DIR_DL; + /* This PDU informs the flow control mechanism at the BSS that the SGSN has received the FLOW-CONTROL-PFC + * PDU indicated by the TLLI and the Tag. + */ + /* Direction: SGSN to BSS */ + pinfo->link_dir = P2P_DIR_DL; - /* TLLI TLLI/11.3.35 M TLV 6 */ - ELEM_MAND_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI , NULL); - /* Tag Tag/11.3.34 M TLV 3 */ - ELEM_MAND_TELV(BSSGP_IEI_TAG, BSSGP_PDU_TYPE, DE_BSSGP_TAG , NULL); + /* TLLI TLLI/11.3.35 M TLV 6 */ + ELEM_MAND_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI , NULL); + /* Tag Tag/11.3.34 M TLV 3 */ + ELEM_MAND_TELV(BSSGP_IEI_TAG, BSSGP_PDU_TYPE, DE_BSSGP_TAG , NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); } /* - * 10.4.26 DELETE-BSS-PFC-REQ + * 10.4.26 DELETE-BSS-PFC-REQ */ static void bssgp_delete_bss_pfc_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* This PDU allows the BSS to inform the SGSN that the BSS Packet Flow Context cannot be supported anymore */ - /* Direction: BSS to SGSN */ - pinfo->link_dir = P2P_DIR_UL; + /* This PDU allows the BSS to inform the SGSN that the BSS Packet Flow Context cannot be supported anymore */ + /* Direction: BSS to SGSN */ + pinfo->link_dir = P2P_DIR_UL; - /* TLLI TLLI/11.3.35 M TLV 6 */ - ELEM_MAND_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI , NULL); - /* PFI PFI/11.3.42 M TLV 3 */ - ELEM_MAND_TELV(BSSGP_IEI_PFI , GSM_A_PDU_TYPE_GM, DE_PACKET_FLOW_ID , NULL); - /* Cause Cause/11.3.8 M TLV 3 */ - ELEM_MAND_TELV(BSSGP_IEI_CAUSE,BSSGP_PDU_TYPE, DE_BSSGP_CAUSE, NULL); + /* TLLI TLLI/11.3.35 M TLV 6 */ + ELEM_MAND_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI , NULL); + /* PFI PFI/11.3.42 M TLV 3 */ + ELEM_MAND_TELV(BSSGP_IEI_PFI , GSM_A_PDU_TYPE_GM, DE_PACKET_FLOW_ID , NULL); + /* Cause Cause/11.3.8 M TLV 3 */ + ELEM_MAND_TELV(BSSGP_IEI_CAUSE,BSSGP_PDU_TYPE, DE_BSSGP_CAUSE, NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); } /* - * 10.4.27 PS-HANDOVER-REQUIRED + * 10.4.27 PS-HANDOVER-REQUIRED */ static void bssgp_ps_ho_required(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; - - curr_offset = offset; - curr_len = len; - - /* This PDU initiates the allocation of resources in the target system for an MS. */ - /* Direction: BSS to SGSN */ - pinfo->link_dir = P2P_DIR_UL; - - /* TLLI TLLI/11.3.35 M TLV 6 */ - ELEM_MAND_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI , NULL); - /* Cause Cause/11.3.8 M TLV 3 */ - ELEM_MAND_TELV(BSSGP_IEI_CAUSE,BSSGP_PDU_TYPE, DE_BSSGP_CAUSE, NULL); - /* Source Cell Identifier Cell Identifier/11.3.9 M TLV 10 */ - ELEM_MAND_TELV(BSSGP_IEI_CELL_IDENTIFIER, BSSGP_PDU_TYPE, DE_BSSGP_CELL_ID , " - Source"); - /* Target Cell Identifier (note 2) Cell Identifier/11.3.9 C TLV 10 */ - ELEM_OPT_TELV(BSSGP_IEI_CELL_IDENTIFIER, BSSGP_PDU_TYPE, DE_BSSGP_CELL_ID , " - Target"); - /* Source BSS to Target BSS Transparent Container (note 1) - * Source BSS to Target BSS Transparent Container/11.3.79 C TLV 10-? - */ - ELEM_OPT_TELV(0x64,BSSGP_PDU_TYPE, DE_BSSGP_SOURCE_BSS_TO_TARGET_BSS_TRANSP_CONT, NULL); - /* Target RNC Identifier (note 2) (note 3) RNC Identifier/11.3.87 C TLV 10 */ - ELEM_OPT_TELV(0x6c,BSSGP_PDU_TYPE, BE_BSSGP_RNC_ID, " - Target"); - /* Source to Target Transparent Container (note 1) - * Source to Target Transparent Container/11.3.85 C TLV 3-? - */ - ELEM_OPT_TELV(0x6a,BSSGP_PDU_TYPE, DE_BSSGP_SRC_TO_TRG_TRANSP_CONT, NULL); - /* Active PFCs List Active PFCs List/11.3.95c M TLV 3-? */ - ELEM_OPT_TELV(0x77,BSSGP_PDU_TYPE, DE_BSSGP_ACTIVE_PFCS_LIST, NULL); - /* Target eNB identifier (note 2) (note 3) eNB Identifier/11.3.103 C TLV 3-n */ - ELEM_OPT_TELV(0x7f,BSSGP_PDU_TYPE, DE_BSSGP_ENB_ID, " - Target"); - /* Reliable Inter RAT Handover Info (note 4) - * Reliable Inter RAT Handover Info/11.3.107 C TLV 3 - */ - ELEM_OPT_TELV(0x83,BSSGP_PDU_TYPE, DE_BSSGP_RELIABLE_INTER_RAT_HO_INF, NULL); - /* CSG Identifier (note 5) CSG Identifier/11.3.109 C TLV 7 */ - ELEM_OPT_TELV(0x85,BSSGP_PDU_TYPE, DE_BSSGP_CSG_ID, NULL); - /* TAC (note 6) Tracking Area Code/11.3.110 C TLV 5 */ - ELEM_OPT_TELV(0x86, NAS_PDU_TYPE_EMM, DE_EMM_TRAC_AREA_ID, NULL); - - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); -} -/* - * 10.4.28 PS-HANDOVER-REQUIRED-ACK + guint32 curr_offset; + guint32 consumed; + guint curr_len; + + curr_offset = offset; + curr_len = len; + + /* This PDU initiates the allocation of resources in the target system for an MS. */ + /* Direction: BSS to SGSN */ + pinfo->link_dir = P2P_DIR_UL; + + /* TLLI TLLI/11.3.35 M TLV 6 */ + ELEM_MAND_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI , NULL); + /* Cause Cause/11.3.8 M TLV 3 */ + ELEM_MAND_TELV(BSSGP_IEI_CAUSE,BSSGP_PDU_TYPE, DE_BSSGP_CAUSE, NULL); + /* Source Cell Identifier Cell Identifier/11.3.9 M TLV 10 */ + ELEM_MAND_TELV(BSSGP_IEI_CELL_IDENTIFIER, BSSGP_PDU_TYPE, DE_BSSGP_CELL_ID , " - Source"); + /* Target Cell Identifier (note 2) Cell Identifier/11.3.9 C TLV 10 */ + ELEM_OPT_TELV(BSSGP_IEI_CELL_IDENTIFIER, BSSGP_PDU_TYPE, DE_BSSGP_CELL_ID , " - Target"); + /* Source BSS to Target BSS Transparent Container (note 1) + * Source BSS to Target BSS Transparent Container/11.3.79 C TLV 10-? + */ + ELEM_OPT_TELV(0x64,BSSGP_PDU_TYPE, DE_BSSGP_SOURCE_BSS_TO_TARGET_BSS_TRANSP_CONT, NULL); + /* Target RNC Identifier (note 2) (note 3) RNC Identifier/11.3.87 C TLV 10 */ + ELEM_OPT_TELV(0x6c,BSSGP_PDU_TYPE, BE_BSSGP_RNC_ID, " - Target"); + /* Source to Target Transparent Container (note 1) + * Source to Target Transparent Container/11.3.85 C TLV 3-? + */ + ELEM_OPT_TELV(0x6a,BSSGP_PDU_TYPE, DE_BSSGP_SRC_TO_TRG_TRANSP_CONT, NULL); + /* Active PFCs List Active PFCs List/11.3.95c M TLV 3-? */ + ELEM_OPT_TELV(0x77,BSSGP_PDU_TYPE, DE_BSSGP_ACTIVE_PFCS_LIST, NULL); + /* Target eNB identifier (note 2) (note 3) eNB Identifier/11.3.103 C TLV 3-n */ + ELEM_OPT_TELV(0x7f,BSSGP_PDU_TYPE, DE_BSSGP_ENB_ID, " - Target"); + /* Reliable Inter RAT Handover Info (note 4) + * Reliable Inter RAT Handover Info/11.3.107 C TLV 3 + */ + ELEM_OPT_TELV(0x83,BSSGP_PDU_TYPE, DE_BSSGP_RELIABLE_INTER_RAT_HO_INF, NULL); + /* CSG Identifier (note 5) CSG Identifier/11.3.109 C TLV 7 */ + ELEM_OPT_TELV(0x85,BSSGP_PDU_TYPE, DE_BSSGP_CSG_ID, NULL); + /* TAC (note 6) Tracking Area Code/11.3.110 C TLV 5 */ + ELEM_OPT_TELV(0x86, NAS_PDU_TYPE_EMM, DE_EMM_TRAC_AREA_ID, NULL); + + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); +} +/* + * 10.4.28 PS-HANDOVER-REQUIRED-ACK */ static void bssgp_ps_ho_required_ack(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* This PDU indicates that resources have been allocated in the target system and - * that the BSS may initiate the channel change attempt for the corresponding MS. - */ - /* Direction: SGSN to BSS */ - pinfo->link_dir = P2P_DIR_DL; + /* This PDU indicates that resources have been allocated in the target system and + * that the BSS may initiate the channel change attempt for the corresponding MS. + */ + /* Direction: SGSN to BSS */ + pinfo->link_dir = P2P_DIR_DL; - /* TLLI TLLI/11.3.35 M TLV 6 */ - ELEM_MAND_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI , NULL); - /* List of set-up PFCs List of set-up PFCs/11.3.83 M TLV 3-?S */ - ELEM_MAND_TELV(0x68,BSSGP_PDU_TYPE, DE_BSSGP_LIST_OF_SETUP_PFCS, NULL); - /* Target BSS to Source BSS Transparent Container (note) - * Target BSS to Source BSS Transparent Container/11.3.80 C TLV 3-? - */ - ELEM_MAND_TELV(0x65,BSSGP_PDU_TYPE, DE_BSSGP_TARGET_BSS_TO_SOURCE_BSS_TRANSP_CONT, NULL); - /* Target to Source Transparent Container (note) - * Target to Source Transparent Container/11.3.86 C TLV 3-? - */ - ELEM_MAND_TELV(0x6b,BSSGP_PDU_TYPE, DE_BSSGP_TRG_TO_SRC_TRANSP_CONT, NULL); + /* TLLI TLLI/11.3.35 M TLV 6 */ + ELEM_MAND_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI , NULL); + /* List of set-up PFCs List of set-up PFCs/11.3.83 M TLV 3-?S */ + ELEM_MAND_TELV(0x68,BSSGP_PDU_TYPE, DE_BSSGP_LIST_OF_SETUP_PFCS, NULL); + /* Target BSS to Source BSS Transparent Container (note) + * Target BSS to Source BSS Transparent Container/11.3.80 C TLV 3-? + */ + ELEM_MAND_TELV(0x65,BSSGP_PDU_TYPE, DE_BSSGP_TARGET_BSS_TO_SOURCE_BSS_TRANSP_CONT, NULL); + /* Target to Source Transparent Container (note) + * Target to Source Transparent Container/11.3.86 C TLV 3-? + */ + ELEM_MAND_TELV(0x6b,BSSGP_PDU_TYPE, DE_BSSGP_TRG_TO_SRC_TRANSP_CONT, NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); } /* - * 10.4.29 PS-HANDOVER-REQUIRED-NACK + * 10.4.29 PS-HANDOVER-REQUIRED-NACK */ static void bssgp_ps_ho_required_nack(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* This PDU informs the source BSS about failed resource allocation in the target system. */ - /* Direction: SGSN to BSS */ - pinfo->link_dir = P2P_DIR_DL; + /* This PDU informs the source BSS about failed resource allocation in the target system. */ + /* Direction: SGSN to BSS */ + pinfo->link_dir = P2P_DIR_DL; - /* TLLI TLLI/11.3.35 M TLV 6 */ - ELEM_MAND_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI , NULL); - /* Cause Cause/11.3.8 M TLV 3 */ - ELEM_MAND_TELV(BSSGP_IEI_CAUSE,BSSGP_PDU_TYPE, DE_BSSGP_CAUSE, NULL); + /* TLLI TLLI/11.3.35 M TLV 6 */ + ELEM_MAND_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI , NULL); + /* Cause Cause/11.3.8 M TLV 3 */ + ELEM_MAND_TELV(BSSGP_IEI_CAUSE,BSSGP_PDU_TYPE, DE_BSSGP_CAUSE, NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); } /* - * 10.4.30 PS-HANDOVER-REQUEST + * 10.4.30 PS-HANDOVER-REQUEST */ static void bssgp_ps_ho_request(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; - - curr_offset = offset; - curr_len = len; - - /* This PDU initiates the allocation of resources for one or more PFCs in the target BSS for an MS. */ - /* Direction: SGSN to BSS */ - pinfo->link_dir = P2P_DIR_DL; - - /* TLLI TLLI/11.3.35 M TLV 6 */ - ELEM_MAND_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI , NULL); - /* IMSI IMSI/11.3.14 M TLV 5-10 */ - ELEM_MAND_TELV(BSSGP_IEI_IMSI, BSSGP_PDU_TYPE, DE_BSSGP_IMSI , NULL); - /* Cause Cause/11.3.8 M TLV 3 */ - ELEM_MAND_TELV(BSSGP_IEI_CAUSE,BSSGP_PDU_TYPE, DE_BSSGP_CAUSE, NULL); - /* Source Cell Identifier (note 1) Cell Identifier/11.3.9 C TLV 10 */ - ELEM_OPT_TELV(BSSGP_IEI_CELL_IDENTIFIER, BSSGP_PDU_TYPE, DE_BSSGP_CELL_ID , " - Source"); - /* Source RNC Identifier (note 1) RNC Identifier/11.3.87 C TLV 10 */ - ELEM_OPT_TELV(0x6c,BSSGP_PDU_TYPE, BE_BSSGP_RNC_ID, " - Source"); - /* Target Cell Identifier Cell Identifier/11.3.9 M TLV 10 */ - ELEM_OPT_TELV(BSSGP_IEI_CELL_IDENTIFIER, BSSGP_PDU_TYPE, DE_BSSGP_CELL_ID , " - Target"); - /* Source BSS to Target BSS Transparent Container Source BSS to Target BSS Transparent Container/11.3.79 M TLV 7-? */ - ELEM_OPT_TELV(0x64,BSSGP_PDU_TYPE, DE_BSSGP_SOURCE_BSS_TO_TARGET_BSS_TRANSP_CONT, NULL); - /* PFCs to be set-up list PFCs to be set-up list/11.3.82 M TLV 22-? */ - ELEM_OPT_TELV(0x67,BSSGP_PDU_TYPE, DE_BSSGP_PFCS_TO_BE_SET_UP_LIST, NULL); - /* NAS container for PS Handover NAS container for PS Handover/11.3.81 O TLV 3-? */ - ELEM_OPT_TELV(0x66,GSM_A_PDU_TYPE_COMMON, DE_NAS_CONT_FOR_PS_HO, NULL); - /* Service UTRAN CCO Service UTRAN CCO/11.3.47 O TLV 3 */ - ELEM_OPT_TELV(BSSGP_IEI_SERVICE_UTRAN_CCO, BSSGP_PDU_TYPE, DE_BSSGP_SERV_UTRAN_CCO, NULL); - /* Subscriber Profile ID for RAT/Frequency priority (note 2) Subscriber Profile ID for RAT/Frequency priority/11.3.105 O TLV 3 */ - ELEM_OPT_TELV(0x81, BSSGP_PDU_TYPE, DE_BSSGP_SUB_PROF_ID_F_RAT_FRQ_PRIO, NULL); - /* Reliable Inter RAT Handover Info (note 3) Reliable Inter RAT Handover Info/11.3.107 C TLV 3 */ - ELEM_OPT_TELV(0x83,BSSGP_PDU_TYPE, DE_BSSGP_RELIABLE_INTER_RAT_HO_INF, NULL); - - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); -} - -/* - * 10.4.31 PS-HANDOVER-REQUEST-ACK + guint32 curr_offset; + guint32 consumed; + guint curr_len; + + curr_offset = offset; + curr_len = len; + + /* This PDU initiates the allocation of resources for one or more PFCs in the target BSS for an MS. */ + /* Direction: SGSN to BSS */ + pinfo->link_dir = P2P_DIR_DL; + + /* TLLI TLLI/11.3.35 M TLV 6 */ + ELEM_MAND_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI , NULL); + /* IMSI IMSI/11.3.14 M TLV 5-10 */ + ELEM_MAND_TELV(BSSGP_IEI_IMSI, BSSGP_PDU_TYPE, DE_BSSGP_IMSI , NULL); + /* Cause Cause/11.3.8 M TLV 3 */ + ELEM_MAND_TELV(BSSGP_IEI_CAUSE,BSSGP_PDU_TYPE, DE_BSSGP_CAUSE, NULL); + /* Source Cell Identifier (note 1) Cell Identifier/11.3.9 C TLV 10 */ + ELEM_OPT_TELV(BSSGP_IEI_CELL_IDENTIFIER, BSSGP_PDU_TYPE, DE_BSSGP_CELL_ID , " - Source"); + /* Source RNC Identifier (note 1) RNC Identifier/11.3.87 C TLV 10 */ + ELEM_OPT_TELV(0x6c,BSSGP_PDU_TYPE, BE_BSSGP_RNC_ID, " - Source"); + /* Target Cell Identifier Cell Identifier/11.3.9 M TLV 10 */ + ELEM_OPT_TELV(BSSGP_IEI_CELL_IDENTIFIER, BSSGP_PDU_TYPE, DE_BSSGP_CELL_ID , " - Target"); + /* Source BSS to Target BSS Transparent Container Source BSS to Target BSS Transparent Container/11.3.79 M TLV 7-? */ + ELEM_OPT_TELV(0x64,BSSGP_PDU_TYPE, DE_BSSGP_SOURCE_BSS_TO_TARGET_BSS_TRANSP_CONT, NULL); + /* PFCs to be set-up list PFCs to be set-up list/11.3.82 M TLV 22-? */ + ELEM_OPT_TELV(0x67,BSSGP_PDU_TYPE, DE_BSSGP_PFCS_TO_BE_SET_UP_LIST, NULL); + /* NAS container for PS Handover NAS container for PS Handover/11.3.81 O TLV 3-? */ + ELEM_OPT_TELV(0x66,GSM_A_PDU_TYPE_COMMON, DE_NAS_CONT_FOR_PS_HO, NULL); + /* Service UTRAN CCO Service UTRAN CCO/11.3.47 O TLV 3 */ + ELEM_OPT_TELV(BSSGP_IEI_SERVICE_UTRAN_CCO, BSSGP_PDU_TYPE, DE_BSSGP_SERV_UTRAN_CCO, NULL); + /* Subscriber Profile ID for RAT/Frequency priority (note 2) Subscriber Profile ID for RAT/Frequency priority/11.3.105 O TLV 3 */ + ELEM_OPT_TELV(0x81, BSSGP_PDU_TYPE, DE_BSSGP_SUB_PROF_ID_F_RAT_FRQ_PRIO, NULL); + /* Reliable Inter RAT Handover Info (note 3) Reliable Inter RAT Handover Info/11.3.107 C TLV 3 */ + ELEM_OPT_TELV(0x83,BSSGP_PDU_TYPE, DE_BSSGP_RELIABLE_INTER_RAT_HO_INF, NULL); + + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); +} + +/* + * 10.4.31 PS-HANDOVER-REQUEST-ACK */ static void bssgp_ps_ho_request_ack(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* This PDU acknowledges the successful allocation of resources in the target BSS. */ - /* Direction: BSS to SGSN */ - pinfo->link_dir = P2P_DIR_UL; + /* This PDU acknowledges the successful allocation of resources in the target BSS. */ + /* Direction: BSS to SGSN */ + pinfo->link_dir = P2P_DIR_UL; - /* TLLI TLLI/11.3.35 M TLV 6 */ - ELEM_MAND_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI , NULL); - /* List of set-up PFCs List of set-up PFCs/11.3.83 M TLV 3-? */ - ELEM_MAND_TELV(0x68,BSSGP_PDU_TYPE, DE_BSSGP_LIST_OF_SETUP_PFCS, NULL); - /* Target BSS to Source BSS Transparent Container Target BSS to Source BSS Transparent Container/11.3.80 M TLV 3-? */ - ELEM_MAND_TELV(0x65,BSSGP_PDU_TYPE, DE_BSSGP_TARGET_BSS_TO_SOURCE_BSS_TRANSP_CONT, NULL); + /* TLLI TLLI/11.3.35 M TLV 6 */ + ELEM_MAND_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI , NULL); + /* List of set-up PFCs List of set-up PFCs/11.3.83 M TLV 3-? */ + ELEM_MAND_TELV(0x68,BSSGP_PDU_TYPE, DE_BSSGP_LIST_OF_SETUP_PFCS, NULL); + /* Target BSS to Source BSS Transparent Container Target BSS to Source BSS Transparent Container/11.3.80 M TLV 3-? */ + ELEM_MAND_TELV(0x65,BSSGP_PDU_TYPE, DE_BSSGP_TARGET_BSS_TO_SOURCE_BSS_TRANSP_CONT, NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); } /* - * 10.4.32 PS-HANDOVER-REQUEST-NACK + * 10.4.32 PS-HANDOVER-REQUEST-NACK */ static void bssgp_ps_ho_request_nack(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* This PDU informs the SGSN about failed resource allocation in the target BSS. */ - /* BSS to SGSN */ - pinfo->link_dir = P2P_DIR_UL; + /* This PDU informs the SGSN about failed resource allocation in the target BSS. */ + /* BSS to SGSN */ + pinfo->link_dir = P2P_DIR_UL; - /* TLLI TLLI/11.3.35 M TLV 6 */ - ELEM_MAND_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI , NULL); - /* Cause Cause/11.3.8 M TLV 3 */ - ELEM_MAND_TELV(BSSGP_IEI_CAUSE,BSSGP_PDU_TYPE, DE_BSSGP_CAUSE, NULL); + /* TLLI TLLI/11.3.35 M TLV 6 */ + ELEM_MAND_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI , NULL); + /* Cause Cause/11.3.8 M TLV 3 */ + ELEM_MAND_TELV(BSSGP_IEI_CAUSE,BSSGP_PDU_TYPE, DE_BSSGP_CAUSE, NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); } /* - * 10.4.33 PS-HANDOVER-COMPLETE + * 10.4.33 PS-HANDOVER-COMPLETE */ static void bssgp_ps_ho_complete(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* This PDU informs the SGSN about successful channel change for an MS. */ - /* BSS to SGSN */ - pinfo->link_dir = P2P_DIR_UL; + /* This PDU informs the SGSN about successful channel change for an MS. */ + /* BSS to SGSN */ + pinfo->link_dir = P2P_DIR_UL; - /* TLLI TLLI/11.3.35 M TLV 6 */ - ELEM_MAND_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI , NULL); - /* IMSI IMSI/11.3.14 M TLV 5-10 */ - ELEM_MAND_TELV(BSSGP_IEI_IMSI, BSSGP_PDU_TYPE, DE_BSSGP_IMSI , NULL); - /* Target Cell Identifier (note 1) Cell Identifier/11.3.9 O TLV 10 */ - ELEM_OPT_TELV(BSSGP_IEI_CELL_IDENTIFIER, BSSGP_PDU_TYPE, DE_BSSGP_CELL_ID , " - Target"); - /* Request for Inter RAT Handover Info (note 2) Request for Inter RAT Handover Info/11.3.106 C TLV 3 */ - ELEM_OPT_TELV(0x82, BSSGP_PDU_TYPE, DE_BSSGP_REQ_FOR_INTER_RAT_HO_INFO , NULL); + /* TLLI TLLI/11.3.35 M TLV 6 */ + ELEM_MAND_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI , NULL); + /* IMSI IMSI/11.3.14 M TLV 5-10 */ + ELEM_MAND_TELV(BSSGP_IEI_IMSI, BSSGP_PDU_TYPE, DE_BSSGP_IMSI , NULL); + /* Target Cell Identifier (note 1) Cell Identifier/11.3.9 O TLV 10 */ + ELEM_OPT_TELV(BSSGP_IEI_CELL_IDENTIFIER, BSSGP_PDU_TYPE, DE_BSSGP_CELL_ID , " - Target"); + /* Request for Inter RAT Handover Info (note 2) Request for Inter RAT Handover Info/11.3.106 C TLV 3 */ + ELEM_OPT_TELV(0x82, BSSGP_PDU_TYPE, DE_BSSGP_REQ_FOR_INTER_RAT_HO_INFO , NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); } /* - * 10.4.34 PS-HANDOVER-CANCEL + * 10.4.34 PS-HANDOVER-CANCEL */ static void bssgp_ps_ho_cancel(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* This PDU cancels the handover for an MS. */ - /* BSS to SGSN */ - pinfo->link_dir = P2P_DIR_UL; + /* This PDU cancels the handover for an MS. */ + /* BSS to SGSN */ + pinfo->link_dir = P2P_DIR_UL; - /* TLLI TLLI/11.3.35 M TLV 6 */ - ELEM_MAND_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI , NULL); - /* Cause Cause/11.3.8 M TLV 3 */ - ELEM_IN_ELEM_MAND_TELV(BSSGP_IEI_CAUSE,BSSGP_PDU_TYPE, DE_BSSGP_CAUSE, NULL); - /* Source Cell Identifier Cell Identifier/11.3.9 M TLV 10 */ - ELEM_OPT_TELV(BSSGP_IEI_CELL_IDENTIFIER, BSSGP_PDU_TYPE, DE_BSSGP_CELL_ID , " - Source"); - /* Target Cell Identifier (note 1) Cell Identifier/11.3.9 O TLV 10 */ - ELEM_OPT_TELV(BSSGP_IEI_CELL_IDENTIFIER, BSSGP_PDU_TYPE, DE_BSSGP_CELL_ID , " - Target"); - /* Target RNC Identifier (note 1) (note 2) RNC Identifier/11.3.87 C TLV 10 */ - ELEM_OPT_TELV(0x6c,BSSGP_PDU_TYPE, BE_BSSGP_RNC_ID, " - Target"); - /* Target eNB Identifier (note 1) (note 2) eNB Identifier/11.3.103 C TLV 3-n */ - ELEM_OPT_TELV(0x7f,BSSGP_PDU_TYPE, DE_BSSGP_ENB_ID, " - Target"); + /* TLLI TLLI/11.3.35 M TLV 6 */ + ELEM_MAND_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI , NULL); + /* Cause Cause/11.3.8 M TLV 3 */ + ELEM_IN_ELEM_MAND_TELV(BSSGP_IEI_CAUSE,BSSGP_PDU_TYPE, DE_BSSGP_CAUSE, NULL); + /* Source Cell Identifier Cell Identifier/11.3.9 M TLV 10 */ + ELEM_OPT_TELV(BSSGP_IEI_CELL_IDENTIFIER, BSSGP_PDU_TYPE, DE_BSSGP_CELL_ID , " - Source"); + /* Target Cell Identifier (note 1) Cell Identifier/11.3.9 O TLV 10 */ + ELEM_OPT_TELV(BSSGP_IEI_CELL_IDENTIFIER, BSSGP_PDU_TYPE, DE_BSSGP_CELL_ID , " - Target"); + /* Target RNC Identifier (note 1) (note 2) RNC Identifier/11.3.87 C TLV 10 */ + ELEM_OPT_TELV(0x6c,BSSGP_PDU_TYPE, BE_BSSGP_RNC_ID, " - Target"); + /* Target eNB Identifier (note 1) (note 2) eNB Identifier/11.3.103 C TLV 3-n */ + ELEM_OPT_TELV(0x7f,BSSGP_PDU_TYPE, DE_BSSGP_ENB_ID, " - Target"); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); } /* - * 10.4.35 PS-HANDOVER-COMPLETE-ACK + * 10.4.35 PS-HANDOVER-COMPLETE-ACK */ static void bssgp_ps_ho_complete_ack(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* This PDU provides to the BSS the Inter RAT Handover Info IE or - * E-UTRAN Inter RAT Handover Info IE or both. It is sent only if - * requested by the BSS and it shall contain at least one of the - * inter-RAT capabilities. - */ + /* This PDU provides to the BSS the Inter RAT Handover Info IE or + * E-UTRAN Inter RAT Handover Info IE or both. It is sent only if + * requested by the BSS and it shall contain at least one of the + * inter-RAT capabilities. + */ - /* SGSN to BSS */ - pinfo->link_dir = P2P_DIR_DL; + /* SGSN to BSS */ + pinfo->link_dir = P2P_DIR_DL; - /* TLLI TLLI/11.3.35 M TLV 6 */ - ELEM_MAND_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI , NULL); - /* Inter RAT Handover Info Inter RAT Handover Info/11.3.94 C (note 1) TLV 3-? */ - ELEM_OPT_TELV(0x73, BSSGP_PDU_TYPE, DE_BSSGP_INTER_RAT_HO_INFO, NULL); - /* E-UTRAN Inter RAT Handover Info E-UTRAN Inter RAT Handover Info/11.3.104 C (note 1) TLV 3-? */ - ELEM_OPT_TELV(0x80, BSSGP_PDU_TYPE, DE_BSSGP_E_UTRAN_INTER_RAT_HO_INFO, NULL); + /* TLLI TLLI/11.3.35 M TLV 6 */ + ELEM_MAND_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI , NULL); + /* Inter RAT Handover Info Inter RAT Handover Info/11.3.94 C (note 1) TLV 3-? */ + ELEM_OPT_TELV(0x73, BSSGP_PDU_TYPE, DE_BSSGP_INTER_RAT_HO_INFO, NULL); + /* E-UTRAN Inter RAT Handover Info E-UTRAN Inter RAT Handover Info/11.3.104 C (note 1) TLV 3-? */ + ELEM_OPT_TELV(0x80, BSSGP_PDU_TYPE, DE_BSSGP_E_UTRAN_INTER_RAT_HO_INFO, NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); } /* - * 10.5 PDU functional definitions and contents at LCS SAP - * 10.5.1 PERFORM-LOCATION-REQUEST + * 10.5 PDU functional definitions and contents at LCS SAP + * 10.5.1 PERFORM-LOCATION-REQUEST */ static void bssgp_perform_loc_request(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; - - curr_offset = offset; - curr_len = len; - - /* This PDU informs the SGSN about failed resource allocation in the target BSS. */ - /* BSS to SGSN */ - pinfo->link_dir = P2P_DIR_UL; - - /* TLLI TLLI/11.3.35 M TLV 6 */ - ELEM_MAND_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI , NULL); - /* IMSI IMSI/11.3.14 M TLV 5-10 */ - ELEM_MAND_TELV(BSSGP_IEI_IMSI, BSSGP_PDU_TYPE, DE_BSSGP_IMSI , NULL); - /* DRX Parameters (note 1) DRX Parameters/11.3.11 O TLV 4 */ - ELEM_OPT_TELV(0x86, NAS_PDU_TYPE_EMM, DE_EMM_TRAC_AREA_ID, NULL); - /* BVCI (PCU-PTP) BVCI/11.3.6 M TLV 4 */ - ELEM_MAND_TELV(BSSGP_IEI_BVCI, BSSGP_PDU_TYPE, DE_BSSGP_BVCI , " - (PCU-PTP)"); - /* NSEI (PCU-PTP) NSEI/11.3.48 M TLV 4-? */ - ELEM_OPT_TELV(0x3e, GSM_A_PDU_TYPE_RR, DE_BSSGP_NSEI , " - (PCU-PTP)"); - /* Location Type Location Type/11.3.53 M TLV 3-? */ - ELEM_OPT_TELV(0x7c, GSM_PDU_TYPE_BSSMAP_LE, DE_BMAPLE_GANSS_LOC_TYPE, NULL); - /* Cell Identifier Cell Identifier/11.3.9 M TLV 10 */ - ELEM_OPT_TELV(BSSGP_IEI_CELL_IDENTIFIER, BSSGP_PDU_TYPE, DE_BSSGP_CELL_ID , NULL); - /* LCS Capability (note 2) LCS Capability/11.3.59 O TLV 3-? */ - ELEM_OPT_TELV( BSSGP_IEI_LCS_CAPABILITY , GSM_A_PDU_TYPE_GM, DE_PS_LCS_CAP , NULL); - /* LCS Priority LCS Priority/11.3.57 O TLV 3-? */ - ELEM_OPT_TELV(BSSGP_IEI_LCS_PRIORITY, GSM_A_PDU_TYPE_BSSMAP, BE_LCS_PRIO, NULL); - /* LCS QoS LCS QoS/11.3.50 O TLV 3-? */ - ELEM_OPT_TELV(BSSGP_IEI_LCS_QOS, GSM_PDU_TYPE_BSSMAP_LE, DE_BMAPLE_LCSQOS, NULL); - /* LCS Client Type (note 3) LCS Client Type/11.3.51 C TLV 3-? */ - ELEM_OPT_TELV(BSSGP_IEI_LCS_CLIENT_TYPE, GSM_PDU_TYPE_BSSMAP_LE, DE_BMAPLE_LCS_CLIENT_TYPE, NULL); - /* Requested GPS Assistance Data (note 4) Requested GPS Assistance Data/11.3.52 O TLV 3-? */ - ELEM_OPT_TELV(BSSGP_IEI_REQUESTED_GPS_ASSISTANCE_DATA, GSM_PDU_TYPE_BSSMAP_LE, DE_BMAPLE_REQ_GPS_ASSIST_D, NULL); - /* IMEI (note 5) IMEI/11.3.91 O TLV 10 */ - ELEM_OPT_TELV(0x70,GSM_A_PDU_TYPE_COMMON, DE_MID, NULL); - /* GANSS Location Type GANSS Location Type / 11.3.100 C TLV 3 */ - ELEM_OPT_TELV(0x7c, GSM_A_PDU_TYPE_BSSMAP, BE_GANSS_LOC_TYP, NULL); - /* Requested GANSS Assistance Data (note 6) Requested GANSS Assistance Data/11.3.99 O TLV 3-? */ - ELEM_OPT_TLV(0x7b, GSM_A_PDU_TYPE_BSSMAP, BE_GANSS_ASS_DTA, NULL); - - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); -} - -/* - * 10.5.2 PERFORM-LOCATION-RESPONSE + guint32 curr_offset; + guint32 consumed; + guint curr_len; + + curr_offset = offset; + curr_len = len; + + /* This PDU informs the SGSN about failed resource allocation in the target BSS. */ + /* BSS to SGSN */ + pinfo->link_dir = P2P_DIR_UL; + + /* TLLI TLLI/11.3.35 M TLV 6 */ + ELEM_MAND_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI , NULL); + /* IMSI IMSI/11.3.14 M TLV 5-10 */ + ELEM_MAND_TELV(BSSGP_IEI_IMSI, BSSGP_PDU_TYPE, DE_BSSGP_IMSI , NULL); + /* DRX Parameters (note 1) DRX Parameters/11.3.11 O TLV 4 */ + ELEM_OPT_TELV(0x86, NAS_PDU_TYPE_EMM, DE_EMM_TRAC_AREA_ID, NULL); + /* BVCI (PCU-PTP) BVCI/11.3.6 M TLV 4 */ + ELEM_MAND_TELV(BSSGP_IEI_BVCI, BSSGP_PDU_TYPE, DE_BSSGP_BVCI , " - (PCU-PTP)"); + /* NSEI (PCU-PTP) NSEI/11.3.48 M TLV 4-? */ + ELEM_OPT_TELV(0x3e, GSM_A_PDU_TYPE_RR, DE_BSSGP_NSEI , " - (PCU-PTP)"); + /* Location Type Location Type/11.3.53 M TLV 3-? */ + ELEM_OPT_TELV(0x7c, GSM_PDU_TYPE_BSSMAP_LE, DE_BMAPLE_GANSS_LOC_TYPE, NULL); + /* Cell Identifier Cell Identifier/11.3.9 M TLV 10 */ + ELEM_OPT_TELV(BSSGP_IEI_CELL_IDENTIFIER, BSSGP_PDU_TYPE, DE_BSSGP_CELL_ID , NULL); + /* LCS Capability (note 2) LCS Capability/11.3.59 O TLV 3-? */ + ELEM_OPT_TELV( BSSGP_IEI_LCS_CAPABILITY , GSM_A_PDU_TYPE_GM, DE_PS_LCS_CAP , NULL); + /* LCS Priority LCS Priority/11.3.57 O TLV 3-? */ + ELEM_OPT_TELV(BSSGP_IEI_LCS_PRIORITY, GSM_A_PDU_TYPE_BSSMAP, BE_LCS_PRIO, NULL); + /* LCS QoS LCS QoS/11.3.50 O TLV 3-? */ + ELEM_OPT_TELV(BSSGP_IEI_LCS_QOS, GSM_PDU_TYPE_BSSMAP_LE, DE_BMAPLE_LCSQOS, NULL); + /* LCS Client Type (note 3) LCS Client Type/11.3.51 C TLV 3-? */ + ELEM_OPT_TELV(BSSGP_IEI_LCS_CLIENT_TYPE, GSM_PDU_TYPE_BSSMAP_LE, DE_BMAPLE_LCS_CLIENT_TYPE, NULL); + /* Requested GPS Assistance Data (note 4) Requested GPS Assistance Data/11.3.52 O TLV 3-? */ + ELEM_OPT_TELV(BSSGP_IEI_REQUESTED_GPS_ASSISTANCE_DATA, GSM_PDU_TYPE_BSSMAP_LE, DE_BMAPLE_REQ_GPS_ASSIST_D, NULL); + /* IMEI (note 5) IMEI/11.3.91 O TLV 10 */ + ELEM_OPT_TELV(0x70,GSM_A_PDU_TYPE_COMMON, DE_MID, NULL); + /* GANSS Location Type GANSS Location Type / 11.3.100 C TLV 3 */ + ELEM_OPT_TELV(0x7c, GSM_A_PDU_TYPE_BSSMAP, BE_GANSS_LOC_TYP, NULL); + /* Requested GANSS Assistance Data (note 6) Requested GANSS Assistance Data/11.3.99 O TLV 3-? */ + ELEM_OPT_TLV(0x7b, GSM_A_PDU_TYPE_BSSMAP, BE_GANSS_ASS_DTA, NULL); + + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); +} + +/* + * 10.5.2 PERFORM-LOCATION-RESPONSE */ static void bssgp_perform_loc_response(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /*This PDU allows the BSS to respond to the SGSN after the completion of the location procedure. */ - /* Direction: BSS to SGSN */ - pinfo->link_dir = P2P_DIR_UL; + /*This PDU allows the BSS to respond to the SGSN after the completion of the location procedure. */ + /* Direction: BSS to SGSN */ + pinfo->link_dir = P2P_DIR_UL; - /* TLLI TLLI/11.3.35 M TLV 6 */ - ELEM_MAND_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI , NULL); - /* BVCI (PCU-PTP) BVCI/11.3.6 M TLV 4 */ - ELEM_MAND_TELV(BSSGP_IEI_BVCI, BSSGP_PDU_TYPE, DE_BSSGP_BVCI , " - (PCU-PTP)"); - /* Location Estimate (note 1) Location Estimate/11.3.54 C TLV 3-? */ - ELEM_OPT_TELV(BSSGP_IEI_LOCATION_ESTIMATE, GSM_A_PDU_TYPE_BSSMAP, BE_LOC_EST, NULL); - /* Positioning Data Positioning Data/11.3.55 O TLV 3-? */ - ELEM_OPT_TELV(0x7d, GSM_PDU_TYPE_BSSMAP_LE, DE_BMAPLE_POS_DATA, NULL); - /* Deciphering Keys (note 2) Deciphering Keys/11.3.56 C TLV 3-? */ - ELEM_OPT_TELV(BSSGP_IEI_DECIPHERING_KEYS, GSM_PDU_TYPE_BSSMAP_LE, DE_BMAPLE_DECIPH_KEYS, NULL); - /* LCS Cause (note 3) LCS Cause/11.3.58 O TLV 3-? */ - ELEM_OPT_TELV(BSSGP_IEI_LCS_CAUSE, GSM_PDU_TYPE_BSSMAP_LE, DE_BMAPLE_LCS_CAUSE, NULL); - /* Velocity Data Velocity Data/11.3.96 O TLV 3-? */ - ELEM_MAND_TELV(0x78, BSSGP_PDU_TYPE, DE_BSSGP_VELOCITY_DATA , NULL); - /* GANSS Positioning Data GANSS Positioning Data /11.3.101 O TLV 3-? */ - ELEM_OPT_TELV(0x7d, GSM_A_PDU_TYPE_BSSMAP, BE_GANSS_POS_DTA, NULL); + /* TLLI TLLI/11.3.35 M TLV 6 */ + ELEM_MAND_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI , NULL); + /* BVCI (PCU-PTP) BVCI/11.3.6 M TLV 4 */ + ELEM_MAND_TELV(BSSGP_IEI_BVCI, BSSGP_PDU_TYPE, DE_BSSGP_BVCI , " - (PCU-PTP)"); + /* Location Estimate (note 1) Location Estimate/11.3.54 C TLV 3-? */ + ELEM_OPT_TELV(BSSGP_IEI_LOCATION_ESTIMATE, GSM_A_PDU_TYPE_BSSMAP, BE_LOC_EST, NULL); + /* Positioning Data Positioning Data/11.3.55 O TLV 3-? */ + ELEM_OPT_TELV(0x7d, GSM_PDU_TYPE_BSSMAP_LE, DE_BMAPLE_POS_DATA, NULL); + /* Deciphering Keys (note 2) Deciphering Keys/11.3.56 C TLV 3-? */ + ELEM_OPT_TELV(BSSGP_IEI_DECIPHERING_KEYS, GSM_PDU_TYPE_BSSMAP_LE, DE_BMAPLE_DECIPH_KEYS, NULL); + /* LCS Cause (note 3) LCS Cause/11.3.58 O TLV 3-? */ + ELEM_OPT_TELV(BSSGP_IEI_LCS_CAUSE, GSM_PDU_TYPE_BSSMAP_LE, DE_BMAPLE_LCS_CAUSE, NULL); + /* Velocity Data Velocity Data/11.3.96 O TLV 3-? */ + ELEM_MAND_TELV(0x78, BSSGP_PDU_TYPE, DE_BSSGP_VELOCITY_DATA , NULL); + /* GANSS Positioning Data GANSS Positioning Data /11.3.101 O TLV 3-? */ + ELEM_OPT_TELV(0x7d, GSM_A_PDU_TYPE_BSSMAP, BE_GANSS_POS_DTA, NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); } /* - * 10.5.3 PERFORM-LOCATION-ABORT + * 10.5.3 PERFORM-LOCATION-ABORT */ static void bssgp_perform_loc_response_abort(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /*This PDU allows the SGSN to request the BSS to ABORT the LCS procedure */ - /* Direction: SGSN to BSS */ - pinfo->link_dir = P2P_DIR_DL; + /*This PDU allows the SGSN to request the BSS to ABORT the LCS procedure */ + /* Direction: SGSN to BSS */ + pinfo->link_dir = P2P_DIR_DL; - /* TLLI TLLI/11.3.35 M TLV 6 */ - ELEM_MAND_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI , NULL); - /* BVCI (PCU-PTP) BVCI/11.3.6 M TLV 4 */ - ELEM_MAND_TELV(BSSGP_IEI_BVCI, BSSGP_PDU_TYPE, DE_BSSGP_BVCI , " - (PCU-PTP)"); - /* LCS Cause LCS Cause/11.3.58 M TLV 3-? */ - ELEM_MAND_TELV(BSSGP_IEI_LCS_CAUSE, GSM_PDU_TYPE_BSSMAP_LE, DE_BMAPLE_LCS_CAUSE, NULL); + /* TLLI TLLI/11.3.35 M TLV 6 */ + ELEM_MAND_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI , NULL); + /* BVCI (PCU-PTP) BVCI/11.3.6 M TLV 4 */ + ELEM_MAND_TELV(BSSGP_IEI_BVCI, BSSGP_PDU_TYPE, DE_BSSGP_BVCI , " - (PCU-PTP)"); + /* LCS Cause LCS Cause/11.3.58 M TLV 3-? */ + ELEM_MAND_TELV(BSSGP_IEI_LCS_CAUSE, GSM_PDU_TYPE_BSSMAP_LE, DE_BMAPLE_LCS_CAUSE, NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); } /* - * 10.5.4 POSITION-COMMAND + * 10.5.4 POSITION-COMMAND */ static void bssgp_pos_cmd(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* This PDU allows the BSS to request the SGSN to perform the position command procedure. */ - /* Direction: BSS to SGSN */ - pinfo->link_dir = P2P_DIR_UL; + /* This PDU allows the BSS to request the SGSN to perform the position command procedure. */ + /* Direction: BSS to SGSN */ + pinfo->link_dir = P2P_DIR_UL; - /* TLLI TLLI/11.3.35 M TLV 6 */ - ELEM_MAND_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI , NULL); - /* BVCI (PCU-PTP) BVCI/11.3.6 M TLV 4 */ - ELEM_MAND_TELV(BSSGP_IEI_BVCI, BSSGP_PDU_TYPE, DE_BSSGP_BVCI , " - (PCU-PTP)"); - /* RRLP Flags RRLP Flags/11.3.60 M TLV 3 */ - ELEM_MAND_TELV(BSSGP_IEI_RRLP_FLAGS, BSSGP_PDU_TYPE, DE_BSSGP_RRLP_FLAGS , NULL); - /* RRLP APDU RRLP APDU/11.3.49 M TLV 3-? */ - ELEM_MAND_TELV(BSSGP_IEI_RRLP_APDU, BSSGP_PDU_TYPE, DE_BSSGP_RRLP_APDU , NULL); + /* TLLI TLLI/11.3.35 M TLV 6 */ + ELEM_MAND_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI , NULL); + /* BVCI (PCU-PTP) BVCI/11.3.6 M TLV 4 */ + ELEM_MAND_TELV(BSSGP_IEI_BVCI, BSSGP_PDU_TYPE, DE_BSSGP_BVCI , " - (PCU-PTP)"); + /* RRLP Flags RRLP Flags/11.3.60 M TLV 3 */ + ELEM_MAND_TELV(BSSGP_IEI_RRLP_FLAGS, BSSGP_PDU_TYPE, DE_BSSGP_RRLP_FLAGS , NULL); + /* RRLP APDU RRLP APDU/11.3.49 M TLV 3-? */ + ELEM_MAND_TELV(BSSGP_IEI_RRLP_APDU, BSSGP_PDU_TYPE, DE_BSSGP_RRLP_APDU , NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); } /* - * 10.5.5 POSITION-RESPONSE + * 10.5.5 POSITION-RESPONSE */ static void bssgp_pos_resp(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* This PDU allows the SGSN to respond to the position command request procedure. */ - /* Direction: SGSN to BSS */ - pinfo->link_dir = P2P_DIR_DL; + /* This PDU allows the SGSN to respond to the position command request procedure. */ + /* Direction: SGSN to BSS */ + pinfo->link_dir = P2P_DIR_DL; - /* TLLI TLLI/11.3.35 M TLV 6 */ - ELEM_MAND_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI , NULL); - /* BVCI (PCU-PTP) BVCI/11.3.6 M TLV 4 */ - ELEM_MAND_TELV(BSSGP_IEI_BVCI, BSSGP_PDU_TYPE, DE_BSSGP_BVCI , " - (PCU-PTP)"); - /* RRLP Flags a) RRLP Flags/11.3.60 C TLV 3 */ - ELEM_OPT_TELV(BSSGP_IEI_RRLP_FLAGS, BSSGP_PDU_TYPE, DE_BSSGP_RRLP_FLAGS , NULL); - /* RRLP APDU a) RRLP APDU/11.3.49 C TLV 3-? */ - ELEM_OPT_TELV(BSSGP_IEI_RRLP_APDU, BSSGP_PDU_TYPE, DE_BSSGP_RRLP_APDU , NULL); - /* LCS Cause b) LCS Cause/11.3.58 O TLV 3-? */ - ELEM_OPT_TELV(BSSGP_IEI_LCS_CAUSE, GSM_PDU_TYPE_BSSMAP_LE, DE_BMAPLE_LCS_CAUSE, NULL); + /* TLLI TLLI/11.3.35 M TLV 6 */ + ELEM_MAND_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI , NULL); + /* BVCI (PCU-PTP) BVCI/11.3.6 M TLV 4 */ + ELEM_MAND_TELV(BSSGP_IEI_BVCI, BSSGP_PDU_TYPE, DE_BSSGP_BVCI , " - (PCU-PTP)"); + /* RRLP Flags a) RRLP Flags/11.3.60 C TLV 3 */ + ELEM_OPT_TELV(BSSGP_IEI_RRLP_FLAGS, BSSGP_PDU_TYPE, DE_BSSGP_RRLP_FLAGS , NULL); + /* RRLP APDU a) RRLP APDU/11.3.49 C TLV 3-? */ + ELEM_OPT_TELV(BSSGP_IEI_RRLP_APDU, BSSGP_PDU_TYPE, DE_BSSGP_RRLP_APDU , NULL); + /* LCS Cause b) LCS Cause/11.3.58 O TLV 3-? */ + ELEM_OPT_TELV(BSSGP_IEI_LCS_CAUSE, GSM_PDU_TYPE_BSSMAP_LE, DE_BMAPLE_LCS_CAUSE, NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); } /* - * 10.6 PDU functional definitions and contents at RIM SAP - * 10.6.1 RAN-INFORMATION-REQUEST + * 10.6 PDU functional definitions and contents at RIM SAP + * 10.6.1 RAN-INFORMATION-REQUEST */ static void bssgp_ran_inf_request(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* The RAN-INFORMATION-REQUEST PDU allows a controlling BSS to request information from another BSS. */ - /* Direction: BSS to SGSN - SGSN to BSS */ + /* The RAN-INFORMATION-REQUEST PDU allows a controlling BSS to request information from another BSS. */ + /* Direction: BSS to SGSN - SGSN to BSS */ - /* Destination Cell Identifier RIM Routing Information/11.3.70 M TLV 3-? */ - ELEM_MAND_TELV(BSSGP_IEI_RIM_ROUTING_INFORMATION, BSSGP_PDU_TYPE, DE_BSSGP_RIM_ROUTING_INF , " - Destination Cell Identifier"); - /* Source Cell Identifier RIM Routing Information/11.3.70 M TLV 3-? */ - ELEM_MAND_TELV(BSSGP_IEI_RIM_ROUTING_INFORMATION, BSSGP_PDU_TYPE, DE_BSSGP_RIM_ROUTING_INF , " - Source Cell Identifier"); - /* RIM Container RAN-INFORMATION-REQUEST RIM Container/11.3.62a.1 M TLV 3-? */ - ELEM_OPT_TELV(BSSGP_IEI_RAN_INF_REQUEST_RIM_CONTAINER, BSSGP_PDU_TYPE, DE_BSSGP_RAN_INF_REQUEST_RIM_CONT, NULL); + /* Destination Cell Identifier RIM Routing Information/11.3.70 M TLV 3-? */ + ELEM_MAND_TELV(BSSGP_IEI_RIM_ROUTING_INFORMATION, BSSGP_PDU_TYPE, DE_BSSGP_RIM_ROUTING_INF , " - Destination Cell Identifier"); + /* Source Cell Identifier RIM Routing Information/11.3.70 M TLV 3-? */ + ELEM_MAND_TELV(BSSGP_IEI_RIM_ROUTING_INFORMATION, BSSGP_PDU_TYPE, DE_BSSGP_RIM_ROUTING_INF , " - Source Cell Identifier"); + /* RIM Container RAN-INFORMATION-REQUEST RIM Container/11.3.62a.1 M TLV 3-? */ + ELEM_OPT_TELV(BSSGP_IEI_RAN_INF_REQUEST_RIM_CONTAINER, BSSGP_PDU_TYPE, DE_BSSGP_RAN_INF_REQUEST_RIM_CONT, NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); } /* - * 10.6.2 RAN-INFORMATION + * 10.6.2 RAN-INFORMATION */ static void bssgp_ran_inf(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* The RAN-INFORMATION PDU allows a serving BSS to send information to a controlling BSS. */ - /* Direction: BSS to SGSN SGSN to BSS */ + /* The RAN-INFORMATION PDU allows a serving BSS to send information to a controlling BSS. */ + /* Direction: BSS to SGSN SGSN to BSS */ - /* Destination Cell Identifier RIM Routing Information/11.3.70 M TLV 3-? */ - ELEM_MAND_TELV(BSSGP_IEI_RIM_ROUTING_INFORMATION, BSSGP_PDU_TYPE, DE_BSSGP_RIM_ROUTING_INF , " - Destination Cell Identifier"); - /* Source Cell Identifier RIM Routing Information/11.3.70 M TLV 3-? */ - ELEM_MAND_TELV(BSSGP_IEI_RIM_ROUTING_INFORMATION, BSSGP_PDU_TYPE, DE_BSSGP_RIM_ROUTING_INF , " - Source Cell Identifier"); - /* RIM Container RAN-INFORMATION RIM Container/11.3.62a.2 M TLV 3-? */ - ELEM_MAND_TELV(BSSGP_IEI_RAN_INF_RIM_CONTAINER, BSSGP_PDU_TYPE, DE_BSSGP_RAN_INF_RIM_CONT , " - Source Cell Identifier"); + /* Destination Cell Identifier RIM Routing Information/11.3.70 M TLV 3-? */ + ELEM_MAND_TELV(BSSGP_IEI_RIM_ROUTING_INFORMATION, BSSGP_PDU_TYPE, DE_BSSGP_RIM_ROUTING_INF , " - Destination Cell Identifier"); + /* Source Cell Identifier RIM Routing Information/11.3.70 M TLV 3-? */ + ELEM_MAND_TELV(BSSGP_IEI_RIM_ROUTING_INFORMATION, BSSGP_PDU_TYPE, DE_BSSGP_RIM_ROUTING_INF , " - Source Cell Identifier"); + /* RIM Container RAN-INFORMATION RIM Container/11.3.62a.2 M TLV 3-? */ + ELEM_MAND_TELV(BSSGP_IEI_RAN_INF_RIM_CONTAINER, BSSGP_PDU_TYPE, DE_BSSGP_RAN_INF_RIM_CONT , " - Source Cell Identifier"); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); } /* - * 10.6.3 RAN-INFORMATION-ACK + * 10.6.3 RAN-INFORMATION-ACK */ static void bssgp_ran_inf_request_ack(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* The RAN-INFORMATION-ACK PDU allows a controlling BSS to acknowledge the reception of a RANINFORMATION + /* The RAN-INFORMATION-ACK PDU allows a controlling BSS to acknowledge the reception of a RANINFORMATION * PDU and a serving BSS to acknowledge the reception of a RAN-INFORMATION-APPLICATIONERROR PDU. - */ + */ - /* Direction: BSS to SGSN SGSN to BSS */ + /* Direction: BSS to SGSN SGSN to BSS */ - /* Destination Cell Identifier RIM Routing Information/11.3.70 M TLV 3-? */ - ELEM_MAND_TELV(BSSGP_IEI_RIM_ROUTING_INFORMATION, BSSGP_PDU_TYPE, DE_BSSGP_RIM_ROUTING_INF , " - Destination Cell Identifier"); - /* Source Cell Identifier RIM Routing Information/11.3.70 M TLV 3-? */ - ELEM_MAND_TELV(BSSGP_IEI_RIM_ROUTING_INFORMATION, BSSGP_PDU_TYPE, DE_BSSGP_RIM_ROUTING_INF , " - Source Cell Identifier"); - /* RIM Container RAN-INFORMATION-ACK RIM Container/11.3.62a.3 M TLV 3-? */ - ELEM_MAND_TELV(BSSGP_IEI_RAN_INF_ACK_RIM_CONTAINER, BSSGP_PDU_TYPE, DE_BSSGP_RAN_INFORMATION_ACK_RIM_CONT , NULL); + /* Destination Cell Identifier RIM Routing Information/11.3.70 M TLV 3-? */ + ELEM_MAND_TELV(BSSGP_IEI_RIM_ROUTING_INFORMATION, BSSGP_PDU_TYPE, DE_BSSGP_RIM_ROUTING_INF , " - Destination Cell Identifier"); + /* Source Cell Identifier RIM Routing Information/11.3.70 M TLV 3-? */ + ELEM_MAND_TELV(BSSGP_IEI_RIM_ROUTING_INFORMATION, BSSGP_PDU_TYPE, DE_BSSGP_RIM_ROUTING_INF , " - Source Cell Identifier"); + /* RIM Container RAN-INFORMATION-ACK RIM Container/11.3.62a.3 M TLV 3-? */ + ELEM_MAND_TELV(BSSGP_IEI_RAN_INF_ACK_RIM_CONTAINER, BSSGP_PDU_TYPE, DE_BSSGP_RAN_INFORMATION_ACK_RIM_CONT , NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); } /* - * 10.6.4 RAN-INFORMATION-ERROR + * 10.6.4 RAN-INFORMATION-ERROR */ static void bssgp_ran_inf_err(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* The RAN-INFORMATION-ERROR PDU allows a BSS to send an error PDU back to an originating BSS as a response - * to a RAN-INFORMATION, a RAN-INFORMATION-REQUEST, a RAN-INFORMATION-ACK or a RANINFORMATION-APPLICATION-ERROR PDU. - */ + /* The RAN-INFORMATION-ERROR PDU allows a BSS to send an error PDU back to an originating BSS as a response + * to a RAN-INFORMATION, a RAN-INFORMATION-REQUEST, a RAN-INFORMATION-ACK or a RANINFORMATION-APPLICATION-ERROR PDU. + */ - /* Direction: BSS to SGSN SGSN to BSS */ + /* Direction: BSS to SGSN SGSN to BSS */ - /* Destination Cell Identifier RIM Routing Information/11.3.70 M TLV 3-? */ - ELEM_MAND_TELV(BSSGP_IEI_RIM_ROUTING_INFORMATION, BSSGP_PDU_TYPE, DE_BSSGP_RIM_ROUTING_INF , " - Destination Cell Identifier"); - /* Source Cell Identifier RIM Routing Information/11.3.70 M TLV 3-? */ - ELEM_MAND_TELV(BSSGP_IEI_RIM_ROUTING_INFORMATION, BSSGP_PDU_TYPE, DE_BSSGP_RIM_ROUTING_INF , " - Source Cell Identifier"); - /* RIM Container RAN-INFORMATION-ERROR RIM Container/11.3.62a.4 M TLV 3-? */ - ELEM_MAND_TELV(BSSGP_IEI_RAN_INF_ERROR_RIM_CONTAINER, BSSGP_PDU_TYPE, DE_BSSGP_RAN_INFORMATION_ERROR_RIM_CONT , NULL); + /* Destination Cell Identifier RIM Routing Information/11.3.70 M TLV 3-? */ + ELEM_MAND_TELV(BSSGP_IEI_RIM_ROUTING_INFORMATION, BSSGP_PDU_TYPE, DE_BSSGP_RIM_ROUTING_INF , " - Destination Cell Identifier"); + /* Source Cell Identifier RIM Routing Information/11.3.70 M TLV 3-? */ + ELEM_MAND_TELV(BSSGP_IEI_RIM_ROUTING_INFORMATION, BSSGP_PDU_TYPE, DE_BSSGP_RIM_ROUTING_INF , " - Source Cell Identifier"); + /* RIM Container RAN-INFORMATION-ERROR RIM Container/11.3.62a.4 M TLV 3-? */ + ELEM_MAND_TELV(BSSGP_IEI_RAN_INF_ERROR_RIM_CONTAINER, BSSGP_PDU_TYPE, DE_BSSGP_RAN_INFORMATION_ERROR_RIM_CONT , NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); } /* - * 10.6.5 RAN-INFORMATION-APPLICATION-ERROR + * 10.6.5 RAN-INFORMATION-APPLICATION-ERROR */ static void bssgp_ran_inf_app_err(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* The RAN-INFORMATION-APPLICATION-ERROR PDU allows a controlling BSS to inform the serving BSS about - * erroneous application information in a previously received RAN-INFORMATION PDU. - */ + /* The RAN-INFORMATION-APPLICATION-ERROR PDU allows a controlling BSS to inform the serving BSS about + * erroneous application information in a previously received RAN-INFORMATION PDU. + */ - /* Direction: BSS to SGSN SGSN to BSS */ + /* Direction: BSS to SGSN SGSN to BSS */ - /* Destination Cell Identifier RIM Routing Information/11.3.70 M TLV 3-? */ - ELEM_MAND_TELV(BSSGP_IEI_RIM_ROUTING_INFORMATION, BSSGP_PDU_TYPE, DE_BSSGP_RIM_ROUTING_INF , " - Destination Cell Identifier"); - /* Source Cell Identifier RIM Routing Information/11.3.70 M TLV 3-? */ - ELEM_MAND_TELV(BSSGP_IEI_RIM_ROUTING_INFORMATION, BSSGP_PDU_TYPE, DE_BSSGP_RIM_ROUTING_INF , " - Source Cell Identifier"); - /* RIM Container RAN-INFORMATION-APPLICATION ERROR RIM Container/11.3.62a.5 M TLV 3-? */ - ELEM_MAND_TELV(BSSGP_IEI_RAN_INF_APP_ERROR_RIM_CONTAINER, BSSGP_PDU_TYPE, DE_BSSGP_RAN_INF_APP_ERROR_RIM_CONT , NULL); + /* Destination Cell Identifier RIM Routing Information/11.3.70 M TLV 3-? */ + ELEM_MAND_TELV(BSSGP_IEI_RIM_ROUTING_INFORMATION, BSSGP_PDU_TYPE, DE_BSSGP_RIM_ROUTING_INF , " - Destination Cell Identifier"); + /* Source Cell Identifier RIM Routing Information/11.3.70 M TLV 3-? */ + ELEM_MAND_TELV(BSSGP_IEI_RIM_ROUTING_INFORMATION, BSSGP_PDU_TYPE, DE_BSSGP_RIM_ROUTING_INF , " - Source Cell Identifier"); + /* RIM Container RAN-INFORMATION-APPLICATION ERROR RIM Container/11.3.62a.5 M TLV 3-? */ + ELEM_MAND_TELV(BSSGP_IEI_RAN_INF_APP_ERROR_RIM_CONTAINER, BSSGP_PDU_TYPE, DE_BSSGP_RAN_INF_APP_ERROR_RIM_CONT , NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); } /* - * 10.7 PDU functional definitions and contents at MBMS SAP - * 10.7.1 MBMS-SESSION-START-REQUEST + * 10.7 PDU functional definitions and contents at MBMS SAP + * 10.7.1 MBMS-SESSION-START-REQUEST */ static void bssgp_mbms_session_start_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* This PDU allows a SGSN to request BSS to start an MBMS session. */ + /* This PDU allows a SGSN to request BSS to start an MBMS session. */ - /* Direction: SGSN to BSS */ - pinfo->link_dir = P2P_DIR_DL; + /* Direction: SGSN to BSS */ + pinfo->link_dir = P2P_DIR_DL; - /* TMGI TMGI/11.3.77 M TLV 3-8 */ - ELEM_MAND_TELV(0x5c, GSM_A_PDU_TYPE_GM, DE_TMGI, NULL); - /* MBMS Session Identity MBMS Session Identity/11.3.71 O TLV 3 */ - ELEM_OPT_TELV(0x5d, BSSGP_PDU_TYPE, DE_BSSGP_MBMS_SESSION_ID, NULL); - /* ABQP ABQP/11.3.43 M TLV 13-? */ - ELEM_MAND_TELV(0x3a , GSM_A_PDU_TYPE_GM, DE_QOS , NULL); - /* MBMS Service Area Identity List MBMS Service Area Identity List/11.3.73 M TLV 4-? */ - ELEM_MAND_TELV(0x5f, BSSGP_PDU_TYPE, DE_BSSGP_MBMS_SAI_LIST, NULL); - /* MBMS Routing Area List MBMS Routing Area List/11.3.75 M TLV 3-? */ - ELEM_MAND_TELV(0x61, BSSGP_PDU_TYPE, DE_BSSGP_MBMS_RA_LIST, NULL); - /* MBMS Session Duration MBMS Session Duration/11.3.72 M TLV 3-? */ - ELEM_MAND_TELV(0x5e, BSSGP_PDU_TYPE, DE_BSSGP_MBMS_SESSION_DUR, NULL); - /* MBMS Session Information MBMS Session Information/11.3.76 M TLV 3 */ - ELEM_MAND_TELV(0x62, BSSGP_PDU_TYPE, DE_BSSGP_MBMS_SESSION_INF, NULL); - /* Time to MBMS Data Transfer Time to MBMS Data Transfer/11.3.92 M TLV 3 */ - ELEM_MAND_TELV(0x71, BSSGP_PDU_TYPE, DE_BSSGP_TIME_TO_MBMS_DATA_TRAN, NULL); - /* Allocation/Retention Priority Priority/11.3.27 O TLV 3 */ - ELEM_OPT_TELV(0x0b, GSM_A_PDU_TYPE_BSSMAP, BE_PRIO, NULL); - /* MBMS Session Repetition Number MBMS Session Repetition Number/11.3.93 O TLV 3 */ - ELEM_MAND_TELV(0x72, BSSGP_PDU_TYPE, DE_BSSGP_MBMS_SESSION_REP_NO, NULL); + /* TMGI TMGI/11.3.77 M TLV 3-8 */ + ELEM_MAND_TELV(0x5c, GSM_A_PDU_TYPE_GM, DE_TMGI, NULL); + /* MBMS Session Identity MBMS Session Identity/11.3.71 O TLV 3 */ + ELEM_OPT_TELV(0x5d, BSSGP_PDU_TYPE, DE_BSSGP_MBMS_SESSION_ID, NULL); + /* ABQP ABQP/11.3.43 M TLV 13-? */ + ELEM_MAND_TELV(0x3a , GSM_A_PDU_TYPE_GM, DE_QOS , NULL); + /* MBMS Service Area Identity List MBMS Service Area Identity List/11.3.73 M TLV 4-? */ + ELEM_MAND_TELV(0x5f, BSSGP_PDU_TYPE, DE_BSSGP_MBMS_SAI_LIST, NULL); + /* MBMS Routing Area List MBMS Routing Area List/11.3.75 M TLV 3-? */ + ELEM_MAND_TELV(0x61, BSSGP_PDU_TYPE, DE_BSSGP_MBMS_RA_LIST, NULL); + /* MBMS Session Duration MBMS Session Duration/11.3.72 M TLV 3-? */ + ELEM_MAND_TELV(0x5e, BSSGP_PDU_TYPE, DE_BSSGP_MBMS_SESSION_DUR, NULL); + /* MBMS Session Information MBMS Session Information/11.3.76 M TLV 3 */ + ELEM_MAND_TELV(0x62, BSSGP_PDU_TYPE, DE_BSSGP_MBMS_SESSION_INF, NULL); + /* Time to MBMS Data Transfer Time to MBMS Data Transfer/11.3.92 M TLV 3 */ + ELEM_MAND_TELV(0x71, BSSGP_PDU_TYPE, DE_BSSGP_TIME_TO_MBMS_DATA_TRAN, NULL); + /* Allocation/Retention Priority Priority/11.3.27 O TLV 3 */ + ELEM_OPT_TELV(0x0b, GSM_A_PDU_TYPE_BSSMAP, BE_PRIO, NULL); + /* MBMS Session Repetition Number MBMS Session Repetition Number/11.3.93 O TLV 3 */ + ELEM_MAND_TELV(0x72, BSSGP_PDU_TYPE, DE_BSSGP_MBMS_SESSION_REP_NO, NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); } /* - * 10.7.2 MBMS-SESSION-START-RESPONSE + * 10.7.2 MBMS-SESSION-START-RESPONSE */ static void bssgp_mbms_session_start_resp(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* This PDU allows a BSS to acknowledge to SGSN that it will start an MBMS session or to indicate to SGSN why the - * MBMS Service Context cannot be created or is released by the BSS. - */ + /* This PDU allows a BSS to acknowledge to SGSN that it will start an MBMS session or to indicate to SGSN why the + * MBMS Service Context cannot be created or is released by the BSS. + */ - /* Direction: BSS to SGSN */ - pinfo->link_dir = P2P_DIR_UL; + /* Direction: BSS to SGSN */ + pinfo->link_dir = P2P_DIR_UL; - /* TMGI TMGI/ 11.3.77 M TLV 3-8 */ - ELEM_MAND_TELV(0x5c, GSM_A_PDU_TYPE_GM, DE_TMGI, NULL); - /* MBMS Session Identity MBMS Session Identity/ 11.3.71 O TLV 3 */ - ELEM_OPT_TELV(0x5d, BSSGP_PDU_TYPE, DE_BSSGP_MBMS_SESSION_ID, NULL); - /* MBMS Response MBMS Response/ 11.3.74 M TLV 3 */ - ELEM_OPT_TELV(0x60, BSSGP_PDU_TYPE, DE_BSSGP_MBMS_RESPONSE, NULL); + /* TMGI TMGI/ 11.3.77 M TLV 3-8 */ + ELEM_MAND_TELV(0x5c, GSM_A_PDU_TYPE_GM, DE_TMGI, NULL); + /* MBMS Session Identity MBMS Session Identity/ 11.3.71 O TLV 3 */ + ELEM_OPT_TELV(0x5d, BSSGP_PDU_TYPE, DE_BSSGP_MBMS_SESSION_ID, NULL); + /* MBMS Response MBMS Response/ 11.3.74 M TLV 3 */ + ELEM_OPT_TELV(0x60, BSSGP_PDU_TYPE, DE_BSSGP_MBMS_RESPONSE, NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); } /* - * 10.7.3 MBMS-SESSION-STOP-REQUEST + * 10.7.3 MBMS-SESSION-STOP-REQUEST */ static void bssgp_mbms_session_stop_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* This PDU allows a SGSN to request BSS to stop an MBMS session. */ + /* This PDU allows a SGSN to request BSS to stop an MBMS session. */ - /* Direction: SGSN to BSS */ - pinfo->link_dir = P2P_DIR_DL; + /* Direction: SGSN to BSS */ + pinfo->link_dir = P2P_DIR_DL; - /* TMGI TMGI/ 11.3.77 M TLV 3-8 */ - ELEM_MAND_TELV(0x5c, GSM_A_PDU_TYPE_GM, DE_TMGI, NULL); - /* MBMS Session Identity MBMS Session Identity/ 11.3.71 O TLV 3 */ - ELEM_OPT_TELV(0x5d, BSSGP_PDU_TYPE, DE_BSSGP_MBMS_SESSION_ID, NULL); - /* MBMS Stop Cause MBMS Stop Cause/11.3.78 M TLV 3 */ - ELEM_OPT_TELV(0x63, BSSGP_PDU_TYPE, DE_BSSGP_MBMS_STOP_CAUSE, NULL); + /* TMGI TMGI/ 11.3.77 M TLV 3-8 */ + ELEM_MAND_TELV(0x5c, GSM_A_PDU_TYPE_GM, DE_TMGI, NULL); + /* MBMS Session Identity MBMS Session Identity/ 11.3.71 O TLV 3 */ + ELEM_OPT_TELV(0x5d, BSSGP_PDU_TYPE, DE_BSSGP_MBMS_SESSION_ID, NULL); + /* MBMS Stop Cause MBMS Stop Cause/11.3.78 M TLV 3 */ + ELEM_OPT_TELV(0x63, BSSGP_PDU_TYPE, DE_BSSGP_MBMS_STOP_CAUSE, NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); } /* - * 10.7.4 MBMS-SESSION-STOP-RESPONSE + * 10.7.4 MBMS-SESSION-STOP-RESPONSE */ static void bssgp_mbms_session_stop_resp(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* This PDU allows a BSS to acknowledge to SGSN that it will stop an MBMS session. */ + /* This PDU allows a BSS to acknowledge to SGSN that it will stop an MBMS session. */ - /* Direction: BSS to SGSN */ - pinfo->link_dir = P2P_DIR_UL; + /* Direction: BSS to SGSN */ + pinfo->link_dir = P2P_DIR_UL; - /* TMGI TMGI/ 11.3.77 M TLV 3-8 */ - ELEM_MAND_TELV(0x5c, GSM_A_PDU_TYPE_GM, DE_TMGI, NULL); - /* MBMS Session Identity MBMS Session Identity/ 11.3.71 O TLV 3 */ - ELEM_OPT_TELV(0x5d, BSSGP_PDU_TYPE, DE_BSSGP_MBMS_SESSION_ID, NULL); - /* MBMS Response MBMS Response/ 11.3.74 M TLV 3 */ - ELEM_OPT_TELV(0x60, BSSGP_PDU_TYPE, DE_BSSGP_MBMS_RESPONSE, NULL); + /* TMGI TMGI/ 11.3.77 M TLV 3-8 */ + ELEM_MAND_TELV(0x5c, GSM_A_PDU_TYPE_GM, DE_TMGI, NULL); + /* MBMS Session Identity MBMS Session Identity/ 11.3.71 O TLV 3 */ + ELEM_OPT_TELV(0x5d, BSSGP_PDU_TYPE, DE_BSSGP_MBMS_SESSION_ID, NULL); + /* MBMS Response MBMS Response/ 11.3.74 M TLV 3 */ + ELEM_OPT_TELV(0x60, BSSGP_PDU_TYPE, DE_BSSGP_MBMS_RESPONSE, NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); } /* - * 10.7.5 MBMS-SESSION-UPDATE-REQUEST + * 10.7.5 MBMS-SESSION-UPDATE-REQUEST */ static void bssgp_mbms_session_update_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; - - curr_offset = offset; - curr_len = len; - - /* This PDU allows an SGSN to request BSS to update the MBMS service area list - * of an ongoing MBMS broadcast service session. - */ - - /* Direction: BSS to SGSN */ - pinfo->link_dir = P2P_DIR_UL; - - /* TMGI TMGI/ 11.3.77 M TLV 3-8 */ - ELEM_MAND_TELV(0x5c, GSM_A_PDU_TYPE_GM, DE_TMGI, NULL); - /* MBMS Session Identity MBMS Session Identity/ 11.3.71 O TLV 3 */ - ELEM_OPT_TELV(0x5d, BSSGP_PDU_TYPE, DE_BSSGP_MBMS_SESSION_ID, NULL); - /* ABQP ABQP/11.3.43 M TLV 13-? */ - ELEM_MAND_TELV(0x3a , GSM_A_PDU_TYPE_GM, DE_QOS , NULL); - /* MBMS Service Area Identity List MBMS Service Area Identity List/11.3.73 M TLV 4-? */ - ELEM_MAND_TELV(0x5f, BSSGP_PDU_TYPE, DE_BSSGP_MBMS_SAI_LIST, NULL); - /* MBMS Routing Area List MBMS Routing Area List/11.3.75 M TLV 3-? */ - ELEM_MAND_TELV(0x61, BSSGP_PDU_TYPE, DE_BSSGP_MBMS_RA_LIST, NULL); - /* MBMS Session Duration MBMS Session Duration/11.3.72 M TLV 3-? */ - ELEM_MAND_TELV(0x5e, BSSGP_PDU_TYPE, DE_BSSGP_MBMS_SESSION_DUR, NULL); - /* MBMS Session Information MBMS Session Information/11.3.76 M TLV 3 */ - ELEM_MAND_TELV(0x62, BSSGP_PDU_TYPE, DE_BSSGP_MBMS_SESSION_INF, NULL); - /* Time to MBMS Data Transfer Time to MBMS Data Transfer/11.3.92 M TLV 3 */ - ELEM_MAND_TELV(0x71, BSSGP_PDU_TYPE, DE_BSSGP_TIME_TO_MBMS_DATA_TRAN, NULL); - /* Allocation/Retention Priority Priority/11.3.27 O TLV 3 */ - ELEM_OPT_TELV(0x0b, GSM_A_PDU_TYPE_BSSMAP, BE_PRIO, NULL); - /* MBMS Session Repetition Number MBMS Session Repetition Number/11.3.93 O TLV 3 */ - ELEM_MAND_TELV(0x72, BSSGP_PDU_TYPE, DE_BSSGP_MBMS_SESSION_REP_NO, NULL); - - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); -} -/* - * 10.7.6 MBMS-SESSION-UPDATE-RESPONSE + guint32 curr_offset; + guint32 consumed; + guint curr_len; + + curr_offset = offset; + curr_len = len; + + /* This PDU allows an SGSN to request BSS to update the MBMS service area list + * of an ongoing MBMS broadcast service session. + */ + + /* Direction: BSS to SGSN */ + pinfo->link_dir = P2P_DIR_UL; + + /* TMGI TMGI/ 11.3.77 M TLV 3-8 */ + ELEM_MAND_TELV(0x5c, GSM_A_PDU_TYPE_GM, DE_TMGI, NULL); + /* MBMS Session Identity MBMS Session Identity/ 11.3.71 O TLV 3 */ + ELEM_OPT_TELV(0x5d, BSSGP_PDU_TYPE, DE_BSSGP_MBMS_SESSION_ID, NULL); + /* ABQP ABQP/11.3.43 M TLV 13-? */ + ELEM_MAND_TELV(0x3a , GSM_A_PDU_TYPE_GM, DE_QOS , NULL); + /* MBMS Service Area Identity List MBMS Service Area Identity List/11.3.73 M TLV 4-? */ + ELEM_MAND_TELV(0x5f, BSSGP_PDU_TYPE, DE_BSSGP_MBMS_SAI_LIST, NULL); + /* MBMS Routing Area List MBMS Routing Area List/11.3.75 M TLV 3-? */ + ELEM_MAND_TELV(0x61, BSSGP_PDU_TYPE, DE_BSSGP_MBMS_RA_LIST, NULL); + /* MBMS Session Duration MBMS Session Duration/11.3.72 M TLV 3-? */ + ELEM_MAND_TELV(0x5e, BSSGP_PDU_TYPE, DE_BSSGP_MBMS_SESSION_DUR, NULL); + /* MBMS Session Information MBMS Session Information/11.3.76 M TLV 3 */ + ELEM_MAND_TELV(0x62, BSSGP_PDU_TYPE, DE_BSSGP_MBMS_SESSION_INF, NULL); + /* Time to MBMS Data Transfer Time to MBMS Data Transfer/11.3.92 M TLV 3 */ + ELEM_MAND_TELV(0x71, BSSGP_PDU_TYPE, DE_BSSGP_TIME_TO_MBMS_DATA_TRAN, NULL); + /* Allocation/Retention Priority Priority/11.3.27 O TLV 3 */ + ELEM_OPT_TELV(0x0b, GSM_A_PDU_TYPE_BSSMAP, BE_PRIO, NULL); + /* MBMS Session Repetition Number MBMS Session Repetition Number/11.3.93 O TLV 3 */ + ELEM_MAND_TELV(0x72, BSSGP_PDU_TYPE, DE_BSSGP_MBMS_SESSION_REP_NO, NULL); + + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); +} +/* + * 10.7.6 MBMS-SESSION-UPDATE-RESPONSE */ static void bssgp_mbms_session_uptate_resp(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* This PDU allows a BSS to acknowledge to SGSN that it will update the MBMS service area list of an ongoing MBMS - * broadcast service session or to indicate to SGSN why the MBMS Service Context cannot be created or is released by the BSS. - */ + /* This PDU allows a BSS to acknowledge to SGSN that it will update the MBMS service area list of an ongoing MBMS + * broadcast service session or to indicate to SGSN why the MBMS Service Context cannot be created or is released by the BSS. + */ - /* Direction: BSS to SGSN */ - pinfo->link_dir = P2P_DIR_UL; + /* Direction: BSS to SGSN */ + pinfo->link_dir = P2P_DIR_UL; - /* TMGI TMGI/ 11.3.77 M TLV 3-8 */ - ELEM_MAND_TELV(0x5c, GSM_A_PDU_TYPE_GM, DE_TMGI, NULL); - /* MBMS Session Identity MBMS Session Identity/ 11.3.71 O TLV 3 */ - ELEM_OPT_TELV(0x5d, BSSGP_PDU_TYPE, DE_BSSGP_MBMS_SESSION_ID, NULL); - /* MBMS Response MBMS Response/ 11.3.74 M TLV 3 */ - ELEM_OPT_TELV(0x60, BSSGP_PDU_TYPE, DE_BSSGP_MBMS_RESPONSE, NULL); + /* TMGI TMGI/ 11.3.77 M TLV 3-8 */ + ELEM_MAND_TELV(0x5c, GSM_A_PDU_TYPE_GM, DE_TMGI, NULL); + /* MBMS Session Identity MBMS Session Identity/ 11.3.71 O TLV 3 */ + ELEM_OPT_TELV(0x5d, BSSGP_PDU_TYPE, DE_BSSGP_MBMS_SESSION_ID, NULL); + /* MBMS Response MBMS Response/ 11.3.74 M TLV 3 */ + ELEM_OPT_TELV(0x60, BSSGP_PDU_TYPE, DE_BSSGP_MBMS_RESPONSE, NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); } static const value_string bssgp_msg_strings[] = { -/* 0x00 */ { BSSGP_PDU_DL_UNITDATA, "DL-UNITDATA" }, /* 10.2.1 DL-UNITDATA */ -/* 0x01 */ { BSSGP_PDU_UL_UNITDATA, "UL-UNITDATA" }, /* 10.2.2 UL-UNITDATA */ -/* 0x02 */ { BSSGP_PDU_RA_CAPABILITY, "RA-CAPABILITY" }, /* 10.2.3 RA-CAPABILITY */ -/* NOTE 1: This value was allocated in an earlier version of the protocol and shall not be used */ -/* 0x03 */ { BSSGP_PDU_PTM_UNITDATA, "Reserved" }, /* 10.2.4 (void) */ -/* 0x04 */ { BSSGP_PDU_DL_MBMS_UNITDATA, "DL-MBMS-UNITDATA" }, /* 10.2.5 DL-MBMS-UNITDATA */ -/* 0x05 */ { BSSGP_PDU_UL_MBMS_UNITDATA, "UL-MBMS-UNITDATA" }, /* 10.2.6 UL-MBMS-UNITDATA */ -/* 0x06 */ { BSSGP_PDU_PAGING_PS, "PAGING-PS" }, /* 10.3.1 PAGING PS */ -/* 0x07 */ { BSSGP_PDU_PAGING_CS, "PAGING-CS" }, /* 10.3.2 PAGING CS */ -/* 0x08 */ { BSSGP_PDU_RA_CAPABILITY_UPDATE, "RA-CAPABILITY-UPDATE" }, /* 10.3.3 RA-CAPABILITY-UPDATE */ -/* 0x09 */ { BSSGP_PDU_RA_CAPABILITY_UPDATE_ACK, "RA-CAPABILITY-UPDATE-ACK" }, /* 10.3.4 RA-CAPABILITY-UPDATE-ACK */ -/* 0x0a */ { BSSGP_PDU_RADIO_STATUS, "RADIO-STATUS" }, /* 10.3.5 RADIO-STATUS */ -/* 0x0b */ { BSSGP_PDU_SUSPEND, "SUSPEND" }, /* 10.3.6 SUSPEND */ -/* 0x0c */ { BSSGP_PDU_SUSPEND_ACK, "SUSPEND-ACK" }, /* 10.3.7 SUSPEND-ACK */ -/* 0x0d */ { BSSGP_PDU_SUSPEND_NACK, "SUSPEND-NACK" }, /* 10.3.8 SUSPEND-NACK */ -/* 0x0e */ { BSSGP_PDU_RESUME, "RESUME" }, /* 10.3.9 RESUME */ -/* 0x0f */ { BSSGP_PDU_RESUME_ACK, "RESUME-ACK" }, /* 10.3.10 RESUME-ACK */ -/* 0x10 */ { BSSGP_PDU_RESUME_NACK, "RESUME-NACK" }, /* 10.3.11 RESUME-NACK */ - /* 0x11 to 0x1f Reserved */ -/* 0x11 */ { BSSGP_PDU_RESERVED_0X11, "Reserved" }, /* */ -/* 0x12 */ { BSSGP_PDU_RESERVED_0X12, "Reserved" }, /* */ -/* 0x13 */ { BSSGP_PDU_RESERVED_0X13, "Reserved" }, /* */ -/* 0x14 */ { BSSGP_PDU_RESERVED_0X14, "Reserved" }, /* */ -/* 0x15 */ { BSSGP_PDU_RESERVED_0X15, "Reserved" }, /* */ -/* 0x16 */ { BSSGP_PDU_RESERVED_0X16, "Reserved" }, /* */ -/* 0x17 */ { BSSGP_PDU_RESERVED_0X17, "Reserved" }, /* */ -/* 0x18 */ { BSSGP_PDU_RESERVED_0X18, "Reserved" }, /* */ -/* 0x19 */ { BSSGP_PDU_RESERVED_0X19, "Reserved" }, /* */ -/* 0x1a */ { BSSGP_PDU_RESERVED_0X1A, "Reserved" }, /* */ -/* 0x1b */ { BSSGP_PDU_RESERVED_0X1B, "Reserved" }, /* */ -/* 0x1c */ { BSSGP_PDU_RESERVED_0X1C, "Reserved" }, /* */ -/* 0x1d */ { BSSGP_PDU_RESERVED_0X1D, "Reserved" }, /* */ -/* 0x1e */ { BSSGP_PDU_RESERVED_0X1E, "Reserved" }, /* */ -/* 0x1f */ { BSSGP_PDU_RESERVED_0X1F, "Reserved" }, /* */ - -/* 0x20 */ { BSSGP_PDU_BVC_BLOCK, "BVC-BLOCK" }, /* 10.4.8 BVC-BLOCK */ -/* 0x21 */ { BSSGP_PDU_BVC_BLOCK_ACK, "BVC-BLOCK-ACK" }, /* 10.4.9 BVC-BLOCK-ACK */ -/* 0x22 */ { BSSGP_PDU_BVC_RESET, "BVC-RESET" }, /* 10.4.12 BVC-RESET */ -/* 0x23 */ { BSSGP_PDU_BVC_RESET_ACK, "BVC-RESET-ACK" }, /* 10.4.13 BVC-RESET-ACK */ -/* 0x24 */ { BSSGP_PDU_BVC_UNBLOCK, "UNBLOCK" }, /* 10.4.10 BVC-UNBLOCK */ -/* 0x25 */ { BSSGP_PDU_BVC_UNBLOCK_ACK, "UNBLOCK-ACK" }, /* 10.4.11 BVC-UNBLOCK-ACK */ -/* 0x26 */ { BSSGP_PDU_FLOW_CONTROL_BVC, "FLOW-CONTROL-BVC" }, /* 10.4.4 FLOW-CONTROL-BVC */ -/* 0x27 */ { BSSGP_PDU_FLOW_CONTROL_BVC_ACK, "FLOW-CONTROL-BVC-ACK" }, /* 10.4.5 FLOW-CONTROL-BVC-ACK */ -/* 0x28 */ { BSSGP_PDU_FLOW_CONTROL_MS, "FLOW-CONTROL-MS" }, /* 10.4.6 FLOW-CONTROL-MS */ -/* 0x29 */ { BSSGP_PDU_FLOW_CONTROL_MS_ACK, "FLOW-CONTROL-MS-ACK" }, /* 10.4.7 FLOW-CONTROL-MS-ACK */ -/* 0x2a */ { BSSGP_PDU_FLUSH_LL, "FLUSH-LL" }, /* 10.4.1 FLUSH-LL */ -/* 0x2b */ { BSSGP_PDU_FLUSH_LL_ACK, "FLUSH_LL_ACK" }, /* 10.4.2 FLUSH-LL-ACK */ -/* 0x2c */ { BSSGP_PDU_LLC_DISCARDED, "LLC-DISCARDED" }, /* 10.4.3 LLC-DISCARDED */ -/* 0x2d */ { BSSGP_PDU_FLOW_CONTROL_PFC, "FLOW-CONTROL-PFC" }, /* 10.4.24 FLOW-CONTROL-PFC */ -/* 0x2e */ { BSSGP_PDU_FLOW_CONTROL_PFC_ACK, "FLOW-CONTROL-PFC-ACK" }, /* 10.4.25 FLOW-CONTROL-PFC-ACK */ - /* 0x2f to 0x3f Reserved */ -/* 0x2f */ { BSSGP_PDU_RESERVED_0X2F, "Reserved" }, /* */ -/* 0x30 */ { BSSGP_PDU_RESERVED_0X30, "Reserved" }, /* */ -/* 0x31 */ { BSSGP_PDU_RESERVED_0X31, "Reserved" }, /* */ -/* 0x32 */ { BSSGP_PDU_RESERVED_0X32, "Reserved" }, /* */ -/* 0x33 */ { BSSGP_PDU_RESERVED_0X33, "Reserved" }, /* */ -/* 0x34 */ { BSSGP_PDU_RESERVED_0X34, "Reserved" }, /* */ -/* 0x35 */ { BSSGP_PDU_RESERVED_0X35, "Reserved" }, /* */ -/* 0x36 */ { BSSGP_PDU_RESERVED_0X36, "Reserved" }, /* */ -/* 0x37 */ { BSSGP_PDU_RESERVED_0X37, "Reserved" }, /* */ -/* 0x38 */ { BSSGP_PDU_RESERVED_0X38, "Reserved" }, /* */ -/* 0x39 */ { BSSGP_PDU_RESERVED_0X39, "Reserved" }, /* */ -/* 0x3a */ { BSSGP_PDU_RESERVED_0X3A, "Reserved" }, /* */ -/* 0x3b */ { BSSGP_PDU_RESERVED_0X3B, "Reserved" }, /* */ -/* 0x3c */ { BSSGP_PDU_RESERVED_0X3C, "Reserved" }, /* */ -/* 0x3d */ { BSSGP_PDU_RESERVED_0X3D, "Reserved" }, /* */ -/* 0x3e */ { BSSGP_PDU_RESERVED_0X3E, "Reserved" }, /* */ -/* 0x3f */ { BSSGP_PDU_RESERVED_0X3F, "Reserved" }, /* */ - -/* 0x40 */ { BSSGP_PDU_SGSN_INVOKE_TRACE, "SGSN-INVOKE-TRACE" }, /* 10.4.15 SGSN-INVOKE-TRACE */ -/* 0x41 */ { BSSGP_PDU_STATUS, "STATUS" }, /* 10.4.14 STATUS */ - /* 0x42 to 0x4f Reserved */ -/* 0x42 */ { BSSGP_PDU_RESERVED_0X42, "Reserved" }, /* */ -/* 0x43 */ { BSSGP_PDU_RESERVED_0X43, "Reserved" }, /* */ -/* 0x44 */ { BSSGP_PDU_RESERVED_0X44, "Reserved" }, /* */ -/* 0x45 */ { BSSGP_PDU_RESERVED_0X45, "Reserved" }, /* */ -/* 0x46 */ { BSSGP_PDU_RESERVED_0X46, "Reserved" }, /* */ -/* 0x47 */ { BSSGP_PDU_RESERVED_0X47, "Reserved" }, /* */ -/* 0x48 */ { BSSGP_PDU_RESERVED_0X48, "Reserved" }, /* */ -/* 0x49 */ { BSSGP_PDU_RESERVED_0X49, "Reserved" }, /* */ -/* 0x4a */ { BSSGP_PDU_RESERVED_0X4A, "Reserved" }, /* */ -/* 0x4b */ { BSSGP_PDU_RESERVED_0X4B, "Reserved" }, /* */ -/* 0x4c */ { BSSGP_PDU_RESERVED_0X4C, "Reserved" }, /* */ -/* 0x4d */ { BSSGP_PDU_RESERVED_0X4D, "Reserved" }, /* */ -/* 0x4e */ { BSSGP_PDU_RESERVED_0X4E, "Reserved" }, /* */ -/* 0x4f */ { BSSGP_PDU_RESERVED_0X4F, "Reserved" }, /* */ -/* 0x50 */ { BSSGP_PDU_DOWNLOAD_BSS_PFC, "DOWNLOAD-BSS-PFC" }, /* 10.4.16 DOWNLOAD-BSS-PFC */ -/* 0x51 */ { BSSGP_PDU_CREATE_BSS_PFC, "CREATE-BSS-PFC" }, /* 10.4.17 CREATE-BSS-PFC */ -/* 0x52 */ { BSSGP_PDU_CREATE_BSS_PFC_ACK, "CREATE-BSS-PFC-ACK" }, /* 10.4.18 CREATE-BSS-PFC-ACK */ -/* 0x53 */ { BSSGP_PDU_CREATE_BSS_PFC_NACK, "CREATE-BSS-PFC-NACK" }, /* 10.4.19 CREATE-BSS-PFC-NACK */ -/* 0x54 */ { BSSGP_PDU_MODIFY_BSS_PFC, "MODIFY-BSS-PFC" }, /* 10.4.20 MODIFY-BSS-PFC */ -/* 0x55 */ { BSSGP_PDU_MODIFY_BSS_PFC_ACK, "MODIFY-BSS-PFC-ACK" }, /* 10.4.21 MODIFY-BSS-PFC-ACK */ -/* 0x56 */ { BSSGP_PDU_DELETE_BSS_PFC, "DELETE-BSS-PFC" }, /* 10.4.22 DELETE-BSS-PFC */ -/* 0x57 */ { BSSGP_PDU_DELETE_BSS_PFC_ACK, "DELETE-BSS-PFC-ACK" }, /* 10.4.23 DELETE-BSS-PFC-ACK */ -/* 0x58 */ { BSSGP_PDU_DELETE_BSS_PFC_REQ, "DELETE-BSS-PFC-REQ" }, /* 10.4.26 DELETE-BSS-PFC-REQ */ -/* 0x59 */ { BSSGP_PDU_PS_HANDOVER_REQUIRED, "PS-HANDOVER-REQUIRED" }, /* 10.4.27 PS-HANDOVER-REQUIRED */ -/* 0x5a */ { BSSGP_PDU_PS_HANDOVER_REQUIRED_ACK, "PS-HANDOVER-REQUIRED-ACK" }, /* 10.4.28 PS-HANDOVER-REQUIRED-ACK */ -/* 0x5b */ { BSSGP_PDU_PS_HANDOVER_REQUIRED_NACK, "PS-HANDOVER-REQUIRED-NACK" }, /* 10.4.29 PS-HANDOVER-REQUIRED-NACK */ -/* 0x5c */ { BSSGP_PDU_PS_HANDOVER_REQUEST, "PS-HANDOVER-REQUEST" }, /* 10.4.30 PS-HANDOVER-REQUEST */ -/* 0x5d */ { BSSGP_PDU_PS_HANDOVER_REQUEST_ACK, "PS-HANDOVER-REQUEST-ACK" }, /* 10.4.31 PS-HANDOVER-REQUEST-ACK */ -/* 0x5e */ { BSSGP_PDU_PS_HANDOVER_REQUEST_NACK, "PS-HANDOVER-REQUEST-NACK" }, /* 10.4.31 10.4.32 PS-HANDOVER-REQUEST-NACK */ - -/* 0x5f */ { BSSGP_PDU_RESERVED_0X5F, "Reserved" }, /* */ - -/* 0x60 */ { BSSGP_PDU_PERFORM_LOCATION_REQUEST, "PERFORM-LOCATION-REQUEST" }, /* 10.5.1 PERFORM-LOCATION-REQUEST */ -/* 0x61 */ { BSSGP_PDU_PERFORM_LOCATION_RESPONSE, "PERFORM-LOCATION-RESPONSE" }, /* 10.5.2 PERFORM-LOCATION-RESPONSE */ -/* 0x62 */ { BSSGP_PDU_PERFORM_LOCATION_ABORT, "PERFORM-LOCATION-ABORT" }, /* 10.5.3 PERFORM-LOCATION-ABORT */ -/* 0x63 */ { BSSGP_PDU_POSITION_COMMAND, "POSITION-COMMAND" }, /* 10.5.4 POSITION-COMMAND */ -/* 0x64 */ { BSSGP_PDU_POSITION_RESPONSE, "POSITION-RESPONSE" }, /* 10.5.5 POSITION-RESPONSE */ - -/* 0x65 */ { BSSGP_PDU_RESERVED_0X65, "Reserved" }, /* */ -/* 0x66 */ { BSSGP_PDU_RESERVED_0X66, "Reserved" }, /* */ -/* 0x67 */ { BSSGP_PDU_RESERVED_0X67, "Reserved" }, /* */ -/* 0x68 */ { BSSGP_PDU_RESERVED_0X68, "Reserved" }, /* */ -/* 0x69 */ { BSSGP_PDU_RESERVED_0X69, "Reserved" }, /* */ -/* 0x6a */ { BSSGP_PDU_RESERVED_0X6A, "Reserved" }, /* */ -/* 0x6b */ { BSSGP_PDU_RESERVED_0X6B, "Reserved" }, /* */ -/* 0x6b */ { BSSGP_PDU_RESERVED_0X6C, "Reserved" }, /* */ -/* 0x6d */ { BSSGP_PDU_RESERVED_0X6D, "Reserved" }, /* */ -/* 0x6e */ { BSSGP_PDU_RESERVED_0X6E, "Reserved" }, /* */ -/* 0x6f */ { BSSGP_PDU_RESERVED_0X6F, "Reserved" }, /* */ - -/* 0x70 */ { BSSGP_PDU_RAN_INFORMATION, "RAN-INFORMATION" }, /* 10.6.2 RAN-INFORMATION */ -/* 0x71 */ { BSSGP_PDU_RAN_INFORMATION_REQUEST, "RAN-INFORMATION-REQUEST" }, /* 10.6.1 RAN-INFORMATION-REQUEST */ -/* 0x72 */ { BSSGP_PDU_RAN_INFORMATION_ACK, "RAN-INFORMATION-ACK" }, /* 10.6.3 RAN-INFORMATION-ACK */ -/* 0x73 */ { BSSGP_PDU_RAN_INFORMATION_ERROR, "RAN-INFORMATION-ERROR" }, /* 10.6.4 RAN-INFORMATION-ERROR */ +/* 0x00 */ { BSSGP_PDU_DL_UNITDATA, "DL-UNITDATA" }, /* 10.2.1 DL-UNITDATA */ +/* 0x01 */ { BSSGP_PDU_UL_UNITDATA, "UL-UNITDATA" }, /* 10.2.2 UL-UNITDATA */ +/* 0x02 */ { BSSGP_PDU_RA_CAPABILITY, "RA-CAPABILITY" }, /* 10.2.3 RA-CAPABILITY */ +/* NOTE 1: This value was allocated in an earlier version of the protocol and shall not be used */ +/* 0x03 */ { BSSGP_PDU_PTM_UNITDATA, "Reserved" }, /* 10.2.4 (void) */ +/* 0x04 */ { BSSGP_PDU_DL_MBMS_UNITDATA, "DL-MBMS-UNITDATA" }, /* 10.2.5 DL-MBMS-UNITDATA */ +/* 0x05 */ { BSSGP_PDU_UL_MBMS_UNITDATA, "UL-MBMS-UNITDATA" }, /* 10.2.6 UL-MBMS-UNITDATA */ +/* 0x06 */ { BSSGP_PDU_PAGING_PS, "PAGING-PS" }, /* 10.3.1 PAGING PS */ +/* 0x07 */ { BSSGP_PDU_PAGING_CS, "PAGING-CS" }, /* 10.3.2 PAGING CS */ +/* 0x08 */ { BSSGP_PDU_RA_CAPABILITY_UPDATE, "RA-CAPABILITY-UPDATE" }, /* 10.3.3 RA-CAPABILITY-UPDATE */ +/* 0x09 */ { BSSGP_PDU_RA_CAPABILITY_UPDATE_ACK, "RA-CAPABILITY-UPDATE-ACK" }, /* 10.3.4 RA-CAPABILITY-UPDATE-ACK */ +/* 0x0a */ { BSSGP_PDU_RADIO_STATUS, "RADIO-STATUS" }, /* 10.3.5 RADIO-STATUS */ +/* 0x0b */ { BSSGP_PDU_SUSPEND, "SUSPEND" }, /* 10.3.6 SUSPEND */ +/* 0x0c */ { BSSGP_PDU_SUSPEND_ACK, "SUSPEND-ACK" }, /* 10.3.7 SUSPEND-ACK */ +/* 0x0d */ { BSSGP_PDU_SUSPEND_NACK, "SUSPEND-NACK" }, /* 10.3.8 SUSPEND-NACK */ +/* 0x0e */ { BSSGP_PDU_RESUME, "RESUME" }, /* 10.3.9 RESUME */ +/* 0x0f */ { BSSGP_PDU_RESUME_ACK, "RESUME-ACK" }, /* 10.3.10 RESUME-ACK */ +/* 0x10 */ { BSSGP_PDU_RESUME_NACK, "RESUME-NACK" }, /* 10.3.11 RESUME-NACK */ +/* 0x11 to 0x1f Reserved */ +/* 0x11 */ { BSSGP_PDU_RESERVED_0X11, "Reserved" }, /* */ +/* 0x12 */ { BSSGP_PDU_RESERVED_0X12, "Reserved" }, /* */ +/* 0x13 */ { BSSGP_PDU_RESERVED_0X13, "Reserved" }, /* */ +/* 0x14 */ { BSSGP_PDU_RESERVED_0X14, "Reserved" }, /* */ +/* 0x15 */ { BSSGP_PDU_RESERVED_0X15, "Reserved" }, /* */ +/* 0x16 */ { BSSGP_PDU_RESERVED_0X16, "Reserved" }, /* */ +/* 0x17 */ { BSSGP_PDU_RESERVED_0X17, "Reserved" }, /* */ +/* 0x18 */ { BSSGP_PDU_RESERVED_0X18, "Reserved" }, /* */ +/* 0x19 */ { BSSGP_PDU_RESERVED_0X19, "Reserved" }, /* */ +/* 0x1a */ { BSSGP_PDU_RESERVED_0X1A, "Reserved" }, /* */ +/* 0x1b */ { BSSGP_PDU_RESERVED_0X1B, "Reserved" }, /* */ +/* 0x1c */ { BSSGP_PDU_RESERVED_0X1C, "Reserved" }, /* */ +/* 0x1d */ { BSSGP_PDU_RESERVED_0X1D, "Reserved" }, /* */ +/* 0x1e */ { BSSGP_PDU_RESERVED_0X1E, "Reserved" }, /* */ +/* 0x1f */ { BSSGP_PDU_RESERVED_0X1F, "Reserved" }, /* */ + +/* 0x20 */ { BSSGP_PDU_BVC_BLOCK, "BVC-BLOCK" }, /* 10.4.8 BVC-BLOCK */ +/* 0x21 */ { BSSGP_PDU_BVC_BLOCK_ACK, "BVC-BLOCK-ACK" }, /* 10.4.9 BVC-BLOCK-ACK */ +/* 0x22 */ { BSSGP_PDU_BVC_RESET, "BVC-RESET" }, /* 10.4.12 BVC-RESET */ +/* 0x23 */ { BSSGP_PDU_BVC_RESET_ACK, "BVC-RESET-ACK" }, /* 10.4.13 BVC-RESET-ACK */ +/* 0x24 */ { BSSGP_PDU_BVC_UNBLOCK, "UNBLOCK" }, /* 10.4.10 BVC-UNBLOCK */ +/* 0x25 */ { BSSGP_PDU_BVC_UNBLOCK_ACK, "UNBLOCK-ACK" }, /* 10.4.11 BVC-UNBLOCK-ACK */ +/* 0x26 */ { BSSGP_PDU_FLOW_CONTROL_BVC, "FLOW-CONTROL-BVC" }, /* 10.4.4 FLOW-CONTROL-BVC */ +/* 0x27 */ { BSSGP_PDU_FLOW_CONTROL_BVC_ACK, "FLOW-CONTROL-BVC-ACK" }, /* 10.4.5 FLOW-CONTROL-BVC-ACK */ +/* 0x28 */ { BSSGP_PDU_FLOW_CONTROL_MS, "FLOW-CONTROL-MS" }, /* 10.4.6 FLOW-CONTROL-MS */ +/* 0x29 */ { BSSGP_PDU_FLOW_CONTROL_MS_ACK, "FLOW-CONTROL-MS-ACK" }, /* 10.4.7 FLOW-CONTROL-MS-ACK */ +/* 0x2a */ { BSSGP_PDU_FLUSH_LL, "FLUSH-LL" }, /* 10.4.1 FLUSH-LL */ +/* 0x2b */ { BSSGP_PDU_FLUSH_LL_ACK, "FLUSH_LL_ACK" }, /* 10.4.2 FLUSH-LL-ACK */ +/* 0x2c */ { BSSGP_PDU_LLC_DISCARDED, "LLC-DISCARDED" }, /* 10.4.3 LLC-DISCARDED */ +/* 0x2d */ { BSSGP_PDU_FLOW_CONTROL_PFC, "FLOW-CONTROL-PFC" }, /* 10.4.24 FLOW-CONTROL-PFC */ +/* 0x2e */ { BSSGP_PDU_FLOW_CONTROL_PFC_ACK, "FLOW-CONTROL-PFC-ACK" }, /* 10.4.25 FLOW-CONTROL-PFC-ACK */ +/* 0x2f to 0x3f Reserved */ +/* 0x2f */ { BSSGP_PDU_RESERVED_0X2F, "Reserved" }, /* */ +/* 0x30 */ { BSSGP_PDU_RESERVED_0X30, "Reserved" }, /* */ +/* 0x31 */ { BSSGP_PDU_RESERVED_0X31, "Reserved" }, /* */ +/* 0x32 */ { BSSGP_PDU_RESERVED_0X32, "Reserved" }, /* */ +/* 0x33 */ { BSSGP_PDU_RESERVED_0X33, "Reserved" }, /* */ +/* 0x34 */ { BSSGP_PDU_RESERVED_0X34, "Reserved" }, /* */ +/* 0x35 */ { BSSGP_PDU_RESERVED_0X35, "Reserved" }, /* */ +/* 0x36 */ { BSSGP_PDU_RESERVED_0X36, "Reserved" }, /* */ +/* 0x37 */ { BSSGP_PDU_RESERVED_0X37, "Reserved" }, /* */ +/* 0x38 */ { BSSGP_PDU_RESERVED_0X38, "Reserved" }, /* */ +/* 0x39 */ { BSSGP_PDU_RESERVED_0X39, "Reserved" }, /* */ +/* 0x3a */ { BSSGP_PDU_RESERVED_0X3A, "Reserved" }, /* */ +/* 0x3b */ { BSSGP_PDU_RESERVED_0X3B, "Reserved" }, /* */ +/* 0x3c */ { BSSGP_PDU_RESERVED_0X3C, "Reserved" }, /* */ +/* 0x3d */ { BSSGP_PDU_RESERVED_0X3D, "Reserved" }, /* */ +/* 0x3e */ { BSSGP_PDU_RESERVED_0X3E, "Reserved" }, /* */ +/* 0x3f */ { BSSGP_PDU_RESERVED_0X3F, "Reserved" }, /* */ + +/* 0x40 */ { BSSGP_PDU_SGSN_INVOKE_TRACE, "SGSN-INVOKE-TRACE" }, /* 10.4.15 SGSN-INVOKE-TRACE */ +/* 0x41 */ { BSSGP_PDU_STATUS, "STATUS" }, /* 10.4.14 STATUS */ +/* 0x42 to 0x4f Reserved */ +/* 0x42 */ { BSSGP_PDU_RESERVED_0X42, "Reserved" }, /* */ +/* 0x43 */ { BSSGP_PDU_RESERVED_0X43, "Reserved" }, /* */ +/* 0x44 */ { BSSGP_PDU_RESERVED_0X44, "Reserved" }, /* */ +/* 0x45 */ { BSSGP_PDU_RESERVED_0X45, "Reserved" }, /* */ +/* 0x46 */ { BSSGP_PDU_RESERVED_0X46, "Reserved" }, /* */ +/* 0x47 */ { BSSGP_PDU_RESERVED_0X47, "Reserved" }, /* */ +/* 0x48 */ { BSSGP_PDU_RESERVED_0X48, "Reserved" }, /* */ +/* 0x49 */ { BSSGP_PDU_RESERVED_0X49, "Reserved" }, /* */ +/* 0x4a */ { BSSGP_PDU_RESERVED_0X4A, "Reserved" }, /* */ +/* 0x4b */ { BSSGP_PDU_RESERVED_0X4B, "Reserved" }, /* */ +/* 0x4c */ { BSSGP_PDU_RESERVED_0X4C, "Reserved" }, /* */ +/* 0x4d */ { BSSGP_PDU_RESERVED_0X4D, "Reserved" }, /* */ +/* 0x4e */ { BSSGP_PDU_RESERVED_0X4E, "Reserved" }, /* */ +/* 0x4f */ { BSSGP_PDU_RESERVED_0X4F, "Reserved" }, /* */ +/* 0x50 */ { BSSGP_PDU_DOWNLOAD_BSS_PFC, "DOWNLOAD-BSS-PFC" }, /* 10.4.16 DOWNLOAD-BSS-PFC */ +/* 0x51 */ { BSSGP_PDU_CREATE_BSS_PFC, "CREATE-BSS-PFC" }, /* 10.4.17 CREATE-BSS-PFC */ +/* 0x52 */ { BSSGP_PDU_CREATE_BSS_PFC_ACK, "CREATE-BSS-PFC-ACK" }, /* 10.4.18 CREATE-BSS-PFC-ACK */ +/* 0x53 */ { BSSGP_PDU_CREATE_BSS_PFC_NACK, "CREATE-BSS-PFC-NACK" }, /* 10.4.19 CREATE-BSS-PFC-NACK */ +/* 0x54 */ { BSSGP_PDU_MODIFY_BSS_PFC, "MODIFY-BSS-PFC" }, /* 10.4.20 MODIFY-BSS-PFC */ +/* 0x55 */ { BSSGP_PDU_MODIFY_BSS_PFC_ACK, "MODIFY-BSS-PFC-ACK" }, /* 10.4.21 MODIFY-BSS-PFC-ACK */ +/* 0x56 */ { BSSGP_PDU_DELETE_BSS_PFC, "DELETE-BSS-PFC" }, /* 10.4.22 DELETE-BSS-PFC */ +/* 0x57 */ { BSSGP_PDU_DELETE_BSS_PFC_ACK, "DELETE-BSS-PFC-ACK" }, /* 10.4.23 DELETE-BSS-PFC-ACK */ +/* 0x58 */ { BSSGP_PDU_DELETE_BSS_PFC_REQ, "DELETE-BSS-PFC-REQ" }, /* 10.4.26 DELETE-BSS-PFC-REQ */ +/* 0x59 */ { BSSGP_PDU_PS_HANDOVER_REQUIRED, "PS-HANDOVER-REQUIRED" }, /* 10.4.27 PS-HANDOVER-REQUIRED */ +/* 0x5a */ { BSSGP_PDU_PS_HANDOVER_REQUIRED_ACK, "PS-HANDOVER-REQUIRED-ACK" }, /* 10.4.28 PS-HANDOVER-REQUIRED-ACK */ +/* 0x5b */ { BSSGP_PDU_PS_HANDOVER_REQUIRED_NACK, "PS-HANDOVER-REQUIRED-NACK" }, /* 10.4.29 PS-HANDOVER-REQUIRED-NACK */ +/* 0x5c */ { BSSGP_PDU_PS_HANDOVER_REQUEST, "PS-HANDOVER-REQUEST" }, /* 10.4.30 PS-HANDOVER-REQUEST */ +/* 0x5d */ { BSSGP_PDU_PS_HANDOVER_REQUEST_ACK, "PS-HANDOVER-REQUEST-ACK" }, /* 10.4.31 PS-HANDOVER-REQUEST-ACK */ +/* 0x5e */ { BSSGP_PDU_PS_HANDOVER_REQUEST_NACK, "PS-HANDOVER-REQUEST-NACK" }, /* 10.4.31 10.4.32 PS-HANDOVER-REQUEST-NACK */ + +/* 0x5f */ { BSSGP_PDU_RESERVED_0X5F, "Reserved" }, /* */ + +/* 0x60 */ { BSSGP_PDU_PERFORM_LOCATION_REQUEST, "PERFORM-LOCATION-REQUEST" }, /* 10.5.1 PERFORM-LOCATION-REQUEST */ +/* 0x61 */ { BSSGP_PDU_PERFORM_LOCATION_RESPONSE, "PERFORM-LOCATION-RESPONSE" }, /* 10.5.2 PERFORM-LOCATION-RESPONSE */ +/* 0x62 */ { BSSGP_PDU_PERFORM_LOCATION_ABORT, "PERFORM-LOCATION-ABORT" }, /* 10.5.3 PERFORM-LOCATION-ABORT */ +/* 0x63 */ { BSSGP_PDU_POSITION_COMMAND, "POSITION-COMMAND" }, /* 10.5.4 POSITION-COMMAND */ +/* 0x64 */ { BSSGP_PDU_POSITION_RESPONSE, "POSITION-RESPONSE" }, /* 10.5.5 POSITION-RESPONSE */ + +/* 0x65 */ { BSSGP_PDU_RESERVED_0X65, "Reserved" }, /* */ +/* 0x66 */ { BSSGP_PDU_RESERVED_0X66, "Reserved" }, /* */ +/* 0x67 */ { BSSGP_PDU_RESERVED_0X67, "Reserved" }, /* */ +/* 0x68 */ { BSSGP_PDU_RESERVED_0X68, "Reserved" }, /* */ +/* 0x69 */ { BSSGP_PDU_RESERVED_0X69, "Reserved" }, /* */ +/* 0x6a */ { BSSGP_PDU_RESERVED_0X6A, "Reserved" }, /* */ +/* 0x6b */ { BSSGP_PDU_RESERVED_0X6B, "Reserved" }, /* */ +/* 0x6b */ { BSSGP_PDU_RESERVED_0X6C, "Reserved" }, /* */ +/* 0x6d */ { BSSGP_PDU_RESERVED_0X6D, "Reserved" }, /* */ +/* 0x6e */ { BSSGP_PDU_RESERVED_0X6E, "Reserved" }, /* */ +/* 0x6f */ { BSSGP_PDU_RESERVED_0X6F, "Reserved" }, /* */ + +/* 0x70 */ { BSSGP_PDU_RAN_INFORMATION, "RAN-INFORMATION" }, /* 10.6.2 RAN-INFORMATION */ +/* 0x71 */ { BSSGP_PDU_RAN_INFORMATION_REQUEST, "RAN-INFORMATION-REQUEST" }, /* 10.6.1 RAN-INFORMATION-REQUEST */ +/* 0x72 */ { BSSGP_PDU_RAN_INFORMATION_ACK, "RAN-INFORMATION-ACK" }, /* 10.6.3 RAN-INFORMATION-ACK */ +/* 0x73 */ { BSSGP_PDU_RAN_INFORMATION_ERROR, "RAN-INFORMATION-ERROR" }, /* 10.6.4 RAN-INFORMATION-ERROR */ /* 0x74 */ { BSSGP_PDU_RAN_INFORMATION_APP_ERROR, "RAN-INFORMATION-APPLICATION-ERROR" }, /* 10.6.5 RAN-INFORMATION-APPLICATION-ERROR */ -/* 0x75 */ { BSSGP_PDU_RESERVED_0X75, "Reserved" }, /* */ -/* 0x76 */ { BSSGP_PDU_RESERVED_0X76, "Reserved" }, /* */ -/* 0x77 */ { BSSGP_PDU_RESERVED_0X77, "Reserved" }, /* */ -/* 0x78 */ { BSSGP_PDU_RESERVED_0X78, "Reserved" }, /* */ -/* 0x79 */ { BSSGP_PDU_RESERVED_0X79, "Reserved" }, /* */ -/* 0x7a */ { BSSGP_PDU_RESERVED_0X7A, "Reserved" }, /* */ -/* 0x7b */ { BSSGP_PDU_RESERVED_0X7B, "Reserved" }, /* */ -/* 0x7c */ { BSSGP_PDU_RESERVED_0X7C, "Reserved" }, /* */ -/* 0x7d */ { BSSGP_PDU_RESERVED_0X7D, "Reserved" }, /* */ -/* 0x7e */ { BSSGP_PDU_RESERVED_0X7E, "Reserved" }, /* */ -/* 0x7f */ { BSSGP_PDU_RESERVED_0X7F, "Reserved" }, /* */ -/* 0x80 */ { BSSGP_PDU_MBMS_SESSION_START_REQ, "MBMS-SESSION-START-REQUEST" }, /* 10.7.1 MBMS-SESSION-START-REQUEST */ -/* 0x81 */ { BSSGP_PDU_MBMS_SESSION_START_RESP, "MBMS-SESSION-START-RESPONSE" }, /* 10.7.2 MBMS-SESSION-START-RESPONSE */ -/* 0x82 */ { BSSGP_PDU_MBMS_SESSION_STOP_REQ, "MBMS-SESSION-STOP-REQUEST" }, /* 10.7.3 MBMS-SESSION-STOP-REQUEST */ -/* 0x83 */ { BSSGP_PDU_MBMS_SESSION_STOP_RESP, "MBMS-SESSION-STOP-RESPONSE" }, /* 10.7.4 MBMS-SESSION-STOP-RESPONSE */ -/* 0x84 */ { BSSGP_PDU_MBMS_SESSION_UPDATE_REQ, "MBMS-SESSION-UPDATE-REQUEST" }, /* 10.7.5 MBMS-SESSION-UPDATE-REQUEST */ -/* 0x85 */ { BSSGP_PDU_MBMS_SESSION_UPDATE_RESP, "MBMS-SESSION-UPDATE-RESPONSE" },/* 10.7.6 MBMS-SESSION-UPDATE-RESPONSE */ - -/* 0x86 */ { BSSGP_PDU_RESERVED_0X86, "Reserved" }, /* */ -/* 0x87 */ { BSSGP_PDU_RESERVED_0X87, "Reserved" }, /* */ -/* 0x88 */ { BSSGP_PDU_RESERVED_0X88, "Reserved" }, /* */ -/* 0x89 */ { BSSGP_PDU_RESERVED_0X89, "Reserved" }, /* */ -/* 0x8a */ { BSSGP_PDU_RESERVED_0X8A, "Reserved" }, /* */ -/* 0x8b */ { BSSGP_PDU_RESERVED_0X8B, "Reserved" }, /* */ -/* 0x8c */ { BSSGP_PDU_RESERVED_0X8C, "Reserved" }, /* */ -/* 0x8d */ { BSSGP_PDU_RESERVED_0X8D, "Reserved" }, /* */ -/* 0x8e */ { BSSGP_PDU_RESERVED_0X8E, "Reserved" }, /* */ -/* 0x8f */ { BSSGP_PDU_RESERVED_0X8F, "Reserved" }, /* */ -/* 0x90 */ { BSSGP_PDU_RESERVED_0X90, "Reserved" }, /* */ - -/* 0x91 */ {BSSGP_PDU_PS_HANDOVER_COMPLETE, "PS-HANDOVER-COMPLETE" }, /* 10.4.33 PS-HANDOVER-COMPLETE */ -/* 0x92 */ {BSSGP_PDU_PS_HANDOVER_CANCEL, "PS-HANDOVER-CANCEL" }, /* 10.4.34 PS-HANDOVER-CANCEL */ -/* 0x93 */ {BSSGP_PDU_PS_HANDOVER_COMPLETE_ACK, "PS-HANDOVER-COMPLETE-ACK" }, /* 10.4.35 PS-HANDOVER-COMPLETE-ACK*/ - - { 0, NULL } +/* 0x75 */ { BSSGP_PDU_RESERVED_0X75, "Reserved" }, /* */ +/* 0x76 */ { BSSGP_PDU_RESERVED_0X76, "Reserved" }, /* */ +/* 0x77 */ { BSSGP_PDU_RESERVED_0X77, "Reserved" }, /* */ +/* 0x78 */ { BSSGP_PDU_RESERVED_0X78, "Reserved" }, /* */ +/* 0x79 */ { BSSGP_PDU_RESERVED_0X79, "Reserved" }, /* */ +/* 0x7a */ { BSSGP_PDU_RESERVED_0X7A, "Reserved" }, /* */ +/* 0x7b */ { BSSGP_PDU_RESERVED_0X7B, "Reserved" }, /* */ +/* 0x7c */ { BSSGP_PDU_RESERVED_0X7C, "Reserved" }, /* */ +/* 0x7d */ { BSSGP_PDU_RESERVED_0X7D, "Reserved" }, /* */ +/* 0x7e */ { BSSGP_PDU_RESERVED_0X7E, "Reserved" }, /* */ +/* 0x7f */ { BSSGP_PDU_RESERVED_0X7F, "Reserved" }, /* */ +/* 0x80 */ { BSSGP_PDU_MBMS_SESSION_START_REQ, "MBMS-SESSION-START-REQUEST" }, /* 10.7.1 MBMS-SESSION-START-REQUEST */ +/* 0x81 */ { BSSGP_PDU_MBMS_SESSION_START_RESP, "MBMS-SESSION-START-RESPONSE" }, /* 10.7.2 MBMS-SESSION-START-RESPONSE */ +/* 0x82 */ { BSSGP_PDU_MBMS_SESSION_STOP_REQ, "MBMS-SESSION-STOP-REQUEST" }, /* 10.7.3 MBMS-SESSION-STOP-REQUEST */ +/* 0x83 */ { BSSGP_PDU_MBMS_SESSION_STOP_RESP, "MBMS-SESSION-STOP-RESPONSE" }, /* 10.7.4 MBMS-SESSION-STOP-RESPONSE */ +/* 0x84 */ { BSSGP_PDU_MBMS_SESSION_UPDATE_REQ, "MBMS-SESSION-UPDATE-REQUEST" }, /* 10.7.5 MBMS-SESSION-UPDATE-REQUEST */ +/* 0x85 */ { BSSGP_PDU_MBMS_SESSION_UPDATE_RESP, "MBMS-SESSION-UPDATE-RESPONSE" },/* 10.7.6 MBMS-SESSION-UPDATE-RESPONSE */ + +/* 0x86 */ { BSSGP_PDU_RESERVED_0X86, "Reserved" }, /* */ +/* 0x87 */ { BSSGP_PDU_RESERVED_0X87, "Reserved" }, /* */ +/* 0x88 */ { BSSGP_PDU_RESERVED_0X88, "Reserved" }, /* */ +/* 0x89 */ { BSSGP_PDU_RESERVED_0X89, "Reserved" }, /* */ +/* 0x8a */ { BSSGP_PDU_RESERVED_0X8A, "Reserved" }, /* */ +/* 0x8b */ { BSSGP_PDU_RESERVED_0X8B, "Reserved" }, /* */ +/* 0x8c */ { BSSGP_PDU_RESERVED_0X8C, "Reserved" }, /* */ +/* 0x8d */ { BSSGP_PDU_RESERVED_0X8D, "Reserved" }, /* */ +/* 0x8e */ { BSSGP_PDU_RESERVED_0X8E, "Reserved" }, /* */ +/* 0x8f */ { BSSGP_PDU_RESERVED_0X8F, "Reserved" }, /* */ +/* 0x90 */ { BSSGP_PDU_RESERVED_0X90, "Reserved" }, /* */ + +/* 0x91 */ {BSSGP_PDU_PS_HANDOVER_COMPLETE, "PS-HANDOVER-COMPLETE" }, /* 10.4.33 PS-HANDOVER-COMPLETE */ +/* 0x92 */ {BSSGP_PDU_PS_HANDOVER_CANCEL, "PS-HANDOVER-CANCEL" }, /* 10.4.34 PS-HANDOVER-CANCEL */ +/* 0x93 */ {BSSGP_PDU_PS_HANDOVER_COMPLETE_ACK, "PS-HANDOVER-COMPLETE-ACK" }, /* 10.4.35 PS-HANDOVER-COMPLETE-ACK*/ + + { 0, NULL } }; static value_string_ext bssgp_msg_strings_ext = VALUE_STRING_EXT_INIT(bssgp_msg_strings); -#define NUM_BSSGP_MSG (sizeof(bssgp_msg_strings)/sizeof(value_string)) +#define NUM_BSSGP_MSG (sizeof(bssgp_msg_strings)/sizeof(value_string)) static gint ett_bssgp_msg[NUM_BSSGP_MSG]; static void (*bssgp_msg_fcn[])(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len) = { /* 0x00 to 0x10 */ - bssgp_dl_unitdata, /* 10.2.1 DL-UNITDATA */ - bssgp_ul_unitdata, /* 10.2.2 UL-UNITDATA */ - bssgp_ra_cap, /* 10.2.3 RA-CAPABILITY */ - NULL, /* 10.2.4 (void) */ - bssgp_dl_mbms_unitdata, /* 10.2.5 DL-MBMS-UNITDATA */ - bssgp_ul_mbms_unitdata, /* 10.2.6 UL-MBMS-UNITDATA */ - bssgp_paging_ps, /* 10.3.1 PAGING PS */ - bssgp_paging_cs, /* 10.3.2 PAGING CS */ - bssgp_ra_cap_upd, /* 10.3.3 RA-CAPABILITY-UPDATE */ - bssgp_ra_cap_upd_ack, /* 10.3.3 RA-CAPABILITY-UPDATE */ - bssgp_ra_status, /* 10.3.5 RADIO-STATUS */ - bssgp_suspend, /* 10.3.6 SUSPEND */ - bssgp_suspend_ack, /* 10.3.7 SUSPEND-ACK */ - bssgp_suspend_nack, /* 10.3.8 SUSPEND-NACK */ - bssgp_resume, /* 10.3.9 RESUME */ - bssgp_resume_ack, /* 10.3.10 RESUME-ACK */ - bssgp_resume_nack, /* 10.3.11 RESUME-NACK */ + bssgp_dl_unitdata, /* 10.2.1 DL-UNITDATA */ + bssgp_ul_unitdata, /* 10.2.2 UL-UNITDATA */ + bssgp_ra_cap, /* 10.2.3 RA-CAPABILITY */ + NULL, /* 10.2.4 (void) */ + bssgp_dl_mbms_unitdata, /* 10.2.5 DL-MBMS-UNITDATA */ + bssgp_ul_mbms_unitdata, /* 10.2.6 UL-MBMS-UNITDATA */ + bssgp_paging_ps, /* 10.3.1 PAGING PS */ + bssgp_paging_cs, /* 10.3.2 PAGING CS */ + bssgp_ra_cap_upd, /* 10.3.3 RA-CAPABILITY-UPDATE */ + bssgp_ra_cap_upd_ack, /* 10.3.3 RA-CAPABILITY-UPDATE */ + bssgp_ra_status, /* 10.3.5 RADIO-STATUS */ + bssgp_suspend, /* 10.3.6 SUSPEND */ + bssgp_suspend_ack, /* 10.3.7 SUSPEND-ACK */ + bssgp_suspend_nack, /* 10.3.8 SUSPEND-NACK */ + bssgp_resume, /* 10.3.9 RESUME */ + bssgp_resume_ack, /* 10.3.10 RESUME-ACK */ + bssgp_resume_nack, /* 10.3.11 RESUME-NACK */ /* 0x11 to 0x1f Reserved */ NULL, /* 0x11 */ @@ -6082,21 +6089,21 @@ static void (*bssgp_msg_fcn[])(tvbuff_t *tvb, proto_tree *tree, packet_info *pin NULL, /* 0x1F */ /* 0x20 to 0x2e */ - bssgp_bvc_block, /* 10.4.8 BVC-BLOCK */ - bssgp_bvc_block_ack, /* 10.4.9 BVC-BLOCK-ACK */ - bssgp_bvc_reset, /* 10.4.12 BVC-RESET */ - bssgp_bvc_reset_ack, /* 10.4.13 BVC-RESET-ACK */ - bssgp_bvc_un_block, /* 10.4.10 BVC-UNBLOCK */ - bssgp_bvc_un_block_ack, /* 10.4.11 BVC-UNBLOCK-ACK */ - bssgp_flow_control_bvc, /* 10.4.4 FLOW-CONTROL-BVC */ - bssgp_flow_control_bvc_ack, /* 10.4.5 FLOW-CONTROL-BVC-ACK */ - bssgp_flow_control_ms, /* 10.4.6 FLOW-CONTROL-MS */ - bssgp_flow_control_ms_ack, /* 10.4.7 FLOW-CONTROL-MS-ACK */ - bssgp_flush_ll, /* 10.4.1 FLUSH-LL */ - bssgp_flush_ll_ack, /* 10.4.2 FLUSH-LL-ACK */ - bssgp_llc_discarded, /* 10.4.3 LLC-DISCARDED */ - bssgp_flow_cntrl_pfc, /* 10.4.24 FLOW-CONTROL-PFC */ - bssgp_flow_cntrl_pfc_ack, /* 10.4.25 FLOW-CONTROL-PFC-ACK */ + bssgp_bvc_block, /* 10.4.8 BVC-BLOCK */ + bssgp_bvc_block_ack, /* 10.4.9 BVC-BLOCK-ACK */ + bssgp_bvc_reset, /* 10.4.12 BVC-RESET */ + bssgp_bvc_reset_ack, /* 10.4.13 BVC-RESET-ACK */ + bssgp_bvc_un_block, /* 10.4.10 BVC-UNBLOCK */ + bssgp_bvc_un_block_ack, /* 10.4.11 BVC-UNBLOCK-ACK */ + bssgp_flow_control_bvc, /* 10.4.4 FLOW-CONTROL-BVC */ + bssgp_flow_control_bvc_ack, /* 10.4.5 FLOW-CONTROL-BVC-ACK */ + bssgp_flow_control_ms, /* 10.4.6 FLOW-CONTROL-MS */ + bssgp_flow_control_ms_ack, /* 10.4.7 FLOW-CONTROL-MS-ACK */ + bssgp_flush_ll, /* 10.4.1 FLUSH-LL */ + bssgp_flush_ll_ack, /* 10.4.2 FLUSH-LL-ACK */ + bssgp_llc_discarded, /* 10.4.3 LLC-DISCARDED */ + bssgp_flow_cntrl_pfc, /* 10.4.24 FLOW-CONTROL-PFC */ + bssgp_flow_cntrl_pfc_ack, /* 10.4.25 FLOW-CONTROL-PFC-ACK */ /* 0x2f to 0x3f Reserved */ NULL, /* 0x2f */ @@ -6118,8 +6125,8 @@ static void (*bssgp_msg_fcn[])(tvbuff_t *tvb, proto_tree *tree, packet_info *pin NULL, /* 0x3F */ /* 0x40 to 0x41 */ - bssgp_sgsn_invoke_trace, /* 10.4.15 SGSN-INVOKE-TRACE */ - bssgp_status, /* 10.4.14 STATUS */ + bssgp_sgsn_invoke_trace, /* 10.4.15 SGSN-INVOKE-TRACE */ + bssgp_status, /* 10.4.14 STATUS */ /* 0x42 to 0x4f Reserved */ NULL, /* 0x42 */ @@ -6138,31 +6145,31 @@ static void (*bssgp_msg_fcn[])(tvbuff_t *tvb, proto_tree *tree, packet_info *pin NULL, /* 0x4F */ /* 0x50 to 0x5e */ - bssgp_download_bss_pfc, /* 10.4.16 DOWNLOAD-BSS-PFC */ - bssgp_create_bss_pfc, /* 10.4.17 CREATE-BSS-PFC */ - bssgp_create_bss_pfc_ack, /* 10.4.18 CREATE-BSS-PFC-ACK */ - bssgp_create_bss_pfc_nack, /* 10.4.19 CREATE-BSS-PFC-NACK */ - bssgp_modify_bss_pfc, /* 10.4.20 MODIFY-BSS-PFC */ - bssgp_modify_bss_pfc_ack, /* 10.4.21 MODIFY-BSS-PFC-ACK */ - bssgp_delete_bss_pfc, /* 10.4.22 DELETE-BSS-PFC */ - bssgp_delete_bss_pfc_ack, /* 10.4.23 DELETE-BSS-PFC-ACK */ - bssgp_delete_bss_pfc_req, /* 10.4.26 DELETE-BSS-PFC-REQ */ - bssgp_ps_ho_required, /* 10.4.27 PS-HANDOVER-REQUIRED */ - bssgp_ps_ho_required_ack, /* 10.4.28 PS-HANDOVER-REQUIRED-ACK */ - bssgp_ps_ho_required_nack, /* 10.4.29 PS-HANDOVER-REQUIRED-NACK */ - bssgp_ps_ho_request, /* 10.4.30 PS-HANDOVER-REQUEST */ - bssgp_ps_ho_request_ack, /* 10.4.31 PS-HANDOVER-REQUEST-ACK */ - bssgp_ps_ho_request_nack, /* 10.4.31 10.4.32 PS-HANDOVER-REQUEST-NACK */ + bssgp_download_bss_pfc, /* 10.4.16 DOWNLOAD-BSS-PFC */ + bssgp_create_bss_pfc, /* 10.4.17 CREATE-BSS-PFC */ + bssgp_create_bss_pfc_ack, /* 10.4.18 CREATE-BSS-PFC-ACK */ + bssgp_create_bss_pfc_nack, /* 10.4.19 CREATE-BSS-PFC-NACK */ + bssgp_modify_bss_pfc, /* 10.4.20 MODIFY-BSS-PFC */ + bssgp_modify_bss_pfc_ack, /* 10.4.21 MODIFY-BSS-PFC-ACK */ + bssgp_delete_bss_pfc, /* 10.4.22 DELETE-BSS-PFC */ + bssgp_delete_bss_pfc_ack, /* 10.4.23 DELETE-BSS-PFC-ACK */ + bssgp_delete_bss_pfc_req, /* 10.4.26 DELETE-BSS-PFC-REQ */ + bssgp_ps_ho_required, /* 10.4.27 PS-HANDOVER-REQUIRED */ + bssgp_ps_ho_required_ack, /* 10.4.28 PS-HANDOVER-REQUIRED-ACK */ + bssgp_ps_ho_required_nack, /* 10.4.29 PS-HANDOVER-REQUIRED-NACK */ + bssgp_ps_ho_request, /* 10.4.30 PS-HANDOVER-REQUEST */ + bssgp_ps_ho_request_ack, /* 10.4.31 PS-HANDOVER-REQUEST-ACK */ + bssgp_ps_ho_request_nack, /* 10.4.31 10.4.32 PS-HANDOVER-REQUEST-NACK */ /* 0x5f Reserved */ NULL, /* 0x5F */ /* 0x60 */ - bssgp_perform_loc_request, /* 10.5.1 PERFORM-LOCATION-REQUEST */ - bssgp_perform_loc_response, /* 10.5.2 PERFORM-LOCATION-RESPONSE */ - bssgp_perform_loc_response_abort, /* 10.5.3 PERFORM-LOCATION-ABORT */ - bssgp_pos_cmd, /* 10.5.4 POSITION-COMMAND */ - bssgp_pos_resp, /* 10.5.5 POSITION-RESPONSE */ + bssgp_perform_loc_request, /* 10.5.1 PERFORM-LOCATION-REQUEST */ + bssgp_perform_loc_response, /* 10.5.2 PERFORM-LOCATION-RESPONSE */ + bssgp_perform_loc_response_abort, /* 10.5.3 PERFORM-LOCATION-ABORT */ + bssgp_pos_cmd, /* 10.5.4 POSITION-COMMAND */ + bssgp_pos_resp, /* 10.5.5 POSITION-RESPONSE */ /* 0x65 to 0x6f Reserved */ NULL, /* 0x65 */ @@ -6176,10 +6183,10 @@ static void (*bssgp_msg_fcn[])(tvbuff_t *tvb, proto_tree *tree, packet_info *pin NULL, /* 0x6d */ NULL, /* 0x6e */ NULL, /* 0x6f */ - bssgp_ran_inf, /* 10.6.2 RAN-INFORMATION */ - bssgp_ran_inf_request, /* 10.6.1 RAN-INFORMATION-REQUEST */ - bssgp_ran_inf_request_ack, /* 10.6.3 RAN-INFORMATION-ACK */ - bssgp_ran_inf_err, /* 10.6.4 RAN-INFORMATION-ERROR */ + bssgp_ran_inf, /* 10.6.2 RAN-INFORMATION */ + bssgp_ran_inf_request, /* 10.6.1 RAN-INFORMATION-REQUEST */ + bssgp_ran_inf_request_ack, /* 10.6.3 RAN-INFORMATION-ACK */ + bssgp_ran_inf_err, /* 10.6.4 RAN-INFORMATION-ERROR */ bssgp_ran_inf_app_err, /* 10.6.5 RAN-INFORMATION-APPLICATION-ERROR */ NULL, /* 0x75 */ NULL, /* 0x76 */ @@ -6192,12 +6199,12 @@ static void (*bssgp_msg_fcn[])(tvbuff_t *tvb, proto_tree *tree, packet_info *pin NULL, /* 0x7d */ NULL, /* 0x7e */ NULL, /* 0x7f */ - bssgp_mbms_session_start_req, /* 10.7.1 MBMS-SESSION-START-REQUEST */ - bssgp_mbms_session_start_resp, /* 10.7.2 MBMS-SESSION-START-RESPONSE */ - bssgp_mbms_session_stop_req, /* 10.7.3 MBMS-SESSION-STOP-REQUEST */ - bssgp_mbms_session_stop_resp, /* 10.7.4 MBMS-SESSION-STOP-RESPONSE */ - bssgp_mbms_session_update_req, /* 10.7.5 MBMS-SESSION-UPDATE-REQUEST */ - bssgp_mbms_session_uptate_resp, /* 10.7.6 MBMS-SESSION-UPDATE-RESPONSE */ + bssgp_mbms_session_start_req, /* 10.7.1 MBMS-SESSION-START-REQUEST */ + bssgp_mbms_session_start_resp, /* 10.7.2 MBMS-SESSION-START-RESPONSE */ + bssgp_mbms_session_stop_req, /* 10.7.3 MBMS-SESSION-STOP-REQUEST */ + bssgp_mbms_session_stop_resp, /* 10.7.4 MBMS-SESSION-STOP-RESPONSE */ + bssgp_mbms_session_update_req, /* 10.7.5 MBMS-SESSION-UPDATE-REQUEST */ + bssgp_mbms_session_uptate_resp, /* 10.7.6 MBMS-SESSION-UPDATE-RESPONSE */ NULL, /* 0x86 */ NULL, /* 0x87 */ NULL, /* 0x88 */ @@ -6209,554 +6216,554 @@ static void (*bssgp_msg_fcn[])(tvbuff_t *tvb, proto_tree *tree, packet_info *pin NULL, /* 0x8e */ NULL, /* 0x8f */ NULL, /* 0x90 */ - bssgp_ps_ho_complete, /* 0x91 10.4.33 PS-HANDOVER-COMPLETE */ - bssgp_ps_ho_cancel, /* 0x92 10.4.34 PS-HANDOVER-CANCEL */ - bssgp_ps_ho_complete_ack, /* 0x93 10.4.35 PS-HANDOVER-COMPLETE-ACK*/ + bssgp_ps_ho_complete, /* 0x91 10.4.33 PS-HANDOVER-COMPLETE */ + bssgp_ps_ho_cancel, /* 0x92 10.4.34 PS-HANDOVER-CANCEL */ + bssgp_ps_ho_complete_ack, /* 0x93 10.4.35 PS-HANDOVER-COMPLETE-ACK*/ NULL, /* NONE */ }; void get_bssgp_msg_params(guint8 oct, const gchar **msg_str, int *ett_tree, int *hf_idx, msg_fcn *msg_fcn) { - gint idx; + gint idx; - *msg_str = match_strval_idx_ext((guint32) (oct & 0xff), &bssgp_msg_strings_ext, &idx); - *ett_tree = ett_bssgp_msg[idx]; - *hf_idx = hf_bssgp_msg_type; - *msg_fcn = bssgp_msg_fcn[idx]; + *msg_str = match_strval_idx_ext((guint32) (oct & 0xff), &bssgp_msg_strings_ext, &idx); + *ett_tree = ett_bssgp_msg[idx]; + *hf_idx = hf_bssgp_msg_type; + *msg_fcn = bssgp_msg_fcn[idx]; - return; + return; } static void dissect_bssgp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { - proto_item *ti; - proto_tree *bssgp_tree = NULL; - int offset = 0; - guint32 len; - const gchar *msg_str = NULL; - gint ett_tree; - int hf_idx; - void (*msg_fcn)(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len); + proto_item *ti; + proto_tree *bssgp_tree = NULL; + int offset = 0; + guint32 len; + const gchar *msg_str = NULL; + gint ett_tree; + int hf_idx; + void (*msg_fcn)(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len); - /* Save pinfo */ - gpinfo = pinfo; - g_rim_application_identity = 0; - gparent_tree = tree; - len = tvb_length(tvb); + /* Save pinfo */ + gpinfo = pinfo; + g_rim_application_identity = 0; + gparent_tree = tree; + len = tvb_length(tvb); - col_set_str(pinfo->cinfo, COL_PROTOCOL, "BSSGP"); + col_set_str(pinfo->cinfo, COL_PROTOCOL, "BSSGP"); - col_clear(pinfo->cinfo, COL_INFO); + col_clear(pinfo->cinfo, COL_INFO); - g_pdu_type = tvb_get_guint8(tvb,offset); - if (tree) { - ti = proto_tree_add_item(tree, proto_bssgp, tvb, 0, -1, ENC_NA); - bssgp_tree = proto_item_add_subtree(ti, ett_bssgp); - } + g_pdu_type = tvb_get_guint8(tvb,offset); + if (tree) { + ti = proto_tree_add_item(tree, proto_bssgp, tvb, 0, -1, ENC_NA); + bssgp_tree = proto_item_add_subtree(ti, ett_bssgp); + } - /* Messge type IE*/ - msg_fcn = NULL; - ett_tree = -1; - hf_idx = -1; - msg_str = NULL; + /* Messge type IE*/ + msg_fcn = NULL; + ett_tree = -1; + hf_idx = -1; + msg_str = NULL; - get_bssgp_msg_params(g_pdu_type, &msg_str, &ett_tree, &hf_idx, &msg_fcn); + get_bssgp_msg_params(g_pdu_type, &msg_str, &ett_tree, &hf_idx, &msg_fcn); - if(msg_str){ - col_add_fstr(pinfo->cinfo, COL_INFO, "%s", msg_str); - }else{ - proto_tree_add_text(bssgp_tree, tvb, offset, 1,"Unknown message 0x%x",g_pdu_type); - return; - } + if(msg_str){ + col_add_fstr(pinfo->cinfo, COL_INFO, "%s", msg_str); + }else{ + proto_tree_add_text(bssgp_tree, tvb, offset, 1,"Unknown message 0x%x",g_pdu_type); + return; + } - /* - * Add BSSGP message name - */ - proto_tree_add_item(bssgp_tree, hf_idx, tvb, offset, 1, FALSE); - offset++; + /* + * Add BSSGP message name + */ + proto_tree_add_item(bssgp_tree, hf_idx, tvb, offset, 1, ENC_BIG_ENDIAN); + offset++; - /* - * decode elements - */ - if (msg_fcn == NULL) - { - proto_tree_add_text(bssgp_tree, tvb, offset, len - offset, "Message Elements"); - } - else - { - (*msg_fcn)(tvb, bssgp_tree, pinfo, offset, len - offset); - } + /* + * decode elements + */ + if (msg_fcn == NULL) + { + proto_tree_add_text(bssgp_tree, tvb, offset, len - offset, "Message Elements"); + } + else + { + (*msg_fcn)(tvb, bssgp_tree, pinfo, offset, len - offset); + } } void proto_register_bssgp(void) { - guint i; - guint last_offset; - - static hf_register_info hf[] = { - { &hf_bssgp_msg_type, - { "PDU Type", "bssgp.pdu_type", - FT_UINT8, BASE_HEX|BASE_EXT_STRING, &bssgp_msg_strings_ext, 0x0, - NULL, HFILL } - }, - { &hf_bssgp_elem_id, - { "Element ID", "bssgp.elem_id", - FT_UINT8, BASE_DEC, NULL, 0, - NULL, HFILL } - }, - { &hf_bssgp_bss_area_ind, - { "BSS indicator", "bssgp.bss_ind", - FT_UINT8, BASE_HEX, NULL, 0x0, - NULL, HFILL } - }, - { &hf_bssgp_bvci, - { "BVCI", "bssgp.bvci", - FT_UINT16, BASE_HEX, NULL, 0x0, - NULL, HFILL } - }, - { &hf_bssgp_bmax, - { "Bmax(x 100 or in increments as defined by the Flow Control Granularity IE)", "bssgp.bmax", - FT_UINT16, BASE_DEC, NULL, 0x0, - NULL, HFILL } - }, - { &hf_bssgp_r, - { "R(x 100 or in increments as defined by the Flow Control Granularity IE)", "bssgp.r", - FT_UINT16, BASE_DEC, NULL, 0x0, - NULL, HFILL } - }, - { &hf_bssgp_r_pfc, - { "R_PFC(x 100 or in increments as defined by the Flow Control Granularity IE)", "bssgp.r_pfc", - FT_UINT16, BASE_DEC, NULL, 0x0, - NULL, HFILL } - }, - { &hf_bssgp_bucket_size, - { "Bmax(x 100 or in increments as defined by the Flow Control Granularity IE)", "bssgp.bucket_size", - FT_UINT16, BASE_DEC, NULL, 0x0, - NULL, HFILL } - }, - { &hf_bssgp_bmax_pfc, - { "Bmax_PFC(x 100 or in increments as defined by the Flow Control Granularity IE)", "bssgp.bmax_pfc", - FT_UINT16, BASE_DEC, NULL, 0x0, - NULL, HFILL } - }, - { &hf_bssgp_omc_id, - { "OMC identity", "bssgp.omc_id", - FT_BYTES, BASE_NONE, NULL, 0x0, - NULL, HFILL } - }, - { &hf_bssgp_nsei, - { "NSEI", "bssgp.nsei", - FT_UINT16, BASE_HEX, NULL, 0x0, - NULL, HFILL } - }, - { &hf_bssgp_rrlp_flag1, - { "Flag 1", "bssgp.rrlp_flag1", - FT_BOOLEAN, 8, TFS(&bssgp_rrlp_flg1_vals), 0x01, - NULL, HFILL } - }, - { &hf_bssgp_ci, - { "CI", "bssgp.ci", - FT_UINT16, BASE_HEX, NULL, 0x0, - "Cell Identity", HFILL } - }, - { &hf_bssgp_flush_action, - { "Action", "bssgp.ci", - FT_UINT8, BASE_DEC, VALS(bssgp_flush_action_vals), 0x0, - NULL, HFILL } - }, - { &hf_bssgp_llc_frames_disc, - { "Number of frames discarded", "bssgp.llc_frames_disc", - FT_UINT8, BASE_DEC, NULL, 0x0, - NULL, HFILL } - }, - { &hf_bssgp_ra_discriminator, - { "Routing Address Discriminator", "bssgp.rad", - FT_UINT8, BASE_DEC, VALS(bssgp_ra_discriminator_vals), 0x0f, - NULL, HFILL } - }, - { &hf_bssgp_rim_app_id, - { "RIM Application Identity", "bssgp.rim_app_id", - FT_UINT8, BASE_DEC, VALS(bssgp_rim_appid_vals), 0x0, - NULL, HFILL } - }, - { &hf_bssgp_rim_seq_no, - { "RIM Sequence Number", "bssgp.rim_seq_no", - FT_UINT32, BASE_DEC, NULL, 0x0, - NULL, HFILL } - }, - { &hf_bssgp_rat_discriminator, - { "RAT discriminator", "bssgp.rat_discriminator", - FT_UINT8, BASE_DEC, VALS(bssgp_rat_discriminator_vals), 0x0f, - NULL, HFILL } - }, - { &hf_bssgp_nacc_cause, - { "NACC Cause", "bssgp.nacc_cause", - FT_UINT8, BASE_DEC, VALS(bssgp_nacc_cause_vals), 0x0, - NULL, HFILL } - }, - { &hf_bssgp_s13_cause, - { "SI3 Cause", "bssgp.s13_cause", - FT_UINT8, BASE_DEC, VALS(bssgp_s13_cause_vals), 0x0, - NULL, HFILL } - }, - { &hf_bssgp_mbms_data_ch_cause, - { "MBMS data channel Cause", "bssgp.mbms_data_ch_cause", - FT_UINT8, BASE_DEC, VALS(bssgp_mbms_data_ch_cause_vals), 0x0, - NULL, HFILL } - }, - { &hf_bssgp_utra_si_cause, - { "UTRA SI Cause", "bssgp.utra_si_cause", - FT_UINT8, BASE_DEC, VALS(bssgp_utra_si_cause_vals), 0x0, - NULL, HFILL } - }, - { &hf_bssgp_num_si_psi, - { "Number of SI/PSI", "bssgp.num_si_psi", - FT_UINT8, BASE_DEC, NULL, 0xfe, - NULL, HFILL } - }, - {&hf_bssgp_si_psi_type, - { "Type", "bssgp.si_psi_type", - FT_BOOLEAN, 8, TFS(&bssgp_si_psi_type_vals), 0x01, - NULL, HFILL } - }, - { &hf_bssgp_ran_inf_req_pdu_t_ext_c, - { "PDU Type Extension", "bssgp.ran_inf_req_pdu_t_ext_c", - FT_UINT8, BASE_DEC, VALS(bssgp_ran_inf_req_pdu_t_ext_c_vals), 0x0e, - NULL, HFILL } - }, - { &hf_bssgp_ran_inf_pdu_t_ext_c, - { "PDU Type Extension", "bssgp.ran_inf_pdu_t_ext_c", - FT_UINT8, BASE_DEC, VALS(bssgp_ran_inf_pdu_t_ext_c_vals), 0x0e, - NULL, HFILL } - }, - {&hf_bssgp_rim_pdu_ind_ack, - { "ACK", "bssgp.rim_pdu_ind_ack", - FT_BOOLEAN, 8, TFS(&bssgp_rim_pdu_ind_ack_vals), 0x01, - NULL, HFILL } - }, - { &hf_bssgp_rim_proto_ver_no, - { "RIM Protocol Version Number", "bssgp.rim_proto_ver_no", - FT_UINT8, BASE_DEC, VALS(bssgp_rim_proto_ver_no_vals), 0x0, - NULL, HFILL } - }, - { &hf_bssgp_delay_val, - { "Delay Value (in centi-seconds)", "bssgp.delay_val", - FT_UINT16, BASE_DEC, NULL, 0x0, - NULL, HFILL } - }, - { &hf_bssgp_cause, - { "Cause", "bssgp.cause", - FT_UINT8, BASE_DEC|BASE_EXT_STRING, &bssgp_cause_vals_ext, 0x0, - NULL, HFILL } - }, - { &hf_bssgp_peak_rate_gran, - { "Peak Bit Rate Granularity", "bssgp.peak_rate_gran", - FT_UINT8, BASE_DEC, NULL, 0xc0, - NULL, HFILL } - }, - { &hf_bssgp_cr_bit, - { "C/R", "bssgp.cr_bit", - FT_BOOLEAN, 8, TFS(&bssgp_cr_bit_vals), 0x20, - NULL, HFILL } - }, - { &hf_bssgp_t_bit, - { "T", "bssgp.t_bit", - FT_BOOLEAN, 8, TFS(&bssgp_t_bit_vals), 0x10, - NULL, HFILL } - }, - { &hf_bssgp_a_bit, - { "A", "bssgp.a_bit", - FT_BOOLEAN, 8, TFS(&bssgp_a_bit_vals), 0x08, - NULL, HFILL } - }, - { &hf_bssgp_ra_cause, - { "Radio Cause", "bssgp.ra_cause", - FT_UINT8, BASE_DEC, VALS(bssgp_radio_cause_vals), 0x00, - NULL, HFILL } - }, - { &hf_bssgp_ra_cap_upd_cause, - { "RA-Cap-UPD Cause", "bssgp.ra_cap_upd_cause", - FT_UINT8, BASE_DEC, VALS(bssgp_ra_cap_upd_cause_vals), 0x00, - NULL, HFILL } - }, - { &hf_bssgp_r_default_ms, - { "R_default_MS(x 100 or in increments as defined by the Flow Control Granularity IE)", "bssgp.r", - FT_UINT16, BASE_DEC, NULL, 0x0, - NULL, HFILL } - }, - - { &hf_bssgp_suspend_ref_no, - { "Suspend Reference Number", "bssgp.r_default_ms", - FT_UINT8, BASE_DEC, NULL, 0x00, - NULL, HFILL } - }, - { &hf_bssgp_tag, - { "Tag", "bssgp.tag", - FT_UINT8, BASE_DEC, NULL, 0x00, - NULL, HFILL } - }, - { &hf_bssgp_trace_ref, - { "Trace Reference", "bssgp.trace_ref", - FT_UINT16, BASE_DEC, NULL, 0x00, - NULL, HFILL } - }, - { &hf_bssgp_trigger_id, - { "Entity Identity", "bssgp.entity_id", - FT_BYTES, BASE_NONE, NULL, 0x00, - NULL, HFILL } - }, - { &hf_bssgp_transaction_id, - { "Transaction Id", "bssgp.transaction_id", - FT_UINT16, BASE_DEC, NULL, 0x00, - NULL, HFILL } - }, - { &hf_bssgp_no_of_oct, - { "Number of octets transferred or deleted", "bssgp.no_of_oct", - FT_UINT24, BASE_DEC, NULL, 0x00, - NULL, HFILL } - }, - { &hf_bssgp_unit_val, - { "Unit Value", "bssgp.unit_val", - FT_UINT8, BASE_DEC, VALS(bssgp_unit_vals), 0xe0, - NULL, HFILL } - }, - { &hf_bssgp_gprs_timer, - { "Unit Value", "bssgp.gprs_timer", - FT_UINT8, BASE_DEC, NULL, 0x1f, - NULL, HFILL } - }, - - { &hf_bssgp_mbms, - { "MBMS Procedures", "bssgp.mbms", - FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x80, - NULL, HFILL } - }, - { &hf_bssgp_EnhancedRadioStatus, - { "Enhanced Radio Status Procedures", "bssgp.enhancedradiostatus", - FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x40, - NULL, HFILL } - }, - { &hf_bssgp_pfcfc, - { "PFC Flow Control Procedures", "bssgp.pfcfc", - FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x20, - NULL, HFILL } - }, - { &hf_bssgp_rim, - { "RAN Information Management (RIM) procedures", "bssgp.rim", - FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x10, - NULL, HFILL } - }, - { &hf_bssgp_lcs, - { "LCS Procedures", "bssgp.lcs", - FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x08, - NULL, HFILL } - }, - { &hf_bssgp_inr, - { "Inter-NSE re-routing(INR)", "bssgp.inr", - FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x04, - NULL, HFILL } - }, - { &hf_bssgp_cbl, - { "Current Bucket Level(CBL) Procedures", "bssgp.cbl", - FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x02, - NULL, HFILL } - }, - { &hf_bssgp_pfc, - { "Packet Flow Context(PFC) Procedures", "bssgp.pfc", - FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x01, - NULL, HFILL } - }, - { &hf_bssgp_bucket_full_ratio, - { "Ratio of the bucket that is filled up with data", "bssgp.bucket_full_ratio", - FT_UINT8, BASE_DEC, NULL, 0x0, - "B current x (100 / Bmax)", HFILL } - }, - { &hf_bssgp_b_pfc, - { "B_PFC: Bucket Full Ratio of the PFC", "bssgp.b_pfc", - FT_UINT8, BASE_DEC, NULL, 0x0, - "B current x (100 / Bmax)", HFILL } - }, - - { &hf_bssgp_precedence, - { "Precedence", "bssgp.a_bit", - FT_UINT8, BASE_DEC, NULL, 0x07, - NULL, HFILL } - }, - { &hf_bssgp_serv_utran_cco, - { "Service UTRAN CCO", "bssgp.serv_utran_cco", - FT_UINT8, BASE_DEC, VALS(bssgp_service_utran_cco_vals), 0x07, - NULL, HFILL } - }, - { &hf_bssgp_mbms_session_id, - { "MBMS Session ID", "bssgp.mbms_session_id", - FT_UINT8, BASE_DEC, NULL, 0x0, - NULL, HFILL } - }, - { &hf_bssgp_mbms_cause, - { "Cause", "bssgp.mbms_cause", - FT_UINT8, BASE_DEC|BASE_EXT_STRING, &bssgp_mbms_cause_vals_ext, 0x0f, - NULL, HFILL } - }, - { &hf_bssgp_mbms_stop_cause, - { "Stop Cause", "bssgp.mbms_stop_cause", - FT_UINT8, BASE_DEC|BASE_EXT_STRING, &bssgp_mbms_stop_cause_vals_ext, 0x0f, - NULL, HFILL } - }, - { &hf_bssgp_session_inf, - { "BC/MC", "bssgp.session_inf", - FT_BOOLEAN, 8, TFS(&tfs_bssgp_bc_mc), 0x01, - NULL, HFILL } - }, - { &hf_bssgp_mbms_num_ra_ids, - { "Number of Routing Area Identifications", "bssgp.mbms_num_ra_ids", - FT_UINT8, BASE_DEC|BASE_EXT_STRING, &bssgp_mbms_num_ra_ids_vals_ext, 0xf0, - NULL, HFILL } - }, - { &hf_bssgp_gb_if, - { "Gigabit Interface", "bssgp.gb_if", - FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x02, - NULL, HFILL } - }, - { &hf_bssgp_ps_ho, - { "PS Handover", "bssgp.ps_ho", - FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x01, - NULL, HFILL } - }, - { &hf_bssgp_src_to_trg_transp_cont, - { "Source to Target Transparent Container", "bssgp.src_to_trg_transp_cont", - FT_BYTES, FT_NONE, NULL, 0x0, - NULL, HFILL } - }, - { &hf_bssgp_trg_to_src_transp_cont, - { "Target to Source Transparent Container", "bssgp.trg_to_src_transp_cont", - FT_BYTES, FT_NONE, NULL, 0x0, - NULL, HFILL } - }, - { &hf_bssgp_rnc_id, - { "RNC ID", "bssgp.rnc_id", - FT_UINT16, BASE_DEC, NULL, 0x0, - NULL, HFILL } - }, - { &hf_bssgp_page_mode, - { "PAGE_MODE", "bssgp.page_mode", - FT_UINT8, BASE_DEC, VALS(bssgp_page_mode_vals), 0x03, - NULL, HFILL } - }, - { &hf_bssgp_container_id, - { "Container ID", "bssgp.container_id", - FT_UINT8, BASE_DEC, NULL, 0x03, - NULL, HFILL } - }, - { &hf_bssgp_global_tfi, - { "Global TFI", "bssgp.global_tfi", - FT_UINT8, BASE_DEC, VALS(bssgp_global_tfi_vals), 0x0, - NULL, HFILL } - }, - { &hf_bssgp_ul_tfi, - { "UPLINK_TFI", "bssgp.global_tfi", - FT_UINT8, BASE_DEC, NULL, 0x0, - NULL, HFILL } - }, - { &hf_bssgp_dl_tfi, - { "DOWNLINK_TFI", "bssgp.global_tfi", - FT_UINT8, BASE_DEC, NULL, 0x0, - NULL, HFILL } - }, - { &hf_bssgp_time_to_MBMS_data_tran, - { "Time to MBMS Data Transfer", "bssgp.time_to_mbms_data_tran", - FT_UINT8, BASE_DEC, NULL, 0x0, - NULL, HFILL } - }, - { &hf_bssgp_mbms_session_rep_no, - { "MBMS-Session-Repetition-Number", "bssgp.mbms_session_rep_no", - FT_UINT8, BASE_DEC, NULL, 0x0, - NULL, HFILL } - }, - { &hf_bssgp_ps_ho_cmd, - { "PS Handover Command", "bssgp.ps_ho_cmd", - FT_BYTES, BASE_NONE, NULL, 0x0, - NULL, HFILL } - }, - { &hf_bssgp_sipsi, - { "SI/PSI", "bssgp.sipsi", - FT_BOOLEAN, 8, TFS(&tfs_requested_not_requested), 0x01, - NULL, HFILL } - }, - { &hf_bssgp_type, - { "Type", "bssgp.type", - FT_UINT8, BASE_DEC, VALS(type_vals), 0x01, - NULL, HFILL } - }, - { &hf_bssgp_cs_indication, - { "CS Indication Contents", "bssgp.cs_indication", - FT_UINT8, BASE_HEX, NULL, 0x0, - NULL, HFILL } - }, - - { &hf_bssgp_flow_control_gran, - { "Granularity", "bssgp.flow_control_gran", - FT_UINT8, BASE_DEC, VALS(bssgp_flow_control_gran_vals), 0x03, - NULL, HFILL } - }, - { &hf_bssgp_serv_eutran_cco, - { "Service EUTRAN CCO", "bssgp.serv_eutran_cco", - FT_UINT8, BASE_DEC, VALS(bssgp_service_eutran_cco_vals), 0x18, - NULL, HFILL } - }, - { &hf_bssgp_sub_prof_id_f_rat_freq_prio, - { "Subscriber Profile ID for RAT/Frequency priority", "bssgp.sub_prof_id_f_rat_freq_prio", - FT_UINT8, BASE_DEC, NULL, 0x0, - NULL, HFILL } - }, - { &hf_bssgp_eutran_irat_ho_inf_req, - { "E-UTRAN Inter RAT Handover Info", "bssgp.eutran_irat_ho_inf_req", - FT_BOOLEAN, 8, TFS(&tfs_requested_not_requested), 0x02, - NULL, HFILL } - }, - { &hf_bssgp_irat_ho_inf_req, - { "Inter RAT Handover Info", "bssgp.irat_ho_inf_req", - FT_BOOLEAN, 8, TFS(&tfs_requested_not_requested), 0x01, - NULL, HFILL } - }, - - { &hf_bssgp_rel_int_rat_ho_inf_ind, - { "Inter RAT Handover Info", "bssgp.rel_int_rat_ho_inf_ind", - FT_BOOLEAN, 8, TFS(&tfs_reliable_not_reliable), 0x01, - NULL, HFILL } - }, - { &hf_bssgp_csg_id, - { "CSG Identity (CSG-ID)", "bssgp.csg_id", - FT_UINT32, BASE_HEX, NULL, 0xffffff0f, - NULL, HFILL } - }, - { &hf_bssgp_cell_acc_mode, - { "Cell Access Mode", "bssgp.cell_acc_mode", - FT_UINT8, BASE_DEC, VALS(bssgp_cell_access_mode_vals), 0x01, - NULL, HFILL } - }, - { &hf_bssgp_Global_ENB_ID_PDU, - { "Global-ENB-ID", "bssgp.Global_ENB_ID", - FT_NONE, BASE_NONE, NULL, 0, - NULL, HFILL } - }, - { &hf_bssgp_SONtransferRequestContainer_PDU, - { "SONtransferRequestContainer", "bssgp.SONtransferRequestContainer", - FT_UINT32, BASE_DEC, VALS(s1ap_SONtransferRequestContainer_vals), 0, - NULL, HFILL }}, - - }; - - /* Setup protocol subtree array */ -#define NUM_INDIVIDUAL_ELEMS 10 - gint *ett[NUM_INDIVIDUAL_ELEMS + - NUM_BSSGP_ELEM + - NUM_BSSGP_MSG]; - ett[0] = &ett_bssgp; + guint i; + guint last_offset; + + static hf_register_info hf[] = { + { &hf_bssgp_msg_type, + { "PDU Type", "bssgp.pdu_type", + FT_UINT8, BASE_HEX|BASE_EXT_STRING, &bssgp_msg_strings_ext, 0x0, + NULL, HFILL } + }, + { &hf_bssgp_elem_id, + { "Element ID", "bssgp.elem_id", + FT_UINT8, BASE_DEC, NULL, 0, + NULL, HFILL } + }, + { &hf_bssgp_bss_area_ind, + { "BSS indicator", "bssgp.bss_ind", + FT_UINT8, BASE_HEX, NULL, 0x0, + NULL, HFILL } + }, + { &hf_bssgp_bvci, + { "BVCI", "bssgp.bvci", + FT_UINT16, BASE_HEX, NULL, 0x0, + NULL, HFILL } + }, + { &hf_bssgp_bmax, + { "Bmax(x 100 or in increments as defined by the Flow Control Granularity IE)", "bssgp.bmax", + FT_UINT16, BASE_DEC, NULL, 0x0, + NULL, HFILL } + }, + { &hf_bssgp_r, + { "R(x 100 or in increments as defined by the Flow Control Granularity IE)", "bssgp.r", + FT_UINT16, BASE_DEC, NULL, 0x0, + NULL, HFILL } + }, + { &hf_bssgp_r_pfc, + { "R_PFC(x 100 or in increments as defined by the Flow Control Granularity IE)", "bssgp.r_pfc", + FT_UINT16, BASE_DEC, NULL, 0x0, + NULL, HFILL } + }, + { &hf_bssgp_bucket_size, + { "Bmax(x 100 or in increments as defined by the Flow Control Granularity IE)", "bssgp.bucket_size", + FT_UINT16, BASE_DEC, NULL, 0x0, + NULL, HFILL } + }, + { &hf_bssgp_bmax_pfc, + { "Bmax_PFC(x 100 or in increments as defined by the Flow Control Granularity IE)", "bssgp.bmax_pfc", + FT_UINT16, BASE_DEC, NULL, 0x0, + NULL, HFILL } + }, + { &hf_bssgp_omc_id, + { "OMC identity", "bssgp.omc_id", + FT_BYTES, BASE_NONE, NULL, 0x0, + NULL, HFILL } + }, + { &hf_bssgp_nsei, + { "NSEI", "bssgp.nsei", + FT_UINT16, BASE_HEX, NULL, 0x0, + NULL, HFILL } + }, + { &hf_bssgp_rrlp_flag1, + { "Flag 1", "bssgp.rrlp_flag1", + FT_BOOLEAN, 8, TFS(&bssgp_rrlp_flg1_vals), 0x01, + NULL, HFILL } + }, + { &hf_bssgp_ci, + { "CI", "bssgp.ci", + FT_UINT16, BASE_HEX, NULL, 0x0, + "Cell Identity", HFILL } + }, + { &hf_bssgp_flush_action, + { "Action", "bssgp.ci", + FT_UINT8, BASE_DEC, VALS(bssgp_flush_action_vals), 0x0, + NULL, HFILL } + }, + { &hf_bssgp_llc_frames_disc, + { "Number of frames discarded", "bssgp.llc_frames_disc", + FT_UINT8, BASE_DEC, NULL, 0x0, + NULL, HFILL } + }, + { &hf_bssgp_ra_discriminator, + { "Routing Address Discriminator", "bssgp.rad", + FT_UINT8, BASE_DEC, VALS(bssgp_ra_discriminator_vals), 0x0f, + NULL, HFILL } + }, + { &hf_bssgp_rim_app_id, + { "RIM Application Identity", "bssgp.rim_app_id", + FT_UINT8, BASE_DEC, VALS(bssgp_rim_appid_vals), 0x0, + NULL, HFILL } + }, + { &hf_bssgp_rim_seq_no, + { "RIM Sequence Number", "bssgp.rim_seq_no", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL } + }, + { &hf_bssgp_rat_discriminator, + { "RAT discriminator", "bssgp.rat_discriminator", + FT_UINT8, BASE_DEC, VALS(bssgp_rat_discriminator_vals), 0x0f, + NULL, HFILL } + }, + { &hf_bssgp_nacc_cause, + { "NACC Cause", "bssgp.nacc_cause", + FT_UINT8, BASE_DEC, VALS(bssgp_nacc_cause_vals), 0x0, + NULL, HFILL } + }, + { &hf_bssgp_s13_cause, + { "SI3 Cause", "bssgp.s13_cause", + FT_UINT8, BASE_DEC, VALS(bssgp_s13_cause_vals), 0x0, + NULL, HFILL } + }, + { &hf_bssgp_mbms_data_ch_cause, + { "MBMS data channel Cause", "bssgp.mbms_data_ch_cause", + FT_UINT8, BASE_DEC, VALS(bssgp_mbms_data_ch_cause_vals), 0x0, + NULL, HFILL } + }, + { &hf_bssgp_utra_si_cause, + { "UTRA SI Cause", "bssgp.utra_si_cause", + FT_UINT8, BASE_DEC, VALS(bssgp_utra_si_cause_vals), 0x0, + NULL, HFILL } + }, + { &hf_bssgp_num_si_psi, + { "Number of SI/PSI", "bssgp.num_si_psi", + FT_UINT8, BASE_DEC, NULL, 0xfe, + NULL, HFILL } + }, + {&hf_bssgp_si_psi_type, + { "Type", "bssgp.si_psi_type", + FT_BOOLEAN, 8, TFS(&bssgp_si_psi_type_vals), 0x01, + NULL, HFILL } + }, + { &hf_bssgp_ran_inf_req_pdu_t_ext_c, + { "PDU Type Extension", "bssgp.ran_inf_req_pdu_t_ext_c", + FT_UINT8, BASE_DEC, VALS(bssgp_ran_inf_req_pdu_t_ext_c_vals), 0x0e, + NULL, HFILL } + }, + { &hf_bssgp_ran_inf_pdu_t_ext_c, + { "PDU Type Extension", "bssgp.ran_inf_pdu_t_ext_c", + FT_UINT8, BASE_DEC, VALS(bssgp_ran_inf_pdu_t_ext_c_vals), 0x0e, + NULL, HFILL } + }, + {&hf_bssgp_rim_pdu_ind_ack, + { "ACK", "bssgp.rim_pdu_ind_ack", + FT_BOOLEAN, 8, TFS(&bssgp_rim_pdu_ind_ack_vals), 0x01, + NULL, HFILL } + }, + { &hf_bssgp_rim_proto_ver_no, + { "RIM Protocol Version Number", "bssgp.rim_proto_ver_no", + FT_UINT8, BASE_DEC, VALS(bssgp_rim_proto_ver_no_vals), 0x0, + NULL, HFILL } + }, + { &hf_bssgp_delay_val, + { "Delay Value (in centi-seconds)", "bssgp.delay_val", + FT_UINT16, BASE_DEC, NULL, 0x0, + NULL, HFILL } + }, + { &hf_bssgp_cause, + { "Cause", "bssgp.cause", + FT_UINT8, BASE_DEC|BASE_EXT_STRING, &bssgp_cause_vals_ext, 0x0, + NULL, HFILL } + }, + { &hf_bssgp_peak_rate_gran, + { "Peak Bit Rate Granularity", "bssgp.peak_rate_gran", + FT_UINT8, BASE_DEC, NULL, 0xc0, + NULL, HFILL } + }, + { &hf_bssgp_cr_bit, + { "C/R", "bssgp.cr_bit", + FT_BOOLEAN, 8, TFS(&bssgp_cr_bit_vals), 0x20, + NULL, HFILL } + }, + { &hf_bssgp_t_bit, + { "T", "bssgp.t_bit", + FT_BOOLEAN, 8, TFS(&bssgp_t_bit_vals), 0x10, + NULL, HFILL } + }, + { &hf_bssgp_a_bit, + { "A", "bssgp.a_bit", + FT_BOOLEAN, 8, TFS(&bssgp_a_bit_vals), 0x08, + NULL, HFILL } + }, + { &hf_bssgp_ra_cause, + { "Radio Cause", "bssgp.ra_cause", + FT_UINT8, BASE_DEC, VALS(bssgp_radio_cause_vals), 0x00, + NULL, HFILL } + }, + { &hf_bssgp_ra_cap_upd_cause, + { "RA-Cap-UPD Cause", "bssgp.ra_cap_upd_cause", + FT_UINT8, BASE_DEC, VALS(bssgp_ra_cap_upd_cause_vals), 0x00, + NULL, HFILL } + }, + { &hf_bssgp_r_default_ms, + { "R_default_MS(x 100 or in increments as defined by the Flow Control Granularity IE)", "bssgp.r", + FT_UINT16, BASE_DEC, NULL, 0x0, + NULL, HFILL } + }, + + { &hf_bssgp_suspend_ref_no, + { "Suspend Reference Number", "bssgp.r_default_ms", + FT_UINT8, BASE_DEC, NULL, 0x00, + NULL, HFILL } + }, + { &hf_bssgp_tag, + { "Tag", "bssgp.tag", + FT_UINT8, BASE_DEC, NULL, 0x00, + NULL, HFILL } + }, + { &hf_bssgp_trace_ref, + { "Trace Reference", "bssgp.trace_ref", + FT_UINT16, BASE_DEC, NULL, 0x00, + NULL, HFILL } + }, + { &hf_bssgp_trigger_id, + { "Entity Identity", "bssgp.entity_id", + FT_BYTES, BASE_NONE, NULL, 0x00, + NULL, HFILL } + }, + { &hf_bssgp_transaction_id, + { "Transaction Id", "bssgp.transaction_id", + FT_UINT16, BASE_DEC, NULL, 0x00, + NULL, HFILL } + }, + { &hf_bssgp_no_of_oct, + { "Number of octets transferred or deleted", "bssgp.no_of_oct", + FT_UINT24, BASE_DEC, NULL, 0x00, + NULL, HFILL } + }, + { &hf_bssgp_unit_val, + { "Unit Value", "bssgp.unit_val", + FT_UINT8, BASE_DEC, VALS(bssgp_unit_vals), 0xe0, + NULL, HFILL } + }, + { &hf_bssgp_gprs_timer, + { "Unit Value", "bssgp.gprs_timer", + FT_UINT8, BASE_DEC, NULL, 0x1f, + NULL, HFILL } + }, + + { &hf_bssgp_mbms, + { "MBMS Procedures", "bssgp.mbms", + FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x80, + NULL, HFILL } + }, + { &hf_bssgp_EnhancedRadioStatus, + { "Enhanced Radio Status Procedures", "bssgp.enhancedradiostatus", + FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x40, + NULL, HFILL } + }, + { &hf_bssgp_pfcfc, + { "PFC Flow Control Procedures", "bssgp.pfcfc", + FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x20, + NULL, HFILL } + }, + { &hf_bssgp_rim, + { "RAN Information Management (RIM) procedures", "bssgp.rim", + FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x10, + NULL, HFILL } + }, + { &hf_bssgp_lcs, + { "LCS Procedures", "bssgp.lcs", + FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x08, + NULL, HFILL } + }, + { &hf_bssgp_inr, + { "Inter-NSE re-routing(INR)", "bssgp.inr", + FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x04, + NULL, HFILL } + }, + { &hf_bssgp_cbl, + { "Current Bucket Level(CBL) Procedures", "bssgp.cbl", + FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x02, + NULL, HFILL } + }, + { &hf_bssgp_pfc, + { "Packet Flow Context(PFC) Procedures", "bssgp.pfc", + FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x01, + NULL, HFILL } + }, + { &hf_bssgp_bucket_full_ratio, + { "Ratio of the bucket that is filled up with data", "bssgp.bucket_full_ratio", + FT_UINT8, BASE_DEC, NULL, 0x0, + "B current x (100 / Bmax)", HFILL } + }, + { &hf_bssgp_b_pfc, + { "B_PFC: Bucket Full Ratio of the PFC", "bssgp.b_pfc", + FT_UINT8, BASE_DEC, NULL, 0x0, + "B current x (100 / Bmax)", HFILL } + }, + + { &hf_bssgp_precedence, + { "Precedence", "bssgp.a_bit", + FT_UINT8, BASE_DEC, NULL, 0x07, + NULL, HFILL } + }, + { &hf_bssgp_serv_utran_cco, + { "Service UTRAN CCO", "bssgp.serv_utran_cco", + FT_UINT8, BASE_DEC, VALS(bssgp_service_utran_cco_vals), 0x07, + NULL, HFILL } + }, + { &hf_bssgp_mbms_session_id, + { "MBMS Session ID", "bssgp.mbms_session_id", + FT_UINT8, BASE_DEC, NULL, 0x0, + NULL, HFILL } + }, + { &hf_bssgp_mbms_cause, + { "Cause", "bssgp.mbms_cause", + FT_UINT8, BASE_DEC|BASE_EXT_STRING, &bssgp_mbms_cause_vals_ext, 0x0f, + NULL, HFILL } + }, + { &hf_bssgp_mbms_stop_cause, + { "Stop Cause", "bssgp.mbms_stop_cause", + FT_UINT8, BASE_DEC|BASE_EXT_STRING, &bssgp_mbms_stop_cause_vals_ext, 0x0f, + NULL, HFILL } + }, + { &hf_bssgp_session_inf, + { "BC/MC", "bssgp.session_inf", + FT_BOOLEAN, 8, TFS(&tfs_bssgp_bc_mc), 0x01, + NULL, HFILL } + }, + { &hf_bssgp_mbms_num_ra_ids, + { "Number of Routing Area Identifications", "bssgp.mbms_num_ra_ids", + FT_UINT8, BASE_DEC|BASE_EXT_STRING, &bssgp_mbms_num_ra_ids_vals_ext, 0xf0, + NULL, HFILL } + }, + { &hf_bssgp_gb_if, + { "Gigabit Interface", "bssgp.gb_if", + FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x02, + NULL, HFILL } + }, + { &hf_bssgp_ps_ho, + { "PS Handover", "bssgp.ps_ho", + FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x01, + NULL, HFILL } + }, + { &hf_bssgp_src_to_trg_transp_cont, + { "Source to Target Transparent Container", "bssgp.src_to_trg_transp_cont", + FT_BYTES, FT_NONE, NULL, 0x0, + NULL, HFILL } + }, + { &hf_bssgp_trg_to_src_transp_cont, + { "Target to Source Transparent Container", "bssgp.trg_to_src_transp_cont", + FT_BYTES, FT_NONE, NULL, 0x0, + NULL, HFILL } + }, + { &hf_bssgp_rnc_id, + { "RNC ID", "bssgp.rnc_id", + FT_UINT16, BASE_DEC, NULL, 0x0, + NULL, HFILL } + }, + { &hf_bssgp_page_mode, + { "PAGE_MODE", "bssgp.page_mode", + FT_UINT8, BASE_DEC, VALS(bssgp_page_mode_vals), 0x03, + NULL, HFILL } + }, + { &hf_bssgp_container_id, + { "Container ID", "bssgp.container_id", + FT_UINT8, BASE_DEC, NULL, 0x03, + NULL, HFILL } + }, + { &hf_bssgp_global_tfi, + { "Global TFI", "bssgp.global_tfi", + FT_UINT8, BASE_DEC, VALS(bssgp_global_tfi_vals), 0x0, + NULL, HFILL } + }, + { &hf_bssgp_ul_tfi, + { "UPLINK_TFI", "bssgp.global_tfi", + FT_UINT8, BASE_DEC, NULL, 0x0, + NULL, HFILL } + }, + { &hf_bssgp_dl_tfi, + { "DOWNLINK_TFI", "bssgp.global_tfi", + FT_UINT8, BASE_DEC, NULL, 0x0, + NULL, HFILL } + }, + { &hf_bssgp_time_to_MBMS_data_tran, + { "Time to MBMS Data Transfer", "bssgp.time_to_mbms_data_tran", + FT_UINT8, BASE_DEC, NULL, 0x0, + NULL, HFILL } + }, + { &hf_bssgp_mbms_session_rep_no, + { "MBMS-Session-Repetition-Number", "bssgp.mbms_session_rep_no", + FT_UINT8, BASE_DEC, NULL, 0x0, + NULL, HFILL } + }, + { &hf_bssgp_ps_ho_cmd, + { "PS Handover Command", "bssgp.ps_ho_cmd", + FT_BYTES, BASE_NONE, NULL, 0x0, + NULL, HFILL } + }, + { &hf_bssgp_sipsi, + { "SI/PSI", "bssgp.sipsi", + FT_BOOLEAN, 8, TFS(&tfs_requested_not_requested), 0x01, + NULL, HFILL } + }, + { &hf_bssgp_type, + { "Type", "bssgp.type", + FT_UINT8, BASE_DEC, VALS(type_vals), 0x01, + NULL, HFILL } + }, + { &hf_bssgp_cs_indication, + { "CS Indication Contents", "bssgp.cs_indication", + FT_UINT8, BASE_HEX, NULL, 0x0, + NULL, HFILL } + }, + + { &hf_bssgp_flow_control_gran, + { "Granularity", "bssgp.flow_control_gran", + FT_UINT8, BASE_DEC, VALS(bssgp_flow_control_gran_vals), 0x03, + NULL, HFILL } + }, + { &hf_bssgp_serv_eutran_cco, + { "Service EUTRAN CCO", "bssgp.serv_eutran_cco", + FT_UINT8, BASE_DEC, VALS(bssgp_service_eutran_cco_vals), 0x18, + NULL, HFILL } + }, + { &hf_bssgp_sub_prof_id_f_rat_freq_prio, + { "Subscriber Profile ID for RAT/Frequency priority", "bssgp.sub_prof_id_f_rat_freq_prio", + FT_UINT8, BASE_DEC, NULL, 0x0, + NULL, HFILL } + }, + { &hf_bssgp_eutran_irat_ho_inf_req, + { "E-UTRAN Inter RAT Handover Info", "bssgp.eutran_irat_ho_inf_req", + FT_BOOLEAN, 8, TFS(&tfs_requested_not_requested), 0x02, + NULL, HFILL } + }, + { &hf_bssgp_irat_ho_inf_req, + { "Inter RAT Handover Info", "bssgp.irat_ho_inf_req", + FT_BOOLEAN, 8, TFS(&tfs_requested_not_requested), 0x01, + NULL, HFILL } + }, + + { &hf_bssgp_rel_int_rat_ho_inf_ind, + { "Inter RAT Handover Info", "bssgp.rel_int_rat_ho_inf_ind", + FT_BOOLEAN, 8, TFS(&tfs_reliable_not_reliable), 0x01, + NULL, HFILL } + }, + { &hf_bssgp_csg_id, + { "CSG Identity (CSG-ID)", "bssgp.csg_id", + FT_UINT32, BASE_HEX, NULL, 0xffffff0f, + NULL, HFILL } + }, + { &hf_bssgp_cell_acc_mode, + { "Cell Access Mode", "bssgp.cell_acc_mode", + FT_UINT8, BASE_DEC, VALS(bssgp_cell_access_mode_vals), 0x01, + NULL, HFILL } + }, + { &hf_bssgp_Global_ENB_ID_PDU, + { "Global-ENB-ID", "bssgp.Global_ENB_ID", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL } + }, + { &hf_bssgp_SONtransferRequestContainer_PDU, + { "SONtransferRequestContainer", "bssgp.SONtransferRequestContainer", + FT_UINT32, BASE_DEC, VALS(s1ap_SONtransferRequestContainer_vals), 0, + NULL, HFILL }}, + + }; + + /* Setup protocol subtree array */ +#define NUM_INDIVIDUAL_ELEMS 10 + gint *ett[NUM_INDIVIDUAL_ELEMS + + NUM_BSSGP_ELEM + + NUM_BSSGP_MSG]; + ett[0] = &ett_bssgp; ett[1] = &ett_bssgp_list_of_setup_pfcs; ett[2] = &ett_bssgp_pfcs_to_be_set_up_list_t10; ett[3] = &ett_bssgp_pfcs_to_be_set_up_list_arp; @@ -6765,39 +6772,39 @@ proto_register_bssgp(void) ett[6] = &ett_bssgp_pfcs_to_be_set_up_list; ett[7] = &ett_bssgp_new; ett[8] = &ett_bssgp_pfc_flow_control_parameters_pfc; - ett[9] = &ett_bssgp_ra_id, + ett[9] = &ett_bssgp_ra_id, - last_offset = NUM_INDIVIDUAL_ELEMS; + last_offset = NUM_INDIVIDUAL_ELEMS; - for (i=0; i < NUM_BSSGP_ELEM; i++, last_offset++) - { - ett_bssgp_elem[i] = -1; - ett[last_offset] = &ett_bssgp_elem[i]; - } + for (i=0; i < NUM_BSSGP_ELEM; i++, last_offset++) + { + ett_bssgp_elem[i] = -1; + ett[last_offset] = &ett_bssgp_elem[i]; + } - for (i=0; i < NUM_BSSGP_MSG; i++, last_offset++) - { - ett_bssgp_msg[i] = -1; - ett[last_offset] = &ett_bssgp_msg[i]; - } + for (i=0; i < NUM_BSSGP_MSG; i++, last_offset++) + { + ett_bssgp_msg[i] = -1; + ett[last_offset] = &ett_bssgp_msg[i]; + } - /* Register the protocol name and description */ - proto_bssgp = proto_register_protocol("Base Station Subsystem GPRS Protocol", "BSSGP", "bssgp"); + /* Register the protocol name and description */ + proto_bssgp = proto_register_protocol("Base Station Subsystem GPRS Protocol", "BSSGP", "bssgp"); - /* Required function calls to register the header fields and subtrees used */ - proto_register_field_array(proto_bssgp, hf, array_length(hf)); - proto_register_subtree_array(ett, array_length(ett)); - register_dissector("bssgp", dissect_bssgp, proto_bssgp); + /* Required function calls to register the header fields and subtrees used */ + proto_register_field_array(proto_bssgp, hf, array_length(hf)); + proto_register_subtree_array(ett, array_length(ett)); + register_dissector("bssgp", dissect_bssgp, proto_bssgp); - /* Register configuration options */ - bssgp_module = prefs_register_protocol(proto_bssgp, NULL); - prefs_register_bool_preference(bssgp_module, "decode_nri", - "Decode NRI", - "Decode NRI (for use with SGSN in Pool)", - &bssgp_decode_nri); - prefs_register_uint_preference(bssgp_module, "nri_length", "NRI length", - "NRI length, in bits", - 10, &bssgp_nri_length); + /* Register configuration options */ + bssgp_module = prefs_register_protocol(proto_bssgp, NULL); + prefs_register_bool_preference(bssgp_module, "decode_nri", + "Decode NRI", + "Decode NRI (for use with SGSN in Pool)", + &bssgp_decode_nri); + prefs_register_uint_preference(bssgp_module, "nri_length", "NRI length", + "NRI length, in bits", + 10, &bssgp_nri_length); } /* If this dissector uses sub-dissector registration add a registration routine. @@ -6805,9 +6812,9 @@ proto_register_bssgp(void) void proto_reg_handoff_bssgp(void) { - llc_handle = find_dissector("llcgprs"); - rrlp_handle = find_dissector("rrlp"); - data_handle = find_dissector("data"); + llc_handle = find_dissector("llcgprs"); + rrlp_handle = find_dissector("rrlp"); + data_handle = find_dissector("data"); - diameter_3gpp_avp_dissector_table = find_dissector_table("diameter.3gpp"); + diameter_3gpp_avp_dissector_table = find_dissector_table("diameter.3gpp"); } diff --git a/epan/dissectors/packet-collectd.c b/epan/dissectors/packet-collectd.c index 741e79d49a..ddbf3499d7 100644 --- a/epan/dissectors/packet-collectd.c +++ b/epan/dissectors/packet-collectd.c @@ -307,7 +307,7 @@ dissect_collectd_string (tvbuff_t *tvb, packet_info *pinfo, gint type_hf, pt = proto_item_add_subtree (pi, ett_collectd_string); proto_tree_add_uint (pt, hf_collectd_type, tvb, offset, 2, type); proto_tree_add_uint (pt, hf_collectd_length, tvb, offset + 2, 2, length); - proto_tree_add_item (pt, type_hf, tvb, *ret_offset, *ret_length, FALSE); + proto_tree_add_item (pt, type_hf, tvb, *ret_offset, *ret_length, ENC_ASCII|ENC_NA); return (0); } /* int dissect_collectd_string */ @@ -385,7 +385,7 @@ dissect_collectd_integer (tvbuff_t *tvb, packet_info *pinfo, gint type_hf, proto_tree_add_uint (pt, hf_collectd_type, tvb, offset, 2, type); proto_tree_add_uint (pt, hf_collectd_length, tvb, offset + 2, 2, length); - proto_tree_add_item (pt, type_hf, tvb, offset + 4, 8, FALSE); + proto_tree_add_item (pt, type_hf, tvb, offset + 4, 8, ENC_BIG_ENDIAN); return (0); } /* int dissect_collectd_integer */ diff --git a/epan/dissectors/packet-diffserv-mpls-common.c b/epan/dissectors/packet-diffserv-mpls-common.c index d1907a3a74..c75a165f52 100644 --- a/epan/dissectors/packet-diffserv-mpls-common.c +++ b/epan/dissectors/packet-diffserv-mpls-common.c @@ -12,12 +12,12 @@ * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. - * + * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. - * + * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. @@ -61,8 +61,8 @@ const value_string phbid_bit15_vals[] = { }; void -dissect_diffserv_mpls_common(tvbuff_t *tvb, proto_tree *tree, int type, - int offset, int **hfindexes, gint **etts) +dissect_diffserv_mpls_common(tvbuff_t *tvb, proto_tree *tree, int type, + int offset, int **hfindexes, gint **etts) { proto_item *ti = NULL, *sub_ti; proto_tree *tree2 = NULL, *phbid_subtree; @@ -71,43 +71,43 @@ dissect_diffserv_mpls_common(tvbuff_t *tvb, proto_tree *tree, int type, switch (type) { case 1: /* E-LSP */ - ti = proto_tree_add_item(tree, hf_map, tvb, offset, 4, FALSE); - tree2 = proto_item_add_subtree(ti, ett_map); - proto_item_set_text(ti, "MAP: "); - offset ++; - exp = tvb_get_guint8(tvb, offset) & 7; - proto_tree_add_uint(tree2, hf_exp, tvb, offset, 1, exp); - proto_item_append_text(ti, "EXP %u, ", exp); - offset ++; - break; + ti = proto_tree_add_item(tree, hf_map, tvb, offset, 4, ENC_NA); + tree2 = proto_item_add_subtree(ti, ett_map); + proto_item_set_text(ti, "MAP: "); + offset ++; + exp = tvb_get_guint8(tvb, offset) & 7; + proto_tree_add_uint(tree2, hf_exp, tvb, offset, 1, exp); + proto_item_append_text(ti, "EXP %u, ", exp); + offset ++; + break; case 2: /* L-LSP */ - tree2 = tree; - break; + tree2 = tree; + break; default: - return; + return; } /* PHBID subtree */ - sub_ti = proto_tree_add_item(tree2, hf_phbid, tvb, offset, 2, FALSE); + sub_ti = proto_tree_add_item(tree2, hf_phbid, tvb, offset, 2, ENC_NA); phbid_subtree = proto_item_add_subtree(sub_ti, ett_map_phbid); proto_item_set_text(sub_ti, "%s: ", (type == 1) ? PHBID_DESCRIPTION : "PSC"); phbid = tvb_get_ntohs(tvb, offset); if ((phbid & 1) == 0) { - /* Case 1 of RFC 3140 */ - proto_tree_add_uint(phbid_subtree, hf_phbid_dscp, - tvb, offset, 2, phbid); - if (type == 1) - proto_item_append_text(ti, "DSCP %u", phbid >> 10); - proto_item_append_text(sub_ti, "DSCP %u", phbid >> 10); + /* Case 1 of RFC 3140 */ + proto_tree_add_uint(phbid_subtree, hf_phbid_dscp, + tvb, offset, 2, phbid); + if (type == 1) + proto_item_append_text(ti, "DSCP %u", phbid >> 10); + proto_item_append_text(sub_ti, "DSCP %u", phbid >> 10); } else { - /* Case 2 of RFC 3140 */ - proto_tree_add_uint(phbid_subtree, hf_phbid_code, - tvb, offset, 2, phbid); - if (type == 1) - proto_item_append_text(ti, "PHB id code %u", phbid >> 4); - proto_item_append_text(sub_ti, "PHB id code %u", phbid >> 4); + /* Case 2 of RFC 3140 */ + proto_tree_add_uint(phbid_subtree, hf_phbid_code, + tvb, offset, 2, phbid); + if (type == 1) + proto_item_append_text(ti, "PHB id code %u", phbid >> 4); + proto_item_append_text(sub_ti, "PHB id code %u", phbid >> 4); } proto_tree_add_uint(phbid_subtree, hf_phbid_bit14, tvb, offset, 2, phbid); proto_tree_add_uint(phbid_subtree, hf_phbid_bit15, tvb, offset, 2, phbid); diff --git a/epan/dissectors/packet-dis-fields.c b/epan/dissectors/packet-dis-fields.c index 6c7ba4b7e7..8cb40843b3 100644 --- a/epan/dissectors/packet-dis-fields.c +++ b/epan/dissectors/packet-dis-fields.c @@ -823,10 +823,10 @@ gint parseField_Enum(tvbuff_t *tvb, proto_tree *tree, gint offset, DIS_ParserNod if (dis_hf_id != -1) { #if 0 - pi = proto_tree_add_item(tree, dis_hf_id, tvb, offset, numBytes, FALSE); + pi = proto_tree_add_item(tree, dis_hf_id, tvb, offset, numBytes, ENC_BIG_ENDIAN); proto_item_set_text(pi, "%s = %s", parserNode.fieldLabel, enumStr); #else - proto_tree_add_item(tree, dis_hf_id, tvb, offset, numBytes, FALSE); + proto_tree_add_item(tree, dis_hf_id, tvb, offset, numBytes, ENC_BIG_ENDIAN); #endif } else { diff --git a/epan/dissectors/packet-h248_3gpp.c b/epan/dissectors/packet-h248_3gpp.c index 4b90a2be40..8d22b9ec34 100644 --- a/epan/dissectors/packet-h248_3gpp.c +++ b/epan/dissectors/packet-h248_3gpp.c @@ -303,7 +303,7 @@ static void dissect_3GTFO_codec_mode(proto_tree* tree, tvbuff_t* tvb, packet_inf dissect_codec_mode(pt, sub_tvb, 0, tvb_length(tvb)); } } else { - proto_tree_add_item(tree,hfid,tvb,0,-1,FALSE); + proto_tree_add_item(tree,hfid,tvb,0,-1,ENC_NA); } } @@ -331,7 +331,7 @@ static void dissect_3GTFO_codec_list(proto_tree* tree, tvbuff_t* tvb, packet_inf } while(offset < len); } } else { - proto_tree_add_item(tree,hfid,tvb,0,-1,FALSE); + proto_tree_add_item(tree,hfid,tvb,0,-1,ENC_NA); } } diff --git a/epan/dissectors/packet-isis-clv.c b/epan/dissectors/packet-isis-clv.c index 0872cf0884..9d32631033 100644 --- a/epan/dissectors/packet-isis-clv.c +++ b/epan/dissectors/packet-isis-clv.c @@ -343,7 +343,7 @@ isis_dissect_ip_int_clv(tvbuff_t *tvb, proto_tree *tree, int offset, } if ( tree ) { - proto_tree_add_item(tree, tree_id, tvb, offset, 4, FALSE); + proto_tree_add_item(tree, tree_id, tvb, offset, 4, ENC_BIG_ENDIAN); } offset += 4; length -= 4; @@ -427,7 +427,7 @@ isis_dissect_te_router_id_clv(tvbuff_t *tvb, proto_tree *tree, int offset, return; } if ( tree ) { - proto_tree_add_item(tree, tree_id, tvb, offset, 4, FALSE); + proto_tree_add_item(tree, tree_id, tvb, offset, 4, ENC_BIG_ENDIAN); } } diff --git a/epan/dissectors/packet-pop.c b/epan/dissectors/packet-pop.c index 1e5c5e7cf5..22897e1efb 100644 --- a/epan/dissectors/packet-pop.c +++ b/epan/dissectors/packet-pop.c @@ -275,7 +275,7 @@ dissect_pop(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) (is_request) ? hf_pop_request_command : hf_pop_response_indicator, - tvb, offset, tokenlen, FALSE); + tvb, offset, tokenlen, ENC_ASCII|ENC_NA); if (data_val) { if (is_request) { @@ -313,7 +313,7 @@ dissect_pop(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) (is_request) ? hf_pop_request_parameter : hf_pop_response_description, - tvb, offset, linelen, FALSE); + tvb, offset, linelen, ENC_ASCII|ENC_NA); } offset = next_offset; diff --git a/epan/dissectors/packet-radius_packetcable.c b/epan/dissectors/packet-radius_packetcable.c index df2affe126..eb4e5de75c 100644 --- a/epan/dissectors/packet-radius_packetcable.c +++ b/epan/dissectors/packet-radius_packetcable.c @@ -329,7 +329,7 @@ static const gchar* dissect_packetcable_qos_descriptor(proto_tree* tree, tvbuff_ proto_tree_add_item(obj_tree, hf_packetcable_qos_status_indication, tvb, 0, 4, ENC_BIG_ENDIAN); for (intval = 0; intval < PACKETCABLE_QOS_DESC_BITFIELDS; intval++) { - proto_tree_add_item(obj_tree, hf_packetcable_qos_desc_flags[intval], tvb, 0, 4, FALSE); + proto_tree_add_item(obj_tree, hf_packetcable_qos_desc_flags[intval], tvb, 0, 4, ENC_BIG_ENDIAN); } tvb_memcpy(tvb, packetcable_buf, 4, 16); @@ -340,7 +340,7 @@ static const gchar* dissect_packetcable_qos_descriptor(proto_tree* tree, tvbuff_ for (intval = 0; intval < PACKETCABLE_QOS_DESC_BITFIELDS; intval++) { if (packetcable_qos_flags & packetcable_qos_desc_mask[intval]) { proto_tree_add_item(tree, hf_packetcable_qos_desc_fields[intval], - tvb, packetcable_qos_off, 4, FALSE); + tvb, packetcable_qos_off, 4, ENC_BIG_ENDIAN); packetcable_qos_off += 4; } } diff --git a/epan/dissectors/packet-rtcp.c b/epan/dissectors/packet-rtcp.c index a197f7058d..0f9691929f 100644 --- a/epan/dissectors/packet-rtcp.c +++ b/epan/dissectors/packet-rtcp.c @@ -83,14 +83,14 @@ #include /* Version is the first 2 bits of the first octet*/ -#define RTCP_VERSION(octet) ((octet) >> 6) +#define RTCP_VERSION(octet) ((octet) >> 6) /* Padding is the third bit; no need to shift, because true is any value other than 0! */ -#define RTCP_PADDING(octet) ((octet) & 0x20) +#define RTCP_PADDING(octet) ((octet) & 0x20) /* Receiver/ Sender count is the 5 last bits */ -#define RTCP_COUNT(octet) ((octet) & 0x1F) +#define RTCP_COUNT(octet) ((octet) & 0x1F) static dissector_handle_t rtcp_handle; @@ -99,10 +99,10 @@ static dissector_table_t rtcp_dissector_table; static const value_string rtcp_version_vals[] = { - { 2, "RFC 1889 Version" }, - { 0, "Old VAT Version" }, - { 1, "First Draft Version" }, - { 0, NULL }, + { 2, "RFC 1889 Version" }, + { 0, "Old VAT Version" }, + { 1, "First Draft Version" }, + { 0, NULL }, }; /* RTCP packet types according to Section A.11.1 */ @@ -125,21 +125,21 @@ static const value_string rtcp_version_vals[] = static const value_string rtcp_packet_type_vals[] = { - { RTCP_SR, "Sender Report" }, - { RTCP_RR, "Receiver Report" }, - { RTCP_SDES, "Source description" }, - { RTCP_BYE, "Goodbye" }, - { RTCP_APP, "Application specific" }, - { RTCP_RTPFB,"Generic RTP Feedback" }, - { RTCP_PSFB, "Payload-specific" }, - { RTCP_XR, "Extended report (RFC 3611)"}, - { RTCP_AVB, "AVB RTCP packet (IEEE1733)" }, - { RTCP_RSI, "Receiver Summary Information" }, - { RTCP_FIR, "Full Intra-frame Request (H.261)" }, - { RTCP_NACK, "Negative Acknowledgement (H.261)" }, - { RTCP_SMPTETC, "SMPTE time-code mapping" }, - { RTCP_IJ, "Extended inter-arrival jitter report" }, - { 0, NULL } + { RTCP_SR, "Sender Report" }, + { RTCP_RR, "Receiver Report" }, + { RTCP_SDES, "Source description" }, + { RTCP_BYE, "Goodbye" }, + { RTCP_APP, "Application specific" }, + { RTCP_RTPFB,"Generic RTP Feedback" }, + { RTCP_PSFB, "Payload-specific" }, + { RTCP_XR, "Extended report (RFC 3611)"}, + { RTCP_AVB, "AVB RTCP packet (IEEE1733)" }, + { RTCP_RSI, "Receiver Summary Information" }, + { RTCP_FIR, "Full Intra-frame Request (H.261)" }, + { RTCP_NACK, "Negative Acknowledgement (H.261)" }, + { RTCP_SMPTETC, "SMPTE time-code mapping" }, + { RTCP_IJ, "Extended inter-arrival jitter report" }, + { 0, NULL } }; /* RTCP SDES types (Section A.11.2) */ @@ -156,17 +156,17 @@ static const value_string rtcp_packet_type_vals[] = static const value_string rtcp_sdes_type_vals[] = { - { RTCP_SDES_END, "END" }, - { RTCP_SDES_CNAME, "CNAME (user and domain)" }, - { RTCP_SDES_NAME, "NAME (common name)" }, - { RTCP_SDES_EMAIL, "EMAIL (e-mail address)" }, - { RTCP_SDES_PHONE, "PHONE (phone number)" }, - { RTCP_SDES_LOC, "LOC (geographic location)" }, - { RTCP_SDES_TOOL, "TOOL (name/version of source app)" }, - { RTCP_SDES_NOTE, "NOTE (note about source)" }, - { RTCP_SDES_PRIV, "PRIV (private extensions)" }, - { RTCP_SDES_H323_CADDR,"H323-CADDR (H.323 callable address)"}, - { 0, NULL } + { RTCP_SDES_END, "END" }, + { RTCP_SDES_CNAME, "CNAME (user and domain)" }, + { RTCP_SDES_NAME, "NAME (common name)" }, + { RTCP_SDES_EMAIL, "EMAIL (e-mail address)" }, + { RTCP_SDES_PHONE, "PHONE (phone number)" }, + { RTCP_SDES_LOC, "LOC (geographic location)" }, + { RTCP_SDES_TOOL, "TOOL (name/version of source app)" }, + { RTCP_SDES_NOTE, "NOTE (note about source)" }, + { RTCP_SDES_PRIV, "PRIV (private extensions)" }, + { RTCP_SDES_H323_CADDR,"H323-CADDR (H.323 callable address)"}, + { 0, NULL } }; /* RTCP XR Blocks (Section 4, RTC 3611) @@ -182,91 +182,91 @@ static const value_string rtcp_sdes_type_vals[] = #define RTCP_XR_TI_VOIP 9 #define RTCP_XR_PR_LOSS_RLE 10 #define RTCP_XR_MC_ACQ 11 -#define RTCP_XR_IDMS 12 +#define RTCP_XR_IDMS 12 static const value_string rtcp_xr_type_vals[] = { - { RTCP_XR_LOSS_RLE, "Loss Run Length Encoding Report Block" }, - { RTCP_XR_DUP_RLE, "Duplicate Run Length Encoding Report Block" }, - { RTCP_XR_PKT_RXTIMES, "Packet Receipt Times Report Block" }, - { RTCP_XR_REF_TIME, "Receiver Reference Time Report Block" }, - { RTCP_XR_DLRR, "DLRR Report Block" }, - { RTCP_XR_STATS_SUMRY, "Statistics Summary Report Block" }, - { RTCP_XR_VOIP_METRCS, "VoIP Metrics Report Block" }, - { RTCP_XR_BT_XNQ, "BT XNQ RTCP XR (RFC5093) Report Block" }, - { RTCP_XR_TI_VOIP, "Texas Instruments Extended VoIP Quality Block" }, - { RTCP_XR_PR_LOSS_RLE, "Post-repair Loss RLE Report Block" }, - { RTCP_XR_MC_ACQ, "Multicast Acquisition Report Block" }, - { RTCP_XR_IDMS, "Inter-destination Media Synchronization Block" }, /* [http://www.etsi.org/deliver/etsi_ts/183000_183099/183063/][ETSI 183 063][Miguel_Angel_Reina_Ortega] */ - { 0, NULL} + { RTCP_XR_LOSS_RLE, "Loss Run Length Encoding Report Block" }, + { RTCP_XR_DUP_RLE, "Duplicate Run Length Encoding Report Block" }, + { RTCP_XR_PKT_RXTIMES, "Packet Receipt Times Report Block" }, + { RTCP_XR_REF_TIME, "Receiver Reference Time Report Block" }, + { RTCP_XR_DLRR, "DLRR Report Block" }, + { RTCP_XR_STATS_SUMRY, "Statistics Summary Report Block" }, + { RTCP_XR_VOIP_METRCS, "VoIP Metrics Report Block" }, + { RTCP_XR_BT_XNQ, "BT XNQ RTCP XR (RFC5093) Report Block" }, + { RTCP_XR_TI_VOIP, "Texas Instruments Extended VoIP Quality Block" }, + { RTCP_XR_PR_LOSS_RLE, "Post-repair Loss RLE Report Block" }, + { RTCP_XR_MC_ACQ, "Multicast Acquisition Report Block" }, + { RTCP_XR_IDMS, "Inter-destination Media Synchronization Block" }, /* [http://www.etsi.org/deliver/etsi_ts/183000_183099/183063/][ETSI 183 063][Miguel_Angel_Reina_Ortega] */ + { 0, NULL} }; /* XR VoIP Metrics Block - PLC Algorithms */ static const value_string rtcp_xr_plc_algo_vals[] = { - { 0, "Unspecified" }, - { 1, "Disabled" }, - { 2, "Enhanced" }, - { 3, "Standard" }, - { 0, NULL } + { 0, "Unspecified" }, + { 1, "Disabled" }, + { 2, "Enhanced" }, + { 3, "Standard" }, + { 0, NULL } }; /* XR VoIP Metrics Block - JB Adaptive */ static const value_string rtcp_xr_jb_adaptive_vals[] = { - { 0, "Unknown" }, - { 1, "Reserved" }, - { 2, "Non-Adaptive" }, - { 3, "Adaptive" }, - { 0, NULL } + { 0, "Unknown" }, + { 1, "Reserved" }, + { 2, "Non-Adaptive" }, + { 3, "Adaptive" }, + { 0, NULL } }; /* XR Stats Summary Block - IP TTL or Hop Limit */ static const value_string rtcp_xr_ip_ttl_vals[] = { - { 0, "No TTL Values" }, - { 1, "IPv4" }, - { 2, "IPv6" }, - { 3, "Undefined" }, - { 0, NULL } + { 0, "No TTL Values" }, + { 1, "IPv4" }, + { 2, "IPv6" }, + { 3, "Undefined" }, + { 0, NULL } }; /* XR IDMS synchronization packet sender type */ static const value_string rtcp_xr_idms_spst[] = { - { 0, "Reserved" }, - { 1, "SC" }, - { 2, "MSAS" }, - { 3, "SC' INPUT" }, - { 4, "SC' OUTPUT" }, - { 5, "Reserved" }, - { 6, "Reserved" }, - { 7, "Reserved" }, - { 8, "Reserved" }, - { 9, "Reserved" }, - { 10, "Reserved" }, - { 11, "Reserved" }, - { 12, "Reserved" }, - { 13, "Reserved" }, - { 14, "Reserved" }, - { 15, "Reserved" }, - { 0, NULL } + { 0, "Reserved" }, + { 1, "SC" }, + { 2, "MSAS" }, + { 3, "SC' INPUT" }, + { 4, "SC' OUTPUT" }, + { 5, "Reserved" }, + { 6, "Reserved" }, + { 7, "Reserved" }, + { 8, "Reserved" }, + { 9, "Reserved" }, + { 10, "Reserved" }, + { 11, "Reserved" }, + { 12, "Reserved" }, + { 13, "Reserved" }, + { 14, "Reserved" }, + { 15, "Reserved" }, + { 0, NULL } }; /* RTCP Application PoC1 Value strings * OMA-TS-PoC-UserPlane-V1_0-20060609-A */ -#define TBCP_BURST_REQUEST 0 -#define TBCP_BURST_GRANTED 1 -#define TBCP_BURST_TAKEN_EXPECT_NO_REPLY 2 -#define TBCP_BURST_DENY 3 -#define TBCP_BURST_RELEASE 4 -#define TBCP_BURST_IDLE 5 -#define TBCP_BURST_REVOKE 6 -#define TBCP_BURST_ACKNOWLEDGMENT 7 -#define TBCP_QUEUE_STATUS_REQUEST 8 -#define TBCP_QUEUE_STATUS_RESPONSE 9 +#define TBCP_BURST_REQUEST 0 +#define TBCP_BURST_GRANTED 1 +#define TBCP_BURST_TAKEN_EXPECT_NO_REPLY 2 +#define TBCP_BURST_DENY 3 +#define TBCP_BURST_RELEASE 4 +#define TBCP_BURST_IDLE 5 +#define TBCP_BURST_REVOKE 6 +#define TBCP_BURST_ACKNOWLEDGMENT 7 +#define TBCP_QUEUE_STATUS_REQUEST 8 +#define TBCP_QUEUE_STATUS_RESPONSE 9 #define TBCP_DISCONNECT 11 #define TBCP_CONNECT 15 #define TBCP_BURST_TAKEN_EXPECT_REPLY 18 @@ -274,99 +274,99 @@ static const value_string rtcp_xr_idms_spst[] = static const value_string rtcp_app_poc1_floor_cnt_type_vals[] = { - { TBCP_BURST_REQUEST, "TBCP Talk Burst Request"}, - { TBCP_BURST_GRANTED, "TBCP Talk Burst Granted"}, - { TBCP_BURST_TAKEN_EXPECT_NO_REPLY, "TBCP Talk Burst Taken (no ack expected)"}, - { TBCP_BURST_DENY, "TBCP Talk Burst Deny"}, - { TBCP_BURST_RELEASE, "TBCP Talk Burst Release"}, - { TBCP_BURST_IDLE, "TBCP Talk Burst Idle"}, - { TBCP_BURST_REVOKE, "TBCP Talk Burst Revoke"}, - { TBCP_BURST_ACKNOWLEDGMENT, "TBCP Talk Burst Acknowledgement"}, - { TBCP_QUEUE_STATUS_REQUEST, "TBCP Queue Status Request"}, - { TBCP_QUEUE_STATUS_RESPONSE, "TBCP Queue Status Response"}, - { TBCP_DISCONNECT, "TBCP Disconnect"}, - { TBCP_CONNECT, "TBCP Connect"}, - { TBCP_BURST_TAKEN_EXPECT_REPLY, "TBCP Talk Burst Taken (ack expected)"}, - { 0, NULL } + { TBCP_BURST_REQUEST, "TBCP Talk Burst Request"}, + { TBCP_BURST_GRANTED, "TBCP Talk Burst Granted"}, + { TBCP_BURST_TAKEN_EXPECT_NO_REPLY, "TBCP Talk Burst Taken (no ack expected)"}, + { TBCP_BURST_DENY, "TBCP Talk Burst Deny"}, + { TBCP_BURST_RELEASE, "TBCP Talk Burst Release"}, + { TBCP_BURST_IDLE, "TBCP Talk Burst Idle"}, + { TBCP_BURST_REVOKE, "TBCP Talk Burst Revoke"}, + { TBCP_BURST_ACKNOWLEDGMENT, "TBCP Talk Burst Acknowledgement"}, + { TBCP_QUEUE_STATUS_REQUEST, "TBCP Queue Status Request"}, + { TBCP_QUEUE_STATUS_RESPONSE, "TBCP Queue Status Response"}, + { TBCP_DISCONNECT, "TBCP Disconnect"}, + { TBCP_CONNECT, "TBCP Connect"}, + { TBCP_BURST_TAKEN_EXPECT_REPLY, "TBCP Talk Burst Taken (ack expected)"}, + { 0, NULL } }; static const value_string rtcp_app_poc1_reason_code1_vals[] = { - { 1, "Another PoC User has permission"}, - { 2, "Internal PoC server error"}, - { 3, "Only one participant in the group"}, - { 4, "Retry-after timer has not expired"}, - { 5, "Listen only"}, - { 0, NULL } + { 1, "Another PoC User has permission"}, + { 2, "Internal PoC server error"}, + { 3, "Only one participant in the group"}, + { 4, "Retry-after timer has not expired"}, + { 5, "Listen only"}, + { 0, NULL } }; static const value_string rtcp_app_poc1_reason_code2_vals[] = { - { 1, "Only one user"}, - { 2, "Talk burst too long"}, - { 3, "No permission to send a Talk Burst"}, - { 4, "Talk burst pre-empted"}, - { 0, NULL } + { 1, "Only one user"}, + { 2, "Talk burst too long"}, + { 3, "No permission to send a Talk Burst"}, + { 4, "Talk burst pre-empted"}, + { 0, NULL } }; static const value_string rtcp_app_poc1_reason_code_ack_vals[] = { - { 0, "Accepted"}, - { 1, "Busy"}, - { 2, "Not accepted"}, - { 0, NULL } + { 0, "Accepted"}, + { 1, "Busy"}, + { 2, "Not accepted"}, + { 0, NULL } }; static const value_string rtcp_app_poc1_conn_sess_type_vals[] = { - { 0, "None"}, - { 1, "1-to-1"}, - { 2, "Ad-hoc"}, - { 3, "Pre-arranged"}, - { 4, "Chat"}, - { 0, NULL } + { 0, "None"}, + { 1, "1-to-1"}, + { 2, "Ad-hoc"}, + { 3, "Pre-arranged"}, + { 4, "Chat"}, + { 0, NULL } }; static const value_string rtcp_app_poc1_qsresp_priority_vals[] = { - { 0, "No priority (un-queued)"}, - { 1, "Normal priority"}, - { 2, "High priority"}, - { 3, "Pre-emptive priority"}, - { 0, NULL } + { 0, "No priority (un-queued)"}, + { 1, "Normal priority"}, + { 2, "High priority"}, + { 3, "Pre-emptive priority"}, + { 0, NULL } }; /* 3GPP 29.414 RTP Multiplexing */ static const value_string rtcp_app_mux_selection_vals[] = { - { 0, "No multiplexing applied"}, - { 1, "Multiplexing without RTP header compression applied"}, - { 2, "Multiplexing with RTP header compression applied"}, - { 3, "Reserved"}, - { 0, NULL} + { 0, "No multiplexing applied"}, + { 1, "Multiplexing without RTP header compression applied"}, + { 2, "Multiplexing with RTP header compression applied"}, + { 3, "Reserved"}, + { 0, NULL} }; /* RFC 4585 and RFC 5104 */ static const value_string rtcp_rtpfb_fmt_vals[] = { - { 1, "Generic negative acknowledgement (NACK)"}, - { 3, "Temporary Maximum Media Stream Bit Rate Request (TMMBR)"}, - { 4, "Temporary Maximum Media Stream Bit Rate Notification (TMMBN)"}, - { 31, "Reserved for future extensions"}, - { 0, NULL } + { 1, "Generic negative acknowledgement (NACK)"}, + { 3, "Temporary Maximum Media Stream Bit Rate Request (TMMBR)"}, + { 4, "Temporary Maximum Media Stream Bit Rate Notification (TMMBN)"}, + { 31, "Reserved for future extensions"}, + { 0, NULL } }; static const value_string rtcp_psfb_fmt_vals[] = { - { 1, "Picture Loss Indication"}, - { 2, "Slice Loss Indication"}, - { 3, "Reference Picture Selection Indication"}, - { 4, "Full Intra Request (FIR) Command"}, - { 5, "Temporal-Spatial Trade-off Request (TSTR)"}, - { 6, "Temporal-Spatial Trade-off Notification (TSTN"}, - { 7, "Video Back Channel Message (VBCM)"}, - { 15, "Application Layer Feedback"}, - { 31, "Reserved for future extensions"}, - { 0, NULL } + { 1, "Picture Loss Indication"}, + { 2, "Slice Loss Indication"}, + { 3, "Reference Picture Selection Indication"}, + { 4, "Full Intra Request (FIR) Command"}, + { 5, "Temporal-Spatial Trade-off Request (TSTR)"}, + { 6, "Temporal-Spatial Trade-off Notification (TSTN"}, + { 7, "Video Back Channel Message (VBCM)"}, + { 15, "Application Layer Feedback"}, + { 31, "Reserved for future extensions"}, + { 0, NULL } }; /* RTCP header fields */ @@ -416,24 +416,24 @@ static int hf_rtcp_app_poc1 = -1; static int hf_rtcp_app_poc1_subtype = -1; static int hf_rtcp_app_poc1_sip_uri = -1; static int hf_rtcp_app_poc1_disp_name = -1; -static int hf_rtcp_app_poc1_priority = -1; -static int hf_rtcp_app_poc1_request_ts = -1; -static int hf_rtcp_app_poc1_stt = -1; -static int hf_rtcp_app_poc1_partic = -1; -static int hf_rtcp_app_poc1_ssrc_granted = -1; +static int hf_rtcp_app_poc1_priority = -1; +static int hf_rtcp_app_poc1_request_ts = -1; +static int hf_rtcp_app_poc1_stt = -1; +static int hf_rtcp_app_poc1_partic = -1; +static int hf_rtcp_app_poc1_ssrc_granted = -1; static int hf_rtcp_app_poc1_last_pkt_seq_no = -1; static int hf_rtcp_app_poc1_ignore_seq_no = -1; -static int hf_rtcp_app_poc1_reason_code1 = -1; -static int hf_rtcp_app_poc1_reason1_phrase = -1; -static int hf_rtcp_app_poc1_reason_code2 = -1; -static int hf_rtcp_app_poc1_new_time_request = -1; -static int hf_rtcp_app_poc1_ack_subtype = -1; -static int hf_rtcp_app_poc1_ack_reason_code = -1; -static int hf_rtcp_app_poc1_qsresp_priority = -1; -static int hf_rtcp_app_poc1_qsresp_position = -1; +static int hf_rtcp_app_poc1_reason_code1 = -1; +static int hf_rtcp_app_poc1_reason1_phrase = -1; +static int hf_rtcp_app_poc1_reason_code2 = -1; +static int hf_rtcp_app_poc1_new_time_request = -1; +static int hf_rtcp_app_poc1_ack_subtype = -1; +static int hf_rtcp_app_poc1_ack_reason_code = -1; +static int hf_rtcp_app_poc1_qsresp_priority = -1; +static int hf_rtcp_app_poc1_qsresp_position = -1; static int hf_rtcp_app_poc1_conn_content[5] = { -1, -1, -1, -1, -1 }; -static int hf_rtcp_app_poc1_conn_session_type = -1; -static int hf_rtcp_app_poc1_conn_add_ind_mao = -1; +static int hf_rtcp_app_poc1_conn_session_type = -1; +static int hf_rtcp_app_poc1_conn_add_ind_mao = -1; static int hf_rtcp_app_poc1_conn_sdes_items[5] = { -1, -1, -1, -1, -1 }; static int hf_rtcp_app_mux = -1; static int hf_rtcp_app_mux_mux = -1; @@ -535,31 +535,31 @@ static int hf_rtcp_roundtrip_delay = -1; /* RTCP fields defining a sub tree */ -static gint ett_rtcp = -1; -static gint ett_rtcp_sr = -1; -static gint ett_rtcp_rr = -1; -static gint ett_rtcp_sdes = -1; -static gint ett_rtcp_bye = -1; -static gint ett_rtcp_app = -1; -static gint ett_rtcp_rtpfb = -1; -static gint ett_rtcp_psfb = -1; -static gint ett_rtcp_xr = -1; -static gint ett_rtcp_fir = -1; -static gint ett_rtcp_nack = -1; -static gint ett_ssrc = -1; -static gint ett_ssrc_item = -1; -static gint ett_ssrc_ext_high = -1; -static gint ett_sdes = -1; -static gint ett_sdes_item = -1; -static gint ett_PoC1 = -1; -static gint ett_mux = -1; -static gint ett_rtcp_setup = -1; -static gint ett_rtcp_roundtrip_delay = -1; +static gint ett_rtcp = -1; +static gint ett_rtcp_sr = -1; +static gint ett_rtcp_rr = -1; +static gint ett_rtcp_sdes = -1; +static gint ett_rtcp_bye = -1; +static gint ett_rtcp_app = -1; +static gint ett_rtcp_rtpfb = -1; +static gint ett_rtcp_psfb = -1; +static gint ett_rtcp_xr = -1; +static gint ett_rtcp_fir = -1; +static gint ett_rtcp_nack = -1; +static gint ett_ssrc = -1; +static gint ett_ssrc_item = -1; +static gint ett_ssrc_ext_high = -1; +static gint ett_sdes = -1; +static gint ett_sdes_item = -1; +static gint ett_PoC1 = -1; +static gint ett_mux = -1; +static gint ett_rtcp_setup = -1; +static gint ett_rtcp_roundtrip_delay = -1; static gint ett_xr_block = -1; static gint ett_xr_block_contents = -1; static gint ett_xr_ssrc = -1; -static gint ett_xr_loss_chunk = -1; -static gint ett_poc1_conn_contents = -1; +static gint ett_xr_loss_chunk = -1; +static gint ett_poc1_conn_contents = -1; static gint ett_rtcp_nack_blp = -1; /* Protocol registration */ void proto_register_rtcp(void); @@ -598,66 +598,66 @@ void srtcp_add_address( packet_info *pinfo, const gchar *setup_method, guint32 setup_frame_number, struct srtp_info *srtcp_info) { - address null_addr; - conversation_t* p_conv; - struct _rtcp_conversation_info *p_conv_data = NULL; - - /* - * If this isn't the first time this packet has been processed, - * we've already done this work, so we don't need to do it - * again. - */ - if (pinfo->fd->flags.visited) - { - return; - } + address null_addr; + conversation_t* p_conv; + struct _rtcp_conversation_info *p_conv_data = NULL; + + /* + * If this isn't the first time this packet has been processed, + * we've already done this work, so we don't need to do it + * again. + */ + if (pinfo->fd->flags.visited) + { + return; + } #ifdef DEBUG - printf("#%u: %srtcp_add_address(%s, %u, %u, %s, %u\n", pinfo->fd->num, (srtcp_info)?"s":"", ep_address_to_str(addr), port, other_port, setup_method, setup_frame_number); + printf("#%u: %srtcp_add_address(%s, %u, %u, %s, %u\n", pinfo->fd->num, (srtcp_info)?"s":"", ep_address_to_str(addr), port, other_port, setup_method, setup_frame_number); #endif - SET_ADDRESS(&null_addr, AT_NONE, 0, NULL); - - /* - * Check if the ip address and port combination is not - * already registered as a conversation. - */ - p_conv = find_conversation( pinfo->fd->num, addr, &null_addr, PT_UDP, port, other_port, - NO_ADDR_B | (!other_port ? NO_PORT_B : 0)); - - /* - * If not, create a new conversation. - */ - if ( ! p_conv ) { - p_conv = conversation_new( pinfo->fd->num, addr, &null_addr, PT_UDP, - (guint32)port, (guint32)other_port, - NO_ADDR2 | (!other_port ? NO_PORT2 : 0)); - } - - /* Set dissector */ - conversation_set_dissector(p_conv, rtcp_handle); - - /* - * Check if the conversation has data associated with it. - */ - p_conv_data = conversation_get_proto_data(p_conv, proto_rtcp); - - /* - * If not, add a new data item. - */ - if ( ! p_conv_data ) { - /* Create conversation data */ - p_conv_data = se_alloc0(sizeof(struct _rtcp_conversation_info)); - conversation_add_proto_data(p_conv, proto_rtcp, p_conv_data); - } - - /* - * Update the conversation data. - */ - p_conv_data->setup_method_set = TRUE; - g_strlcpy(p_conv_data->setup_method, setup_method, MAX_RTCP_SETUP_METHOD_SIZE); - p_conv_data->setup_frame_number = setup_frame_number; - p_conv_data->srtcp_info = srtcp_info; + SET_ADDRESS(&null_addr, AT_NONE, 0, NULL); + + /* + * Check if the ip address and port combination is not + * already registered as a conversation. + */ + p_conv = find_conversation( pinfo->fd->num, addr, &null_addr, PT_UDP, port, other_port, + NO_ADDR_B | (!other_port ? NO_PORT_B : 0)); + + /* + * If not, create a new conversation. + */ + if ( ! p_conv ) { + p_conv = conversation_new( pinfo->fd->num, addr, &null_addr, PT_UDP, + (guint32)port, (guint32)other_port, + NO_ADDR2 | (!other_port ? NO_PORT2 : 0)); + } + + /* Set dissector */ + conversation_set_dissector(p_conv, rtcp_handle); + + /* + * Check if the conversation has data associated with it. + */ + p_conv_data = conversation_get_proto_data(p_conv, proto_rtcp); + + /* + * If not, add a new data item. + */ + if ( ! p_conv_data ) { + /* Create conversation data */ + p_conv_data = se_alloc0(sizeof(struct _rtcp_conversation_info)); + conversation_add_proto_data(p_conv, proto_rtcp, p_conv_data); + } + + /* + * Update the conversation data. + */ + p_conv_data->setup_method_set = TRUE; + g_strlcpy(p_conv_data->setup_method, setup_method, MAX_RTCP_SETUP_METHOD_SIZE); + p_conv_data->setup_frame_number = setup_frame_number; + p_conv_data->srtcp_info = srtcp_info; } /* Set up an RTCP conversation using the info given */ @@ -666,104 +666,104 @@ void rtcp_add_address( packet_info *pinfo, int other_port, const gchar *setup_method, guint32 setup_frame_number) { - srtcp_add_address(pinfo, addr, port, other_port, setup_method, setup_frame_number, NULL); + srtcp_add_address(pinfo, addr, port, other_port, setup_method, setup_frame_number, NULL); } static gboolean dissect_rtcp_heur( tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree ) { - unsigned int offset = 0; - unsigned int first_byte; - unsigned int packet_type; - - /* This is a heuristic dissector, which means we get all the UDP - * traffic not sent to a known dissector and not claimed by - * a heuristic dissector called before us! - */ - - if (!global_rtcp_heur) - { - return FALSE; - } - - /* Was it sent to an odd-numbered port? */ - if ((pinfo->destport % 2) == 0) - { - return FALSE; /* no */ - } - - /* Look at first byte */ - first_byte = tvb_get_guint8(tvb, offset); - - /* Are version bits set to 2? */ - if (((first_byte & 0xC0) >> 6) != 2) - { - return FALSE; - } - - /* Look at packet type */ - packet_type = tvb_get_guint8(tvb, offset + 1); - - /* First packet within compound packet is supposed to be a sender - or receiver report. + unsigned int offset = 0; + unsigned int first_byte; + unsigned int packet_type; + + /* This is a heuristic dissector, which means we get all the UDP + * traffic not sent to a known dissector and not claimed by + * a heuristic dissector called before us! + */ + + if (!global_rtcp_heur) + { + return FALSE; + } + + /* Was it sent to an odd-numbered port? */ + if ((pinfo->destport % 2) == 0) + { + return FALSE; /* no */ + } + + /* Look at first byte */ + first_byte = tvb_get_guint8(tvb, offset); + + /* Are version bits set to 2? */ + if (((first_byte & 0xC0) >> 6) != 2) + { + return FALSE; + } + + /* Look at packet type */ + packet_type = tvb_get_guint8(tvb, offset + 1); + + /* First packet within compound packet is supposed to be a sender + or receiver report. - allow BYE because this happens anyway - allow APP because TBCP ("PoC1") packets aren't compound... */ - if (!((packet_type == RTCP_SR) || (packet_type == RTCP_RR) || - (packet_type == RTCP_BYE) || (packet_type == RTCP_APP))) - { - return FALSE; - } - - /* Overall length must be a multiple of 4 bytes */ - if (tvb_reported_length(tvb) % 4) - { - return FALSE; - } - - /* OK, dissect as RTCP */ - dissect_rtcp(tvb, pinfo, tree); - return TRUE; + if (!((packet_type == RTCP_SR) || (packet_type == RTCP_RR) || + (packet_type == RTCP_BYE) || (packet_type == RTCP_APP))) + { + return FALSE; + } + + /* Overall length must be a multiple of 4 bytes */ + if (tvb_reported_length(tvb) % 4) + { + return FALSE; + } + + /* OK, dissect as RTCP */ + dissect_rtcp(tvb, pinfo, tree); + return TRUE; } /* Dissect the length field. Append to this field text indicating the number of actual bytes this translates to (i.e. (raw value + 1) * 4) */ int dissect_rtcp_length_field( proto_tree *tree, tvbuff_t *tvb, int offset) { - proto_item *ti; - unsigned short raw_length = tvb_get_ntohs( tvb, offset ); - ti = proto_tree_add_item( tree, hf_rtcp_length, tvb, offset, 2, ENC_BIG_ENDIAN); - proto_item_append_text(ti, " (%u bytes)", (raw_length+1)*4); - offset += 2; - return offset; + proto_item *ti; + unsigned short raw_length = tvb_get_ntohs( tvb, offset ); + ti = proto_tree_add_item( tree, hf_rtcp_length, tvb, offset, 2, ENC_BIG_ENDIAN); + proto_item_append_text(ti, " (%u bytes)", (raw_length+1)*4); + offset += 2; + return offset; } static int dissect_rtcp_nack( tvbuff_t *tvb, int offset, proto_tree *tree ) { - /* Packet type = FIR (H261) */ - proto_tree_add_item( tree, hf_rtcp_rc, tvb, offset, 1, ENC_BIG_ENDIAN ); - offset++; - /* Packet type, 8 bits = APP */ - proto_tree_add_item( tree, hf_rtcp_pt, tvb, offset, 1, ENC_BIG_ENDIAN ); - offset++; + /* Packet type = FIR (H261) */ + proto_tree_add_item( tree, hf_rtcp_rc, tvb, offset, 1, ENC_BIG_ENDIAN ); + offset++; + /* Packet type, 8 bits = APP */ + proto_tree_add_item( tree, hf_rtcp_pt, tvb, offset, 1, ENC_BIG_ENDIAN ); + offset++; - /* Packet length in 32 bit words minus one */ - offset = dissect_rtcp_length_field(tree, tvb, offset); + /* Packet length in 32 bit words minus one */ + offset = dissect_rtcp_length_field(tree, tvb, offset); - /* SSRC */ - proto_tree_add_item( tree, hf_rtcp_ssrc_source, tvb, offset, 4, ENC_BIG_ENDIAN ); - offset += 4; + /* SSRC */ + proto_tree_add_item( tree, hf_rtcp_ssrc_source, tvb, offset, 4, ENC_BIG_ENDIAN ); + offset += 4; - /* FSN, 16 bits */ - proto_tree_add_item( tree, hf_rtcp_fsn, tvb, offset, 2, ENC_BIG_ENDIAN ); - offset += 2; + /* FSN, 16 bits */ + proto_tree_add_item( tree, hf_rtcp_fsn, tvb, offset, 2, ENC_BIG_ENDIAN ); + offset += 2; - /* BLP, 16 bits */ - proto_tree_add_item( tree, hf_rtcp_blp, tvb, offset, 2, ENC_BIG_ENDIAN ); - offset += 2; + /* BLP, 16 bits */ + proto_tree_add_item( tree, hf_rtcp_blp, tvb, offset, 2, ENC_BIG_ENDIAN ); + offset += 2; - return offset; + return offset; } static int @@ -778,17 +778,17 @@ dissect_rtcp_rtpfb_tmmbr( tvbuff_t *tvb, int offset, proto_tree *rtcp_tree, prot if (is_notification == 1) { ti = proto_tree_add_text( rtcp_tree, tvb, offset, 8, "TMMBN %d", num_fci ); } else { - ti = proto_tree_add_text( rtcp_tree, tvb, offset, 8, "TMMBR %d", num_fci ); + ti = proto_tree_add_text( rtcp_tree, tvb, offset, 8, "TMMBR %d", num_fci ); } - fci_tree = proto_item_add_subtree( ti, ett_ssrc ); + fci_tree = proto_item_add_subtree( ti, ett_ssrc ); /* SSRC 32 bit*/ proto_tree_add_item( fci_tree, hf_rtcp_rtpfb_tmbbr_fci_ssrc, tvb, offset, 4, ENC_BIG_ENDIAN ); offset += 4; /* Exp 6 bit*/ proto_tree_add_item( fci_tree, hf_rtcp_rtpfb_tmbbr_fci_exp, tvb, offset, 1, ENC_BIG_ENDIAN ); exp = (tvb_get_guint8(tvb, offset) & 0xfc) >> 2; - /* Mantissa 17 bit*/ + /* Mantissa 17 bit*/ proto_tree_add_item( fci_tree, hf_rtcp_rtpfb_tmbbr_fci_mantissa, tvb, offset, 3, ENC_BIG_ENDIAN ); mantissa = (tvb_get_ntohl( tvb, offset) & 0x3fffe00) >> 9; bitrate = mantissa << exp; @@ -799,8 +799,8 @@ dissect_rtcp_rtpfb_tmmbr( tvbuff_t *tvb, int offset, proto_tree *rtcp_tree, prot offset += 1; if (top_item != NULL) { - proto_item_append_text(top_item, ": TMMBR: %u", bitrate); - } + proto_item_append_text(top_item, ": TMMBR: %u", bitrate); + } return offset; } @@ -817,37 +817,37 @@ dissect_rtcp_rtpfb_nack( tvbuff_t *tvb, int offset, proto_tree *rtcp_tree, proto proto_item *ti = (proto_item*) NULL; proto_tree_add_item(rtcp_tree, hf_rtcp_rtpfb_nack_pid, tvb, offset, 2, ENC_BIG_ENDIAN); - rtcp_rtpfb_nack_pid = tvb_get_ntohs(tvb, offset); + rtcp_rtpfb_nack_pid = tvb_get_ntohs(tvb, offset); offset += 2; ti = proto_tree_add_item(rtcp_tree, hf_rtcp_rtpfb_nack_blp, tvb, offset, 2, ENC_BIG_ENDIAN); proto_item_set_text(ti, "RTCP Transport Feedback NACK BLP: "); - rtcp_rtpfb_nack_blp = tvb_get_ntohs(tvb, offset); - bitfield_tree = proto_item_add_subtree( ti, ett_rtcp_nack_blp); - nack_num_frames_lost ++; - if (rtcp_rtpfb_nack_blp) { - for (i = 0; i < 16; i ++) { - g_snprintf(strbuf, 64, "Frame %d also lost", rtcp_rtpfb_nack_pid + i + 1); - proto_tree_add_text(bitfield_tree, tvb, offset, 2, "%s", - decode_boolean_bitfield(rtcp_rtpfb_nack_blp, (1<cinfo, COL_INFO,"(%s) %s",ascii_name, - val_to_str(rtcp_subtype,rtcp_app_poc1_floor_cnt_type_vals,"unknown (%u)") ); - offset += 4; - packet_len -= 4; - app_length = app_length -8; - if ( packet_len == 0 ) - return offset; /* No more data */ - /* Applications specific data */ - if ( padding ) { - /* If there's padding present, we have to remove that from the data part - * The last octet of the packet contains the length of the padding - */ - packet_len -= tvb_get_guint8( tvb, offset + packet_len - 1 ); - } - /* Create a subtree for the PoC1 Application items; we don't yet know - the length */ - - /* Top-level poc tree */ - PoC1_item = proto_tree_add_item(tree, hf_rtcp_app_poc1, tvb, offset, packet_len, ENC_NA); - PoC1_tree = proto_item_add_subtree( PoC1_item, ett_PoC1 ); - - /* Dissect it according to its subtype */ - switch ( rtcp_subtype ) { - - case TBCP_BURST_REQUEST: - { - guint8 code; - guint16 priority; - - /* Both items here are optional */ - if (tvb_reported_length_remaining( tvb, offset) == 0) - { - return offset; - } - - /* Look for a code in the first byte */ - code = tvb_get_guint8(tvb, offset); - offset += 1; - packet_len -=1; - - /* Priority (optional) */ - if (code == 102) - { - item_len = tvb_get_guint8(tvb, offset); - offset += 1; - packet_len -= 1; - if (item_len != 2) /* SHALL be 2 */ - return offset; - - priority = tvb_get_ntohs(tvb, offset); - proto_tree_add_item(PoC1_tree, hf_rtcp_app_poc1_priority, tvb, offset, 2, ENC_BIG_ENDIAN ); - offset += 2; - packet_len -= 2; - - col_append_fstr(pinfo->cinfo, COL_INFO, - " \"%s\"", - val_to_str(priority, - rtcp_app_poc1_qsresp_priority_vals, - "Unknown")); - - /* Look for (optional) next code */ - if (tvb_reported_length_remaining( tvb, offset) == 0) - { - return offset; - } - code = tvb_get_guint8(tvb, offset); - offset += 1; - packet_len -=1; - - } - - /* Request timestamp (optional) */ - if (code == 103) - { - const gchar *buff; - - item_len = tvb_get_guint8(tvb, offset); - offset += 1; - packet_len -= 1; - if (item_len != 8) /* SHALL be 8 */ - return offset; - - proto_tree_add_item(PoC1_tree, hf_rtcp_app_poc1_request_ts, - tvb, offset, 8, ENC_TIME_NTP|ENC_BIG_ENDIAN); - buff = tvb_ntp_fmt_ts(tvb, offset); - - offset += 8; - packet_len -=8; - - col_append_fstr(pinfo->cinfo, COL_INFO, " ts=\"%s\"", buff); - } - } - break; - - case TBCP_BURST_GRANTED: - { - proto_item *ti; - guint16 stop_talking_time; - guint16 participants; - - /* Stop talking timer (now mandatory) */ - t2timer_code = tvb_get_guint8(tvb, offset); - offset += 1; - packet_len -=1; - if (t2timer_code != 101) /* SHALL be 101 */ - return offset; - - item_len = tvb_get_guint8(tvb, offset); - offset += 1; - packet_len -= 1; - if (item_len != 2) /* SHALL be 2 */ - return offset; - - stop_talking_time = tvb_get_ntohs(tvb, offset); - ti = proto_tree_add_item(PoC1_tree, hf_rtcp_app_poc1_stt, tvb, offset, 2, ENC_BIG_ENDIAN ); - - /* Append text with meanings of value */ - switch (stop_talking_time) - { - case 0: - proto_item_append_text(ti, " unknown"); - break; - case 65535: - proto_item_append_text(ti, " infinity"); - break; - default: - proto_item_append_text(ti, " seconds"); - break; - } - offset += item_len; - packet_len -= item_len; - - col_append_fstr(pinfo->cinfo, COL_INFO, " stop-talking-time=%u", - stop_talking_time); - - /* Participants (optional) */ - if (tvb_reported_length_remaining( tvb, offset) == 0) - { - return offset; - } - participants_code = tvb_get_guint8(tvb, offset); - offset += 1; - packet_len -=1; - if (participants_code != 100) /* SHALL be 100 */ - return offset; - - item_len = tvb_get_guint8(tvb, offset); - offset += 1; - packet_len -= 1; - if (item_len != 2) /* SHALL be 2 */ - return offset; - - participants = tvb_get_ntohs(tvb, offset); - ti = proto_tree_add_item(PoC1_tree, hf_rtcp_app_poc1_partic, tvb, offset, 2, ENC_BIG_ENDIAN ); - - /* Append text with meanings of extreme values */ - switch (participants) - { - case 0: - proto_item_append_text(ti, " (not known)"); - break; - case 65535: - proto_item_append_text(ti, " (or more)"); - break; - default: - break; - } - offset += item_len; - packet_len -= item_len; - - col_append_fstr(pinfo->cinfo, COL_INFO, " participants=%u", - participants); - } - break; - - case TBCP_BURST_TAKEN_EXPECT_NO_REPLY: - case TBCP_BURST_TAKEN_EXPECT_REPLY: - { - guint16 participants; - proto_item *ti; - - /* SSRC of PoC client */ - proto_tree_add_item(PoC1_tree, hf_rtcp_app_poc1_ssrc_granted, tvb, offset, 4, ENC_BIG_ENDIAN ); - offset += 4; - packet_len -= 4; - - /* SDES type (must be CNAME) */ - sdes_type = tvb_get_guint8( tvb, offset ); - proto_tree_add_item( PoC1_tree, hf_rtcp_sdes_type, tvb, offset, 1, ENC_BIG_ENDIAN ); - offset++; - packet_len--; - if (sdes_type != RTCP_SDES_CNAME) - { - return offset; - } - - /* SIP URI */ - item_len = tvb_get_guint8( tvb, offset ); - /* Item len of 1 because its an FT_UINT_STRING... */ - proto_tree_add_item(PoC1_tree, hf_rtcp_app_poc1_sip_uri, - tvb, offset, 1, ENC_ASCII|ENC_BIG_ENDIAN ); - offset++; - - col_append_fstr(pinfo->cinfo, COL_INFO, " CNAME=\"%s\"", - tvb_get_ephemeral_string(tvb, offset, item_len)); - - offset += item_len; - packet_len = packet_len - item_len - 1; - - /* In the application dependent data, the TBCP Talk Burst Taken message SHALL carry - * a SSRC field and SDES items, CNAME and MAY carry SDES item NAME to identify the - * PoC Client that has been granted permission to send a Talk Burst. - * - * The SDES item NAME SHALL be included if it is known by the PoC Server. - * Therefore the length of the packet will vary depending on number of SDES items - * and the size of the SDES items. - */ - if ( packet_len == 0 ) - return offset; - - /* SDES type (must be NAME if present) */ - sdes_type = tvb_get_guint8( tvb, offset ); - if (sdes_type == RTCP_SDES_NAME) { - proto_tree_add_item( PoC1_tree, hf_rtcp_sdes_type, tvb, offset, 1, ENC_BIG_ENDIAN ); - offset++; - packet_len--; - - /* Display name */ - item_len = tvb_get_guint8( tvb, offset ); - /* Item len of 1 because its an FT_UINT_STRING... */ - proto_tree_add_item(PoC1_tree, hf_rtcp_app_poc1_disp_name, - tvb, offset, 1, ENC_ASCII|ENC_BIG_ENDIAN); - offset++; - - col_append_fstr(pinfo->cinfo, COL_INFO, " DISPLAY-NAME=\"%s\"", - tvb_get_ephemeral_string(tvb, offset, item_len)); - - offset += item_len; - packet_len = packet_len - item_len - 1; - - if (packet_len == 0) { - return offset; - } - - /* Move onto next 4-byte boundary */ - if (offset % 4) { - int padding2 = (4-(offset%4)); - offset += padding2; - packet_len -= padding2; - } - } - - /* Participants (optional) */ - if (tvb_reported_length_remaining( tvb, offset) == 0) { - return offset; - } - participants_code = tvb_get_guint8(tvb, offset); - offset += 1; - packet_len -=1; - if (participants_code != 100) { /* SHALL be 100 */ - return offset; - } - item_len = tvb_get_guint8(tvb, offset); - offset += 1; - packet_len -= 1; - if (item_len != 2) { /* SHALL be 2 */ - return offset; - } - - participants = tvb_get_ntohs(tvb, offset); - ti = proto_tree_add_item(PoC1_tree, hf_rtcp_app_poc1_partic, tvb, offset, 2, ENC_BIG_ENDIAN ); - - /* Append text with meanings of extreme values */ - switch (participants) { - case 0: - proto_item_append_text(ti, " (not known)"); - break; - case 65535: - proto_item_append_text(ti, " (or more)"); - break; - default: - break; - } - - col_append_fstr(pinfo->cinfo, COL_INFO, " Participants=%u", - participants); - offset += item_len; - packet_len -= item_len; - } - break; - - case TBCP_BURST_DENY: - { - guint8 reason_code; - - /* Reason code */ - reason_code = tvb_get_guint8(tvb, offset); - proto_tree_add_item( PoC1_tree, hf_rtcp_app_poc1_reason_code1, tvb, offset, 1, ENC_BIG_ENDIAN ); - offset++; - packet_len--; - - col_append_fstr(pinfo->cinfo, COL_INFO, " reason-code=\"%s\"", - val_to_str(reason_code, - rtcp_app_poc1_reason_code1_vals, - "Unknown")); - - /* Reason phrase */ - item_len = tvb_get_guint8( tvb, offset ); - if ( item_len != 0 ) - proto_tree_add_item( PoC1_tree, hf_rtcp_app_poc1_reason1_phrase, tvb, offset, 1, ENC_ASCII|ENC_BIG_ENDIAN ); - - offset += (item_len+1); - packet_len -= (item_len+1); - } - break; - - case TBCP_BURST_RELEASE: - { - guint16 last_seq_no; - /*guint16 ignore_last_seq_no;*/ - - /* Sequence number of last RTP packet in burst */ - proto_tree_add_item( PoC1_tree, hf_rtcp_app_poc1_last_pkt_seq_no, tvb, offset, 2, ENC_BIG_ENDIAN ); - last_seq_no = tvb_get_ntohs(tvb, offset); - - /* Bit 16 is ignore flag */ - offset += 2; - proto_tree_add_item(PoC1_tree, hf_rtcp_app_poc1_ignore_seq_no, tvb, offset, 2, ENC_BIG_ENDIAN ); - /*ignore_last_seq_no = (tvb_get_ntohs(tvb, offset) & 0x8000);*/ + unsigned int counter = 0; + char ascii_name[5]; + guint sdes_type = 0; + guint item_len = 0; + proto_tree *PoC1_tree; + proto_item *PoC1_item; - /* XXX: Was the intention to also show the "ignore_last_seq_no' flag in COL_INFO ? */ - col_append_fstr(pinfo->cinfo, COL_INFO, " last_rtp_seq_no=%u", - last_seq_no); - - /* 15 bits of padding follows */ - - offset += 2; - packet_len-=4; - } - break; - - case TBCP_BURST_IDLE: - break; - - case TBCP_BURST_REVOKE: - { - /* Reason code */ - guint16 reason_code = tvb_get_ntohs(tvb, offset); - proto_tree_add_item( PoC1_tree, hf_rtcp_app_poc1_reason_code2, tvb, offset, 2, ENC_BIG_ENDIAN ); - - /* The meaning of this field depends upon the reason code... */ - switch (reason_code) - { - case 1: /* Only one user */ - /* No additional info */ - break; - case 2: /* Talk burst too long */ - /* Additional info is 16 bits with time (in seconds) client can request */ - proto_tree_add_item( PoC1_tree, hf_rtcp_app_poc1_new_time_request, tvb, offset + 2, 2, ENC_BIG_ENDIAN ); - break; - case 3: /* No permission */ - /* No additional info */ - break; - case 4: /* Pre-empted */ - /* No additional info */ - break; - } - - col_append_fstr(pinfo->cinfo, COL_INFO, " reason-code=\"%s\"", - val_to_str(reason_code, - rtcp_app_poc1_reason_code2_vals, - "Unknown")); - offset += 4; - packet_len-=4; - } - break; - - case TBCP_BURST_ACKNOWLEDGMENT: - { - guint8 subtype; - - /* Code of message being acknowledged */ - subtype = (tvb_get_guint8(tvb, offset) & 0xf8) >> 3; - proto_tree_add_item( PoC1_tree, hf_rtcp_app_poc1_ack_subtype, tvb, offset, 1, ENC_BIG_ENDIAN ); - - col_append_fstr(pinfo->cinfo, COL_INFO, " (for %s)", - val_to_str(subtype, - rtcp_app_poc1_floor_cnt_type_vals, - "Unknown")); - - /* Reason code only seen if subtype was Connect */ - if (subtype == TBCP_CONNECT) - { - proto_tree_add_item( PoC1_tree, hf_rtcp_app_poc1_ack_reason_code, tvb, offset, 2, ENC_BIG_ENDIAN ); - } - - /* 16 bits of padding follow */ - offset += 4; - packet_len -= 4; - } - break; - - case TBCP_QUEUE_STATUS_REQUEST: - break; - - case TBCP_QUEUE_STATUS_RESPONSE: - { - guint16 position; - proto_item *ti; - - /* Priority */ - proto_tree_add_item( PoC1_tree, hf_rtcp_app_poc1_qsresp_priority, tvb, offset, 1, ENC_BIG_ENDIAN ); - - /* Queue position. 65535 indicates 'position not available' */ - position = tvb_get_ntohs(tvb, offset+1); - ti = proto_tree_add_item( PoC1_tree, hf_rtcp_app_poc1_qsresp_position, tvb, offset+1, 2, ENC_BIG_ENDIAN ); - if (position == 0) - { - proto_item_append_text(ti, " (client is un-queued)"); - } - if (position == 65535) - { - proto_item_append_text(ti, " (position not available)"); - } - - col_append_fstr(pinfo->cinfo, COL_INFO, " position=%u", position); - - /* 1 bytes of padding follows */ - - offset += 4; - packet_len -= 4; - } - break; - - case TBCP_DISCONNECT: - break; - - case TBCP_CONNECT: - { - proto_item *content = proto_tree_add_text(PoC1_tree, tvb, offset, 2, "SDES item content"); - gboolean contents[5]; - unsigned int i; - guint8 items_set = 0; - - proto_tree *content_tree = proto_item_add_subtree(content, ett_poc1_conn_contents); - guint16 items_field = tvb_get_ntohs(tvb, offset ); - - /* Dissect each defined bit flag in the SDES item content */ - for ( i = 0; i < 5; i++) - { - proto_tree_add_item( content_tree, hf_rtcp_app_poc1_conn_content[i], tvb, offset, 2, FALSE ); - contents[i] = items_field & (1 << (15-i)); - if (contents[i]) ++items_set; - } - - /* Show how many flags were set */ - proto_item_append_text(content, " (%u items)", items_set); - - /* Session type */ - proto_tree_add_item( PoC1_tree, hf_rtcp_app_poc1_conn_session_type, tvb, offset + 2, 1, ENC_BIG_ENDIAN ); - - /* Additional indications */ - proto_tree_add_item( PoC1_tree, hf_rtcp_app_poc1_conn_add_ind_mao, tvb, offset + 3, 1, ENC_BIG_ENDIAN ); - - offset += 4; - packet_len -= 4; - - /* One SDES item for every set flag in contents array */ - for ( i = 0; i < array_length(contents); ++i ) { - if ( contents[i] ) { - guint /*sdes_type2,*/ sdes_len2; - /* (sdes_type2 not currently used...). Could complain if type - doesn't match expected for item... */ - /*sdes_type2 = tvb_get_guint8( tvb, offset );*/ - offset += 1; - sdes_len2 = tvb_get_guint8( tvb, offset ); - - /* Add SDES field indicated as present */ - proto_tree_add_item( PoC1_tree, hf_rtcp_app_poc1_conn_sdes_items[i], tvb, offset, 1, FALSE ); - - /* Move past field */ - offset += sdes_len2 + 1; - packet_len -= (sdes_len2 + 2); - } - } - break; - } - - default: - break; - } - offset += packet_len; - return offset; - } - else if ( g_ascii_strncasecmp(ascii_name, mux_app_name_str,4 ) == 0 ) - { - /* 3GPP Nb protocol extension (3GPP 29.414) for RTP Multiplexing */ - col_append_fstr(pinfo->cinfo, COL_INFO,"( %s ) subtype=%u",ascii_name, rtcp_subtype); - offset += 4; - packet_len -= 4; - /* Applications specific data */ - if ( padding ) { - /* If there's padding present, we have to remove that from the data part - * The last octet of the packet contains the length of the padding - */ - packet_len -= tvb_get_guint8( tvb, offset + packet_len - 1 ); - } - if (packet_len == 4) - { - guint16 local_port = 0; - - proto_item* mux_item = proto_tree_add_item(tree, hf_rtcp_app_mux, tvb, offset, packet_len, ENC_NA); - proto_tree* mux_tree = proto_item_add_subtree( mux_item, ett_mux ); - proto_tree_add_item( mux_tree, hf_rtcp_app_mux_mux, tvb, offset, 1, ENC_BIG_ENDIAN ); - proto_tree_add_item( mux_tree, hf_rtcp_app_mux_cp, tvb, offset, 1, ENC_BIG_ENDIAN ); - proto_tree_add_item( mux_tree, hf_rtcp_app_mux_selection, tvb, offset, 1, ENC_BIG_ENDIAN ); - local_port = tvb_get_ntohs( tvb, offset+2 ); - proto_tree_add_uint( mux_tree, hf_rtcp_app_mux_localmuxport, tvb, offset+2, 2, local_port*2 ); - } - else - { - /* fall back to just showing the data if it's the wrong length */ - proto_tree_add_item( tree, hf_rtcp_app_data, tvb, offset, packet_len, ENC_NA ); - } - offset += packet_len; - - return offset; - } - else - { - tvbuff_t *next_tvb; /* tvb to pass to subdissector */ - /* tvb == Pass the entire APP payload so the subdissector can have access to the - * entire data set - */ - next_tvb = tvb_new_subset(tvb, offset-8, app_length+4, app_length+4); - /* look for registered sub-dissectors */ - if (dissector_try_string(rtcp_dissector_table, ascii_name, next_tvb, pinfo, tree)) { - /* found subdissector - return tvb_length */ - offset += 4; - packet_len -= 4; - if ( padding ) { - /* If there's padding present, we have to remove that from the data part - * The last octet of the packet contains the length of the padding - */ - packet_len -= tvb_get_guint8( tvb, offset + packet_len - 1 ); - } - offset += packet_len; - return offset; - } - else - { - /* Unhandled application type, just show app name and raw data */ - col_append_fstr(pinfo->cinfo, COL_INFO,"( %s ) subtype=%u",ascii_name, rtcp_subtype); - offset += 4; - packet_len -= 4; - /* Applications specific data */ - if ( padding ) { - /* If there's padding present, we have to remove that from the data part - * The last octet of the packet contains the length of the padding - */ - packet_len -= tvb_get_guint8( tvb, offset + packet_len - 1 ); - } - proto_tree_add_item( tree, hf_rtcp_app_data, tvb, offset, packet_len, ENC_NA ); - offset += packet_len; - - return offset; - } - } + /* XXX If more application types are to be dissected it may be useful to use a table like in packet-sip.c */ + static const char poc1_app_name_str[] = "PoC1"; + static const char mux_app_name_str[] = "3GPP"; -} + /* SSRC / CSRC */ + proto_tree_add_item( tree, hf_rtcp_ssrc_source, tvb, offset, 4, ENC_BIG_ENDIAN ); + offset += 4; + packet_len -= 4; -static int -dissect_rtcp_bye( tvbuff_t *tvb, packet_info *pinfo, int offset, proto_tree *tree, - unsigned int count ) -{ - unsigned int chunk = 1; - unsigned int reason_length = 0; - gint reason_offset = 0; - char* reason_text = NULL; - - while ( chunk <= count ) { - /* source identifier, 32 bits */ - proto_tree_add_item( tree, hf_rtcp_ssrc_source, tvb, offset, 4, ENC_BIG_ENDIAN); - offset += 4; - chunk++; - } - - if ( tvb_reported_length_remaining( tvb, offset ) > 0 ) { - /* Bye reason consists of an 8 bit length l and a string with length l */ - reason_length = tvb_get_guint8( tvb, offset ); - proto_tree_add_item( tree, hf_rtcp_sdes_length, tvb, offset, 1, ENC_BIG_ENDIAN ); - offset++; - - reason_offset = offset; - reason_text = (char*)tvb_get_ephemeral_string(tvb, offset, reason_length); - proto_tree_add_string( tree, hf_rtcp_sdes_text, tvb, offset, reason_length, reason_text ); - offset += reason_length; - } - - /* BYE packet padded out if string didn't fit in previous word */ - if (offset % 4) - { - gint pad_size = (4 - (offset % 4)); - int i; - - /* Check padding */ - for (i = 0; i < pad_size; i++) - { - if ((!(tvb_offset_exists(tvb, offset + i))) || - (tvb_get_guint8(tvb, offset + i) != 0)) - { - proto_item *ti; - ti = proto_tree_add_none_format(tree, hf_rtcp_bye_reason_not_padded, - tvb, reason_offset, reason_length, - "Reason string is not NULL padded (see RFC3550, section 6.6)"); - expert_add_info_format(pinfo, ti, PI_MALFORMED, PI_WARN, - "Reason string is not NULL padded (see RFC3550, section 6.6)"); - PROTO_ITEM_SET_GENERATED(ti); - } - } - - offset += pad_size; - } - - return offset; -} + /* Application Name (ASCII) */ + for( counter = 0; counter < 4; counter++ ) + ascii_name[ counter ] = tvb_get_guint8( tvb, offset + counter ); + /* g_strlcpy( ascii_name, pd + offset, 4 ); */ + ascii_name[4] = '\0'; + proto_tree_add_string( tree, hf_rtcp_name_ascii, tvb, offset, 4, + ascii_name ); -static int -dissect_rtcp_sdes( tvbuff_t *tvb, int offset, proto_tree *tree, - unsigned int count ) -{ - unsigned int chunk = 1; - proto_item *sdes_item; - proto_tree *sdes_tree; - proto_tree *sdes_item_tree; - proto_item *ti; - int start_offset; - int items_start_offset; - guint32 ssrc; - unsigned int item_len = 0; - unsigned int sdes_type = 0; - unsigned int prefix_len = 0; - - while ( chunk <= count ) { - /* Create a subtree for this chunk; we don't yet know - the length. */ - start_offset = offset; - - ssrc = tvb_get_ntohl( tvb, offset ); - sdes_item = proto_tree_add_text(tree, tvb, offset, -1, - "Chunk %u, SSRC/CSRC 0x%X", chunk, ssrc); - sdes_tree = proto_item_add_subtree( sdes_item, ett_sdes ); - - /* SSRC_n source identifier, 32 bits */ - proto_tree_add_item( sdes_tree, hf_rtcp_ssrc_source, tvb, offset, 4, ENC_BIG_ENDIAN ); - offset += 4; - - /* Create a subtree for the SDES items; we don't yet know - the length */ - items_start_offset = offset; - ti = proto_tree_add_text(sdes_tree, tvb, offset, -1, - "SDES items" ); - sdes_item_tree = proto_item_add_subtree( ti, ett_sdes_item ); - - /* - * Not every message is ended with "null" bytes, so check for - * end of frame as well. - */ - while ( tvb_reported_length_remaining( tvb, offset ) > 0 ) { - /* ID, 8 bits */ - sdes_type = tvb_get_guint8( tvb, offset ); - proto_tree_add_item( sdes_item_tree, hf_rtcp_sdes_type, tvb, offset, 1, ENC_BIG_ENDIAN ); - offset++; - - if ( sdes_type == RTCP_SDES_END ) { - /* End of list */ - break; - } - - /* Item length, 8 bits */ - item_len = tvb_get_guint8( tvb, offset ); - proto_tree_add_item( sdes_item_tree, hf_rtcp_sdes_length, tvb, offset, 1, ENC_BIG_ENDIAN ); - offset++; - - if ( item_len != 0 ) { - if ( sdes_type == RTCP_SDES_PRIV ) { - /* PRIV adds two items between the - * SDES length and value - an 8 bit - * length giving the length of a - * "prefix string", and the string. - */ - prefix_len = tvb_get_guint8( tvb, offset ); - if ( prefix_len + 1 > item_len ) { - proto_tree_add_uint_format( sdes_item_tree, - hf_rtcp_sdes_prefix_len, tvb, - offset, 1, prefix_len, - "Prefix length: %u (bogus, must be <= %u)", - prefix_len, item_len - 1); - offset += item_len; - continue; - } - proto_tree_add_item( sdes_item_tree, hf_rtcp_sdes_prefix_len, tvb, offset, 1, ENC_BIG_ENDIAN ); - offset++; - - proto_tree_add_item( sdes_item_tree, hf_rtcp_sdes_prefix_string, tvb, offset, prefix_len, ENC_ASCII|ENC_NA ); - offset += prefix_len; - item_len -= prefix_len +1; - if ( item_len == 0 ) - continue; - } - proto_tree_add_item( sdes_item_tree, hf_rtcp_sdes_text, tvb, offset, item_len, ENC_ASCII|ENC_NA ); - offset += item_len; - } - } - - /* Set the length of the items subtree. */ - proto_item_set_len(ti, offset - items_start_offset); - - /* 32 bits = 4 bytes, so..... - * If offset % 4 != 0, we divide offset by 4, add one and then - * multiply by 4 again to reach the boundary - */ - if ( offset % 4 != 0 ) - offset = ((offset / 4) + 1 ) * 4; - - /* Set the length of this chunk. */ - proto_item_set_len(sdes_item, offset - start_offset); - - chunk++; - } - - return offset; -} + /* See if we can handle this application type */ + if ( g_ascii_strncasecmp(ascii_name, poc1_app_name_str,4 ) == 0 ) + { + /* PoC1 Application */ + guint8 t2timer_code, participants_code; + proto_item *item; + item = proto_tree_add_uint( tree, hf_rtcp_app_poc1_subtype, tvb, offset - 8, 1, rtcp_subtype ); + PROTO_ITEM_SET_GENERATED(item); + col_add_fstr(pinfo->cinfo, COL_INFO,"(%s) %s",ascii_name, + val_to_str(rtcp_subtype,rtcp_app_poc1_floor_cnt_type_vals,"unknown (%u)") ); + offset += 4; + packet_len -= 4; + app_length = app_length -8; + if ( packet_len == 0 ) + return offset; /* No more data */ + /* Applications specific data */ + if ( padding ) { + /* If there's padding present, we have to remove that from the data part + * The last octet of the packet contains the length of the padding + */ + packet_len -= tvb_get_guint8( tvb, offset + packet_len - 1 ); + } + /* Create a subtree for the PoC1 Application items; we don't yet know + the length */ -static void parse_xr_type_specific_field(tvbuff_t *tvb, gint offset, guint block_type, proto_tree *tree) -{ - guint8 flags = tvb_get_guint8(tvb, offset); + /* Top-level poc tree */ + PoC1_item = proto_tree_add_item(tree, hf_rtcp_app_poc1, tvb, offset, packet_len, ENC_NA); + PoC1_tree = proto_item_add_subtree( PoC1_item, ett_PoC1 ); - switch (block_type) { - case RTCP_XR_LOSS_RLE: - case RTCP_XR_DUP_RLE: - case RTCP_XR_PKT_RXTIMES: - proto_tree_add_item(tree, hf_rtcp_xr_thinning, tvb, offset, 1, ENC_BIG_ENDIAN); - break; + /* Dissect it according to its subtype */ + switch ( rtcp_subtype ) { - case RTCP_XR_STATS_SUMRY: - proto_tree_add_boolean(tree, hf_rtcp_xr_stats_loss_flag, tvb, offset, 1, flags); - proto_tree_add_boolean(tree, hf_rtcp_xr_stats_dup_flag, tvb, offset, 1, flags); - proto_tree_add_boolean(tree, hf_rtcp_xr_stats_jitter_flag, tvb, offset, 1, flags); - proto_tree_add_item(tree, hf_rtcp_xr_stats_ttl, tvb, offset, 1, ENC_BIG_ENDIAN); - break; + case TBCP_BURST_REQUEST: + { + guint8 code; + guint16 priority; - default: - proto_tree_add_item(tree, hf_rtcp_xr_block_specific, tvb, offset, 1, ENC_BIG_ENDIAN); - break; - } -} + /* Both items here are optional */ + if (tvb_reported_length_remaining( tvb, offset) == 0) + { + return offset; + } -static gboolean validate_xr_block_length(tvbuff_t *tvb, packet_info *pinfo, int offset, guint block_type, guint block_len, proto_tree *tree) -{ - proto_item *ti; + /* Look for a code in the first byte */ + code = tvb_get_guint8(tvb, offset); + offset += 1; + packet_len -=1; - ti = proto_tree_add_uint(tree, hf_rtcp_xr_block_length, tvb, offset, 2, block_len); - switch (block_type) { - case RTCP_XR_REF_TIME: - if (block_len != 2) - expert_add_info_format(pinfo, ti, PI_PROTOCOL, PI_WARN, - "Invalid block length, should be 2"); - return FALSE; + /* Priority (optional) */ + if (code == 102) + { + item_len = tvb_get_guint8(tvb, offset); + offset += 1; + packet_len -= 1; + if (item_len != 2) /* SHALL be 2 */ + return offset; + + priority = tvb_get_ntohs(tvb, offset); + proto_tree_add_item(PoC1_tree, hf_rtcp_app_poc1_priority, tvb, offset, 2, ENC_BIG_ENDIAN ); + offset += 2; + packet_len -= 2; + + col_append_fstr(pinfo->cinfo, COL_INFO, + " \"%s\"", + val_to_str(priority, + rtcp_app_poc1_qsresp_priority_vals, + "Unknown")); + + /* Look for (optional) next code */ + if (tvb_reported_length_remaining( tvb, offset) == 0) + { + return offset; + } + code = tvb_get_guint8(tvb, offset); + offset += 1; + packet_len -=1; - case RTCP_XR_STATS_SUMRY: - if (block_len != 9) - expert_add_info_format(pinfo, ti, PI_PROTOCOL, PI_WARN, - "Invalid block length, should be 9"); - return FALSE; + } - case RTCP_XR_VOIP_METRCS: - case RTCP_XR_BT_XNQ: - if (block_len != 8) - expert_add_info_format(pinfo, ti, PI_PROTOCOL, PI_WARN, - "Invalid block length, should be 8"); - return FALSE; + /* Request timestamp (optional) */ + if (code == 103) + { + const gchar *buff; - case RTCP_XR_IDMS: - if (block_len != 7) - expert_add_info_format(pinfo, ti, PI_PROTOCOL, PI_WARN, - "Invalid block length, should be 7"); - return FALSE; + item_len = tvb_get_guint8(tvb, offset); + offset += 1; + packet_len -= 1; + if (item_len != 8) /* SHALL be 8 */ + return offset; - default: - break; - } - return TRUE; -} + proto_tree_add_item(PoC1_tree, hf_rtcp_app_poc1_request_ts, + tvb, offset, 8, ENC_TIME_NTP|ENC_BIG_ENDIAN); + buff = tvb_ntp_fmt_ts(tvb, offset); -static int -dissect_rtcp_xr(tvbuff_t *tvb, packet_info *pinfo, int offset, proto_tree *tree, gint packet_len) -{ - guint block_num = 1; - guint temp_value = 0; /* used when checking spare bits in block type 8 */ - proto_item *item; - int hour,min,sec,msec; - guint32 tmp_ts; + offset += 8; + packet_len -=8; - /* Packet length should at least be 4 */ - if (packet_len < 4) { - proto_tree_add_text(tree, tvb, offset, packet_len, "Missing Sender SSRC"); - return offset + packet_len; - } + col_append_fstr(pinfo->cinfo, COL_INFO, " ts=\"%s\"", buff); + } + } + break; - /* SSRC */ - proto_tree_add_item( tree, hf_rtcp_ssrc_sender, tvb, offset, 4, ENC_BIG_ENDIAN ); - offset += 4; - packet_len -= 4; + case TBCP_BURST_GRANTED: + { + proto_item *ti; + guint16 stop_talking_time; + guint16 participants; + + /* Stop talking timer (now mandatory) */ + t2timer_code = tvb_get_guint8(tvb, offset); + offset += 1; + packet_len -=1; + if (t2timer_code != 101) /* SHALL be 101 */ + return offset; + + item_len = tvb_get_guint8(tvb, offset); + offset += 1; + packet_len -= 1; + if (item_len != 2) /* SHALL be 2 */ + return offset; + + stop_talking_time = tvb_get_ntohs(tvb, offset); + ti = proto_tree_add_item(PoC1_tree, hf_rtcp_app_poc1_stt, tvb, offset, 2, ENC_BIG_ENDIAN ); + + /* Append text with meanings of value */ + switch (stop_talking_time) + { + case 0: + proto_item_append_text(ti, " unknown"); + break; + case 65535: + proto_item_append_text(ti, " infinity"); + break; + default: + proto_item_append_text(ti, " seconds"); + break; + } + offset += item_len; + packet_len -= item_len; - for(;packet_len > 0; block_num++) { - guint block_type = tvb_get_guint8(tvb, offset), block_length = 0; - gint content_length = 0; - /*gboolean valid = TRUE;*/ + col_append_fstr(pinfo->cinfo, COL_INFO, " stop-talking-time=%u", + stop_talking_time); - /* Create a subtree for this block, dont know the length yet*/ - proto_item *block = proto_tree_add_text(tree, tvb, offset, -1, "Block %u", block_num); - proto_tree *xr_block_tree = proto_item_add_subtree(block, ett_xr_block); - proto_item *contents = NULL; - proto_item *content_tree = NULL; + /* Participants (optional) */ + if (tvb_reported_length_remaining( tvb, offset) == 0) + { + return offset; + } + participants_code = tvb_get_guint8(tvb, offset); + offset += 1; + packet_len -=1; + if (participants_code != 100) /* SHALL be 100 */ + return offset; + + item_len = tvb_get_guint8(tvb, offset); + offset += 1; + packet_len -= 1; + if (item_len != 2) /* SHALL be 2 */ + return offset; + + participants = tvb_get_ntohs(tvb, offset); + ti = proto_tree_add_item(PoC1_tree, hf_rtcp_app_poc1_partic, tvb, offset, 2, ENC_BIG_ENDIAN ); + + /* Append text with meanings of extreme values */ + switch (participants) + { + case 0: + proto_item_append_text(ti, " (not known)"); + break; + case 65535: + proto_item_append_text(ti, " (or more)"); + break; + default: + break; + } + offset += item_len; + packet_len -= item_len; - proto_tree_add_item(xr_block_tree, hf_rtcp_xr_block_type, tvb, offset, 1, ENC_BIG_ENDIAN); + col_append_fstr(pinfo->cinfo, COL_INFO, " participants=%u", + participants); + } + break; - if (packet_len >= 2) { - parse_xr_type_specific_field(tvb, offset + 1, block_type, xr_block_tree); - if (packet_len >= 4) { - block_length = tvb_get_ntohs(tvb, offset + 2); - /* XXX: What if FALSE return from the following ?? */ - /*valid =*/ validate_xr_block_length(tvb, pinfo, offset + 2, block_type, block_length, xr_block_tree); - } - } else { - proto_tree_add_text(xr_block_tree, tvb, offset + 1, packet_len, "Missing Required Block Headers"); - return offset + packet_len; - } + case TBCP_BURST_TAKEN_EXPECT_NO_REPLY: + case TBCP_BURST_TAKEN_EXPECT_REPLY: + { + guint16 participants; + proto_item *ti; - content_length = block_length * 4; - proto_item_set_len(block, content_length + 4); + /* SSRC of PoC client */ + proto_tree_add_item(PoC1_tree, hf_rtcp_app_poc1_ssrc_granted, tvb, offset, 4, ENC_BIG_ENDIAN ); + offset += 4; + packet_len -= 4; - if (content_length > packet_len) { - proto_tree_add_text(xr_block_tree, tvb, offset + 2, 2, "Block length is greater than packet length"); - } + /* SDES type (must be CNAME) */ + sdes_type = tvb_get_guint8( tvb, offset ); + proto_tree_add_item( PoC1_tree, hf_rtcp_sdes_type, tvb, offset, 1, ENC_BIG_ENDIAN ); + offset++; + packet_len--; + if (sdes_type != RTCP_SDES_CNAME) + { + return offset; + } - offset += 4; - packet_len -= 4; + /* SIP URI */ + item_len = tvb_get_guint8( tvb, offset ); + /* Item len of 1 because its an FT_UINT_STRING... */ + proto_tree_add_item(PoC1_tree, hf_rtcp_app_poc1_sip_uri, + tvb, offset, 1, ENC_ASCII|ENC_BIG_ENDIAN ); + offset++; - contents = proto_tree_add_text(xr_block_tree, tvb, offset, content_length, "Contents"); - content_tree = proto_item_add_subtree(contents, ett_xr_block_contents); + col_append_fstr(pinfo->cinfo, COL_INFO, " CNAME=\"%s\"", + tvb_get_ephemeral_string(tvb, offset, item_len)); - switch (block_type) { - case RTCP_XR_VOIP_METRCS: { - guint fraction_rate; + offset += item_len; + packet_len = packet_len - item_len - 1; - /* Identifier */ - proto_tree_add_item(content_tree, hf_rtcp_ssrc_source, tvb, offset, 4, ENC_BIG_ENDIAN); - offset += 4; + /* In the application dependent data, the TBCP Talk Burst Taken message SHALL carry + * a SSRC field and SDES items, CNAME and MAY carry SDES item NAME to identify the + * PoC Client that has been granted permission to send a Talk Burst. + * + * The SDES item NAME SHALL be included if it is known by the PoC Server. + * Therefore the length of the packet will vary depending on number of SDES items + * and the size of the SDES items. + */ + if ( packet_len == 0 ) + return offset; + + /* SDES type (must be NAME if present) */ + sdes_type = tvb_get_guint8( tvb, offset ); + if (sdes_type == RTCP_SDES_NAME) { + proto_tree_add_item( PoC1_tree, hf_rtcp_sdes_type, tvb, offset, 1, ENC_BIG_ENDIAN ); + offset++; + packet_len--; + + /* Display name */ + item_len = tvb_get_guint8( tvb, offset ); + /* Item len of 1 because its an FT_UINT_STRING... */ + proto_tree_add_item(PoC1_tree, hf_rtcp_app_poc1_disp_name, + tvb, offset, 1, ENC_ASCII|ENC_BIG_ENDIAN); + offset++; + + col_append_fstr(pinfo->cinfo, COL_INFO, " DISPLAY-NAME=\"%s\"", + tvb_get_ephemeral_string(tvb, offset, item_len)); + + offset += item_len; + packet_len = packet_len - item_len - 1; + + if (packet_len == 0) { + return offset; + } + + /* Move onto next 4-byte boundary */ + if (offset % 4) { + int padding2 = (4-(offset%4)); + offset += padding2; + packet_len -= padding2; + } + } - /* Loss Rate */ - fraction_rate = tvb_get_guint8(tvb, offset); - proto_tree_add_uint_format(content_tree, hf_rtcp_ssrc_fraction, tvb, offset, 1, - fraction_rate, "Fraction lost: %u / 256", fraction_rate); - offset++; + /* Participants (optional) */ + if (tvb_reported_length_remaining( tvb, offset) == 0) { + return offset; + } + participants_code = tvb_get_guint8(tvb, offset); + offset += 1; + packet_len -=1; + if (participants_code != 100) { /* SHALL be 100 */ + return offset; + } + item_len = tvb_get_guint8(tvb, offset); + offset += 1; + packet_len -= 1; + if (item_len != 2) { /* SHALL be 2 */ + return offset; + } - /* Discard Rate */ - fraction_rate = tvb_get_guint8(tvb, offset); - proto_tree_add_uint_format(content_tree, hf_rtcp_ssrc_discarded, tvb, offset, 1, - fraction_rate, "Fraction Discarded: %u / 256", fraction_rate); - offset++; + participants = tvb_get_ntohs(tvb, offset); + ti = proto_tree_add_item(PoC1_tree, hf_rtcp_app_poc1_partic, tvb, offset, 2, ENC_BIG_ENDIAN ); + + /* Append text with meanings of extreme values */ + switch (participants) { + case 0: + proto_item_append_text(ti, " (not known)"); + break; + case 65535: + proto_item_append_text(ti, " (or more)"); + break; + default: + break; + } - /* Burst Density */ - proto_tree_add_item(content_tree, hf_rtcp_xr_voip_metrics_burst_density, tvb, offset, 1, ENC_BIG_ENDIAN); - offset++; + col_append_fstr(pinfo->cinfo, COL_INFO, " Participants=%u", + participants); + offset += item_len; + packet_len -= item_len; + } + break; - /* Gap Density */ - proto_tree_add_item(content_tree, hf_rtcp_xr_voip_metrics_gap_density, tvb, offset, 1, ENC_BIG_ENDIAN); - offset++; + case TBCP_BURST_DENY: + { + guint8 reason_code; - /* Burst Duration */ - proto_tree_add_item(content_tree, hf_rtcp_xr_voip_metrics_burst_duration, tvb, offset, 2, ENC_BIG_ENDIAN); - offset += 2; + /* Reason code */ + reason_code = tvb_get_guint8(tvb, offset); + proto_tree_add_item( PoC1_tree, hf_rtcp_app_poc1_reason_code1, tvb, offset, 1, ENC_BIG_ENDIAN ); + offset++; + packet_len--; - /* Gap Duration */ - proto_tree_add_item(content_tree, hf_rtcp_xr_voip_metrics_gap_duration, tvb, offset, 2, ENC_BIG_ENDIAN); - offset += 2; + col_append_fstr(pinfo->cinfo, COL_INFO, " reason-code=\"%s\"", + val_to_str(reason_code, + rtcp_app_poc1_reason_code1_vals, + "Unknown")); - /* Round Trip Delay */ - proto_tree_add_item(content_tree, hf_rtcp_xr_voip_metrics_rtdelay, tvb, offset, 2, ENC_BIG_ENDIAN); - offset += 2; + /* Reason phrase */ + item_len = tvb_get_guint8( tvb, offset ); + if ( item_len != 0 ) + proto_tree_add_item( PoC1_tree, hf_rtcp_app_poc1_reason1_phrase, tvb, offset, 1, ENC_ASCII|ENC_BIG_ENDIAN ); - /* End System Delay */ - proto_tree_add_item(content_tree, hf_rtcp_xr_voip_metrics_esdelay, tvb, offset, 2, ENC_BIG_ENDIAN); - offset += 2; + offset += (item_len+1); + packet_len -= (item_len+1); + } + break; - /* Signal Level */ - proto_tree_add_item(content_tree, hf_rtcp_xr_voip_metrics_siglevel, tvb, offset, 1, ENC_BIG_ENDIAN); - offset++; + case TBCP_BURST_RELEASE: + { + guint16 last_seq_no; + /*guint16 ignore_last_seq_no;*/ - /* Noise Level */ - proto_tree_add_item(content_tree, hf_rtcp_xr_voip_metrics_noiselevel, tvb, offset, 1, ENC_BIG_ENDIAN); - offset++; + /* Sequence number of last RTP packet in burst */ + proto_tree_add_item( PoC1_tree, hf_rtcp_app_poc1_last_pkt_seq_no, tvb, offset, 2, ENC_BIG_ENDIAN ); + last_seq_no = tvb_get_ntohs(tvb, offset); - /* RERL */ - proto_tree_add_item(content_tree, hf_rtcp_xr_voip_metrics_rerl, tvb, offset, 1, ENC_BIG_ENDIAN); - offset++; + /* Bit 16 is ignore flag */ + offset += 2; + proto_tree_add_item(PoC1_tree, hf_rtcp_app_poc1_ignore_seq_no, tvb, offset, 2, ENC_BIG_ENDIAN ); + /*ignore_last_seq_no = (tvb_get_ntohs(tvb, offset) & 0x8000);*/ - /* GMin */ - proto_tree_add_item(content_tree, hf_rtcp_xr_voip_metrics_gmin, tvb, offset, 1, ENC_BIG_ENDIAN); - offset++; + /* XXX: Was the intention to also show the "ignore_last_seq_no' flag in COL_INFO ? */ + col_append_fstr(pinfo->cinfo, COL_INFO, " last_rtp_seq_no=%u", + last_seq_no); - /* R factor */ - proto_tree_add_item(content_tree, hf_rtcp_xr_voip_metrics_rfactor, tvb, offset, 1, ENC_BIG_ENDIAN); - offset++; + /* 15 bits of padding follows */ - /* external R Factor */ - proto_tree_add_item(content_tree, hf_rtcp_xr_voip_metrics_extrfactor, tvb, offset, 1, ENC_BIG_ENDIAN); - offset++; + offset += 2; + packet_len-=4; + } + break; - /* MOS LQ */ - proto_tree_add_float(content_tree, hf_rtcp_xr_voip_metrics_moslq, tvb, offset, 1, - (float) (tvb_get_guint8(tvb, offset) / 10.0)); - offset++; + case TBCP_BURST_IDLE: + break; - /* MOS CQ */ - proto_tree_add_float(content_tree, hf_rtcp_xr_voip_metrics_moscq, tvb, offset, 1, - (float) (tvb_get_guint8(tvb, offset) / 10.0)); - offset++; + case TBCP_BURST_REVOKE: + { + /* Reason code */ + guint16 reason_code = tvb_get_ntohs(tvb, offset); + proto_tree_add_item( PoC1_tree, hf_rtcp_app_poc1_reason_code2, tvb, offset, 2, ENC_BIG_ENDIAN ); + + /* The meaning of this field depends upon the reason code... */ + switch (reason_code) + { + case 1: /* Only one user */ + /* No additional info */ + break; + case 2: /* Talk burst too long */ + /* Additional info is 16 bits with time (in seconds) client can request */ + proto_tree_add_item( PoC1_tree, hf_rtcp_app_poc1_new_time_request, tvb, offset + 2, 2, ENC_BIG_ENDIAN ); + break; + case 3: /* No permission */ + /* No additional info */ + break; + case 4: /* Pre-empted */ + /* No additional info */ + break; + } + + col_append_fstr(pinfo->cinfo, COL_INFO, " reason-code=\"%s\"", + val_to_str(reason_code, + rtcp_app_poc1_reason_code2_vals, + "Unknown")); + offset += 4; + packet_len-=4; + } + break; - /* PLC, JB Adaptive, JB Rate */ - proto_tree_add_item(content_tree, hf_rtcp_xr_voip_metrics_plc, tvb, offset, 1, ENC_BIG_ENDIAN); - proto_tree_add_item(content_tree, hf_rtcp_xr_voip_metrics_jbadaptive, tvb, offset, 1, ENC_BIG_ENDIAN); - proto_tree_add_item(content_tree, hf_rtcp_xr_voip_metrics_jbrate, tvb, offset, 1, ENC_BIG_ENDIAN); - offset += 2; /* skip over reseved bit */ + case TBCP_BURST_ACKNOWLEDGMENT: + { + guint8 subtype; - /* JB Nominal */ - proto_tree_add_item(content_tree, hf_rtcp_xr_voip_metrics_jbnominal, tvb, offset, 2, ENC_BIG_ENDIAN); - offset += 2; + /* Code of message being acknowledged */ + subtype = (tvb_get_guint8(tvb, offset) & 0xf8) >> 3; + proto_tree_add_item( PoC1_tree, hf_rtcp_app_poc1_ack_subtype, tvb, offset, 1, ENC_BIG_ENDIAN ); - /* JB Max */ - proto_tree_add_item(content_tree, hf_rtcp_xr_voip_metrics_jbmax, tvb, offset, 2, ENC_BIG_ENDIAN); - offset += 2; + col_append_fstr(pinfo->cinfo, COL_INFO, " (for %s)", + val_to_str(subtype, + rtcp_app_poc1_floor_cnt_type_vals, + "Unknown")); - /* JB Abs max */ - proto_tree_add_item(content_tree, hf_rtcp_xr_voip_metrics_jbabsmax, tvb, offset, 2, ENC_BIG_ENDIAN); - offset += 2; + /* Reason code only seen if subtype was Connect */ + if (subtype == TBCP_CONNECT) + { + proto_tree_add_item( PoC1_tree, hf_rtcp_app_poc1_ack_reason_code, tvb, offset, 2, ENC_BIG_ENDIAN ); + } - break; - } + /* 16 bits of padding follow */ + offset += 4; + packet_len -= 4; + } + break; - case RTCP_XR_STATS_SUMRY: { - /* Identifier */ - proto_tree_add_item(content_tree, hf_rtcp_ssrc_source, tvb, offset, 4, ENC_BIG_ENDIAN); - offset += 4; + case TBCP_QUEUE_STATUS_REQUEST: + break; - /* Begin Seq */ - proto_tree_add_item(content_tree, hf_rtcp_xr_beginseq, tvb, offset, 2, ENC_BIG_ENDIAN); - offset += 2; + case TBCP_QUEUE_STATUS_RESPONSE: + { + guint16 position; + proto_item *ti; - /* End Seq */ - proto_tree_add_item(content_tree, hf_rtcp_xr_endseq, tvb, offset, 2, ENC_BIG_ENDIAN); - offset += 2; + /* Priority */ + proto_tree_add_item( PoC1_tree, hf_rtcp_app_poc1_qsresp_priority, tvb, offset, 1, ENC_BIG_ENDIAN ); - /* Lost Pkts */ - proto_tree_add_item(content_tree, hf_rtcp_xr_stats_lost, tvb, offset, 4, ENC_BIG_ENDIAN); - offset += 4; + /* Queue position. 65535 indicates 'position not available' */ + position = tvb_get_ntohs(tvb, offset+1); + ti = proto_tree_add_item( PoC1_tree, hf_rtcp_app_poc1_qsresp_position, tvb, offset+1, 2, ENC_BIG_ENDIAN ); + if (position == 0) + { + proto_item_append_text(ti, " (client is un-queued)"); + } + if (position == 65535) + { + proto_item_append_text(ti, " (position not available)"); + } - /* Dup Pkts */ - proto_tree_add_item(content_tree, hf_rtcp_xr_stats_dups, tvb, offset, 4, ENC_BIG_ENDIAN); - offset += 4; + col_append_fstr(pinfo->cinfo, COL_INFO, " position=%u", position); - /* Min Jitter */ - proto_tree_add_item(content_tree, hf_rtcp_xr_stats_minjitter, tvb, offset, 4, ENC_BIG_ENDIAN); - offset += 4; + /* 1 bytes of padding follows */ - /* Max Jitter */ - proto_tree_add_item(content_tree, hf_rtcp_xr_stats_maxjitter, tvb, offset, 4, ENC_BIG_ENDIAN); - offset += 4; + offset += 4; + packet_len -= 4; + } + break; - /* Mean Jitter */ - proto_tree_add_item(content_tree, hf_rtcp_xr_stats_meanjitter, tvb, offset, 4, ENC_BIG_ENDIAN); - offset += 4; + case TBCP_DISCONNECT: + break; - /* Dev Jitter */ - proto_tree_add_item(content_tree, hf_rtcp_xr_stats_devjitter, tvb, offset, 4, ENC_BIG_ENDIAN); - offset += 4; + case TBCP_CONNECT: + { + proto_item *content = proto_tree_add_text(PoC1_tree, tvb, offset, 2, "SDES item content"); + gboolean contents[5]; + unsigned int i; + guint8 items_set = 0; - /* Min TTL */ - proto_tree_add_item(content_tree, hf_rtcp_xr_stats_minttl, tvb, offset, 1, ENC_BIG_ENDIAN); - offset ++; + proto_tree *content_tree = proto_item_add_subtree(content, ett_poc1_conn_contents); + guint16 items_field = tvb_get_ntohs(tvb, offset ); - /* Max TTL */ - proto_tree_add_item(content_tree, hf_rtcp_xr_stats_maxttl, tvb, offset, 1, ENC_BIG_ENDIAN); - offset ++; + /* Dissect each defined bit flag in the SDES item content */ + for ( i = 0; i < 5; i++) + { + proto_tree_add_item( content_tree, hf_rtcp_app_poc1_conn_content[i], tvb, offset, 2, ENC_BIG_ENDIAN ); + contents[i] = items_field & (1 << (15-i)); + if (contents[i]) ++items_set; + } - /* Mean TTL */ - proto_tree_add_item(content_tree, hf_rtcp_xr_stats_meanttl, tvb, offset, 1, ENC_BIG_ENDIAN); - offset ++; + /* Show how many flags were set */ + proto_item_append_text(content, " (%u items)", items_set); - /* Dev TTL */ - proto_tree_add_item(content_tree, hf_rtcp_xr_stats_devttl, tvb, offset, 1, ENC_BIG_ENDIAN); - offset ++; + /* Session type */ + proto_tree_add_item( PoC1_tree, hf_rtcp_app_poc1_conn_session_type, tvb, offset + 2, 1, ENC_BIG_ENDIAN ); - break; - } + /* Additional indications */ + proto_tree_add_item( PoC1_tree, hf_rtcp_app_poc1_conn_add_ind_mao, tvb, offset + 3, 1, ENC_BIG_ENDIAN ); - case RTCP_XR_REF_TIME: { - guint32 ts_msw, ts_lsw; + offset += 4; + packet_len -= 4; + + /* One SDES item for every set flag in contents array */ + for ( i = 0; i < array_length(contents); ++i ) { + if ( contents[i] ) { + guint /*sdes_type2,*/ sdes_len2; + /* (sdes_type2 not currently used...). Could complain if type + doesn't match expected for item... */ + /*sdes_type2 = tvb_get_guint8( tvb, offset );*/ + offset += 1; + sdes_len2 = tvb_get_guint8( tvb, offset ); + + /* Add SDES field indicated as present */ + proto_tree_add_item( PoC1_tree, hf_rtcp_app_poc1_conn_sdes_items[i], tvb, offset, 1, ENC_BIG_ENDIAN ); + + /* Move past field */ + offset += sdes_len2 + 1; + packet_len -= (sdes_len2 + 2); + } + } + break; + } - ts_msw = tvb_get_ntohl(tvb, offset); - proto_tree_add_text(content_tree, tvb, offset, 4, "Timestamp, MSW: %u", ts_msw); + default: + break; + } + offset += packet_len; + return offset; + } + else if ( g_ascii_strncasecmp(ascii_name, mux_app_name_str,4 ) == 0 ) + { + /* 3GPP Nb protocol extension (3GPP 29.414) for RTP Multiplexing */ + col_append_fstr(pinfo->cinfo, COL_INFO,"( %s ) subtype=%u",ascii_name, rtcp_subtype); + offset += 4; + packet_len -= 4; + /* Applications specific data */ + if ( padding ) { + /* If there's padding present, we have to remove that from the data part + * The last octet of the packet contains the length of the padding + */ + packet_len -= tvb_get_guint8( tvb, offset + packet_len - 1 ); + } + if (packet_len == 4) + { + guint16 local_port = 0; + + proto_item* mux_item = proto_tree_add_item(tree, hf_rtcp_app_mux, tvb, offset, packet_len, ENC_NA); + proto_tree* mux_tree = proto_item_add_subtree( mux_item, ett_mux ); + proto_tree_add_item( mux_tree, hf_rtcp_app_mux_mux, tvb, offset, 1, ENC_BIG_ENDIAN ); + proto_tree_add_item( mux_tree, hf_rtcp_app_mux_cp, tvb, offset, 1, ENC_BIG_ENDIAN ); + proto_tree_add_item( mux_tree, hf_rtcp_app_mux_selection, tvb, offset, 1, ENC_BIG_ENDIAN ); + local_port = tvb_get_ntohs( tvb, offset+2 ); + proto_tree_add_uint( mux_tree, hf_rtcp_app_mux_localmuxport, tvb, offset+2, 2, local_port*2 ); + } + else + { + /* fall back to just showing the data if it's the wrong length */ + proto_tree_add_item( tree, hf_rtcp_app_data, tvb, offset, packet_len, ENC_NA ); + } + offset += packet_len; + + return offset; + } + else + { + tvbuff_t *next_tvb; /* tvb to pass to subdissector */ + /* tvb == Pass the entire APP payload so the subdissector can have access to the + * entire data set + */ + next_tvb = tvb_new_subset(tvb, offset-8, app_length+4, app_length+4); + /* look for registered sub-dissectors */ + if (dissector_try_string(rtcp_dissector_table, ascii_name, next_tvb, pinfo, tree)) { + /* found subdissector - return tvb_length */ offset += 4; - ts_lsw = tvb_get_ntohl(tvb, offset); - proto_tree_add_text(content_tree, tvb, offset, 4, "Timestamp, LSW: %u", ts_lsw); + packet_len -= 4; + if ( padding ) { + /* If there's padding present, we have to remove that from the data part + * The last octet of the packet contains the length of the padding + */ + packet_len -= tvb_get_guint8( tvb, offset + packet_len - 1 ); + } + offset += packet_len; + return offset; + } + else + { + /* Unhandled application type, just show app name and raw data */ + col_append_fstr(pinfo->cinfo, COL_INFO,"( %s ) subtype=%u",ascii_name, rtcp_subtype); offset += 4; + packet_len -= 4; + /* Applications specific data */ + if ( padding ) { + /* If there's padding present, we have to remove that from the data part + * The last octet of the packet contains the length of the padding + */ + packet_len -= tvb_get_guint8( tvb, offset + packet_len - 1 ); + } + proto_tree_add_item( tree, hf_rtcp_app_data, tvb, offset, packet_len, ENC_NA ); + offset += packet_len; - break; + return offset; } + } - case RTCP_XR_DLRR: { - /* Each report block is 12 bytes */ - gint sources = content_length / 12; - gint counter = 0; - for(counter = 0; counter < sources; counter++) { - /* Create a new subtree for a length of 12 bytes */ - proto_tree *ti = proto_tree_add_text(content_tree, tvb, offset, 12, "Source %u", counter + 1); - proto_tree *ssrc_tree = proto_item_add_subtree(ti, ett_xr_ssrc); - - /* SSRC_n source identifier, 32 bits */ - proto_tree_add_item(ssrc_tree, hf_rtcp_ssrc_source, tvb, offset, 4, ENC_BIG_ENDIAN); - offset += 4; - - /* Last RR timestamp */ - proto_tree_add_item(ssrc_tree, hf_rtcp_xr_lrr, tvb, offset, 4, ENC_BIG_ENDIAN); - offset += 4; - - /* Delay since last RR timestamp */ - proto_tree_add_item(ssrc_tree, hf_rtcp_xr_dlrr, tvb, offset, 4, ENC_BIG_ENDIAN); - offset += 4; - } +} - if (content_length % 12 != 0) - offset += content_length % 12; - break; - } - case RTCP_XR_PKT_RXTIMES: { - /* 8 bytes of fixed header */ - gint count = 0, skip = 8; - guint16 begin = 0; +static int +dissect_rtcp_bye( tvbuff_t *tvb, packet_info *pinfo, int offset, proto_tree *tree, + unsigned int count ) +{ + unsigned int chunk = 1; + unsigned int reason_length = 0; + gint reason_offset = 0; + char* reason_text = NULL; + + while ( chunk <= count ) { + /* source identifier, 32 bits */ + proto_tree_add_item( tree, hf_rtcp_ssrc_source, tvb, offset, 4, ENC_BIG_ENDIAN); + offset += 4; + chunk++; + } - /* Identifier */ - proto_tree_add_item(content_tree, hf_rtcp_ssrc_source, tvb, offset, 4, ENC_BIG_ENDIAN); - offset += 4; + if ( tvb_reported_length_remaining( tvb, offset ) > 0 ) { + /* Bye reason consists of an 8 bit length l and a string with length l */ + reason_length = tvb_get_guint8( tvb, offset ); + proto_tree_add_item( tree, hf_rtcp_sdes_length, tvb, offset, 1, ENC_BIG_ENDIAN ); + offset++; - /* Begin Seq */ - begin = tvb_get_ntohs(tvb, offset); - proto_tree_add_item(content_tree, hf_rtcp_xr_beginseq, tvb, offset, 2, ENC_BIG_ENDIAN); - offset += 2; + reason_offset = offset; + reason_text = (char*)tvb_get_ephemeral_string(tvb, offset, reason_length); + proto_tree_add_string( tree, hf_rtcp_sdes_text, tvb, offset, reason_length, reason_text ); + offset += reason_length; + } - /* End Seq */ - proto_tree_add_item(content_tree, hf_rtcp_xr_endseq, tvb, offset, 2, ENC_BIG_ENDIAN); - offset += 2; + /* BYE packet padded out if string didn't fit in previous word */ + if (offset % 4) + { + gint pad_size = (4 - (offset % 4)); + int i; - for(count = 0; skip < content_length; skip += 4, count++) { - proto_tree_add_text(content_tree, tvb, offset, 4, "Seq: %u, Timestamp: %u", - (begin + count) % 65536, ENC_BIG_ENDIAN); - offset += 4; + /* Check padding */ + for (i = 0; i < pad_size; i++) + { + if ((!(tvb_offset_exists(tvb, offset + i))) || + (tvb_get_guint8(tvb, offset + i) != 0)) + { + proto_item *ti; + ti = proto_tree_add_none_format(tree, hf_rtcp_bye_reason_not_padded, + tvb, reason_offset, reason_length, + "Reason string is not NULL padded (see RFC3550, section 6.6)"); + expert_add_info_format(pinfo, ti, PI_MALFORMED, PI_WARN, + "Reason string is not NULL padded (see RFC3550, section 6.6)"); + PROTO_ITEM_SET_GENERATED(ti); } - break; } - case RTCP_XR_LOSS_RLE: - case RTCP_XR_DUP_RLE: { - /* 8 bytes of fixed header */ - gint count = 0, skip = 8; - proto_item *chunks_item; - proto_tree *chunks_tree; + offset += pad_size; + } - /* Identifier */ - proto_tree_add_item(content_tree, hf_rtcp_ssrc_source, tvb, offset, 4, ENC_BIG_ENDIAN); - offset += 4; + return offset; +} - /* Begin Seq */ - proto_tree_add_item(content_tree, hf_rtcp_xr_beginseq, tvb, offset, 2, ENC_BIG_ENDIAN); - offset += 2; +static int +dissect_rtcp_sdes( tvbuff_t *tvb, int offset, proto_tree *tree, + unsigned int count ) +{ + unsigned int chunk = 1; + proto_item *sdes_item; + proto_tree *sdes_tree; + proto_tree *sdes_item_tree; + proto_item *ti; + int start_offset; + int items_start_offset; + guint32 ssrc; + unsigned int item_len = 0; + unsigned int sdes_type = 0; + unsigned int prefix_len = 0; + + while ( chunk <= count ) { + /* Create a subtree for this chunk; we don't yet know + the length. */ + start_offset = offset; + + ssrc = tvb_get_ntohl( tvb, offset ); + sdes_item = proto_tree_add_text(tree, tvb, offset, -1, + "Chunk %u, SSRC/CSRC 0x%X", chunk, ssrc); + sdes_tree = proto_item_add_subtree( sdes_item, ett_sdes ); + + /* SSRC_n source identifier, 32 bits */ + proto_tree_add_item( sdes_tree, hf_rtcp_ssrc_source, tvb, offset, 4, ENC_BIG_ENDIAN ); + offset += 4; - /* End Seq */ - proto_tree_add_item(content_tree, hf_rtcp_xr_endseq, tvb, offset, 2, ENC_BIG_ENDIAN); - offset += 2; + /* Create a subtree for the SDES items; we don't yet know + the length */ + items_start_offset = offset; + ti = proto_tree_add_text(sdes_tree, tvb, offset, -1, + "SDES items" ); + sdes_item_tree = proto_item_add_subtree( ti, ett_sdes_item ); - /* report Chunks */ - chunks_item = proto_tree_add_text(content_tree, tvb, offset, content_length,"Report Chunks"); - chunks_tree = proto_item_add_subtree(chunks_item, ett_xr_loss_chunk); + /* + * Not every message is ended with "null" bytes, so check for + * end of frame as well. + */ + while ( tvb_reported_length_remaining( tvb, offset ) > 0 ) { + /* ID, 8 bits */ + sdes_type = tvb_get_guint8( tvb, offset ); + proto_tree_add_item( sdes_item_tree, hf_rtcp_sdes_type, tvb, offset, 1, ENC_BIG_ENDIAN ); + offset++; - for(count = 1; skip < content_length; skip += 2, count++) { - guint value = tvb_get_ntohs(tvb, offset); + if ( sdes_type == RTCP_SDES_END ) { + /* End of list */ + break; + } - if (value == 0) { - proto_tree_add_text(chunks_tree, tvb, offset, 2, - "Chunk: %u -- Null Terminator ", - count); - } else if ( ! ( value & 0x8000 )) { - const gchar* run_type = (value & 0x4000) ? "1s" : "0s"; - value &= 0x3FFF; - proto_tree_add_text(chunks_tree, tvb, offset, 2, - "Chunk: %u -- Length Run %s, length: %u", - count, run_type, value); - } else { - char bits[20+1]; - other_decode_bitfield_value(bits, value, 0x00007FFF, 16); - proto_tree_add_text(chunks_tree, tvb, offset, 2, - "Chunk: %u -- Bit Vector, bits: %s", - count, bits ); + /* Item length, 8 bits */ + item_len = tvb_get_guint8( tvb, offset ); + proto_tree_add_item( sdes_item_tree, hf_rtcp_sdes_length, tvb, offset, 1, ENC_BIG_ENDIAN ); + offset++; + + if ( item_len != 0 ) { + if ( sdes_type == RTCP_SDES_PRIV ) { + /* PRIV adds two items between the + * SDES length and value - an 8 bit + * length giving the length of a + * "prefix string", and the string. + */ + prefix_len = tvb_get_guint8( tvb, offset ); + if ( prefix_len + 1 > item_len ) { + proto_tree_add_uint_format( sdes_item_tree, + hf_rtcp_sdes_prefix_len, tvb, + offset, 1, prefix_len, + "Prefix length: %u (bogus, must be <= %u)", + prefix_len, item_len - 1); + offset += item_len; + continue; + } + proto_tree_add_item( sdes_item_tree, hf_rtcp_sdes_prefix_len, tvb, offset, 1, ENC_BIG_ENDIAN ); + offset++; + + proto_tree_add_item( sdes_item_tree, hf_rtcp_sdes_prefix_string, tvb, offset, prefix_len, ENC_ASCII|ENC_NA ); + offset += prefix_len; + item_len -= prefix_len +1; + if ( item_len == 0 ) + continue; } - offset += 2; + proto_tree_add_item( sdes_item_tree, hf_rtcp_sdes_text, tvb, offset, item_len, ENC_ASCII|ENC_NA ); + offset += item_len; } - - break; } - case RTCP_XR_BT_XNQ: { /* BT XNQ block as defined in RFC5093 */ - proto_tree_add_item(content_tree, hf_rtcp_xr_btxnq_begseq, tvb, offset, 2, ENC_BIG_ENDIAN); /* Begin Sequence number */ - proto_tree_add_item(content_tree, hf_rtcp_xr_btxnq_endseq, tvb, offset+2, 2, ENC_BIG_ENDIAN); /* End Sequence number */ - offset += 4; + /* Set the length of the items subtree. */ + proto_item_set_len(ti, offset - items_start_offset); - proto_tree_add_item(content_tree, hf_rtcp_xr_btxnq_vmaxdiff, tvb, offset, 2, ENC_BIG_ENDIAN); /* vmaxdiff */ - proto_tree_add_item(content_tree, hf_rtcp_xr_btxnq_vrange, tvb, offset+2, 2, ENC_BIG_ENDIAN); /* vrange */ - offset += 4; + /* 32 bits = 4 bytes, so..... + * If offset % 4 != 0, we divide offset by 4, add one and then + * multiply by 4 again to reach the boundary + */ + if ( offset % 4 != 0 ) + offset = ((offset / 4) + 1 ) * 4; - proto_tree_add_item(content_tree, hf_rtcp_xr_btxnq_vsum, tvb, offset, 4, ENC_BIG_ENDIAN); /* vsum */ - offset += 4; + /* Set the length of this chunk. */ + proto_item_set_len(sdes_item, offset - start_offset); - proto_tree_add_item(content_tree, hf_rtcp_xr_btxnq_cycles, tvb, offset, 2, ENC_BIG_ENDIAN); /* cycle count */ - proto_tree_add_item(content_tree, hf_rtcp_xr_btxnq_jbevents, tvb, offset+2, 2, ENC_BIG_ENDIAN); /* jitter buffer events */ - offset += 4; + chunk++; + } + + return offset; +} + +static void parse_xr_type_specific_field(tvbuff_t *tvb, gint offset, guint block_type, proto_tree *tree) +{ + guint8 flags = tvb_get_guint8(tvb, offset); + + switch (block_type) { + case RTCP_XR_LOSS_RLE: + case RTCP_XR_DUP_RLE: + case RTCP_XR_PKT_RXTIMES: + proto_tree_add_item(tree, hf_rtcp_xr_thinning, tvb, offset, 1, ENC_BIG_ENDIAN); + break; + + case RTCP_XR_STATS_SUMRY: + proto_tree_add_boolean(tree, hf_rtcp_xr_stats_loss_flag, tvb, offset, 1, flags); + proto_tree_add_boolean(tree, hf_rtcp_xr_stats_dup_flag, tvb, offset, 1, flags); + proto_tree_add_boolean(tree, hf_rtcp_xr_stats_jitter_flag, tvb, offset, 1, flags); + proto_tree_add_item(tree, hf_rtcp_xr_stats_ttl, tvb, offset, 1, ENC_BIG_ENDIAN); + break; + + default: + proto_tree_add_item(tree, hf_rtcp_xr_block_specific, tvb, offset, 1, ENC_BIG_ENDIAN); + break; + } +} + +static gboolean validate_xr_block_length(tvbuff_t *tvb, packet_info *pinfo, int offset, guint block_type, guint block_len, proto_tree *tree) +{ + proto_item *ti; + + ti = proto_tree_add_uint(tree, hf_rtcp_xr_block_length, tvb, offset, 2, block_len); + switch (block_type) { + case RTCP_XR_REF_TIME: + if (block_len != 2) + expert_add_info_format(pinfo, ti, PI_PROTOCOL, PI_WARN, + "Invalid block length, should be 2"); + return FALSE; + + case RTCP_XR_STATS_SUMRY: + if (block_len != 9) + expert_add_info_format(pinfo, ti, PI_PROTOCOL, PI_WARN, + "Invalid block length, should be 9"); + return FALSE; + + case RTCP_XR_VOIP_METRCS: + case RTCP_XR_BT_XNQ: + if (block_len != 8) + expert_add_info_format(pinfo, ti, PI_PROTOCOL, PI_WARN, + "Invalid block length, should be 8"); + return FALSE; + + case RTCP_XR_IDMS: + if (block_len != 7) + expert_add_info_format(pinfo, ti, PI_PROTOCOL, PI_WARN, + "Invalid block length, should be 7"); + return FALSE; + + default: + break; + } + return TRUE; +} + +static int +dissect_rtcp_xr(tvbuff_t *tvb, packet_info *pinfo, int offset, proto_tree *tree, gint packet_len) +{ + guint block_num = 1; + guint temp_value = 0; /* used when checking spare bits in block type 8 */ + proto_item *item; + int hour,min,sec,msec; + guint32 tmp_ts; + + /* Packet length should at least be 4 */ + if (packet_len < 4) { + proto_tree_add_text(tree, tvb, offset, packet_len, "Missing Sender SSRC"); + return offset + packet_len; + } + + /* SSRC */ + proto_tree_add_item( tree, hf_rtcp_ssrc_sender, tvb, offset, 4, ENC_BIG_ENDIAN ); + offset += 4; + packet_len -= 4; + + for(;packet_len > 0; block_num++) { + guint block_type = tvb_get_guint8(tvb, offset), block_length = 0; + gint content_length = 0; + /*gboolean valid = TRUE;*/ + + /* Create a subtree for this block, dont know the length yet*/ + proto_item *block = proto_tree_add_text(tree, tvb, offset, -1, "Block %u", block_num); + proto_tree *xr_block_tree = proto_item_add_subtree(block, ett_xr_block); + proto_item *contents = NULL; + proto_item *content_tree = NULL; + + proto_tree_add_item(xr_block_tree, hf_rtcp_xr_block_type, tvb, offset, 1, ENC_BIG_ENDIAN); + + if (packet_len >= 2) { + parse_xr_type_specific_field(tvb, offset + 1, block_type, xr_block_tree); + if (packet_len >= 4) { + block_length = tvb_get_ntohs(tvb, offset + 2); + /* XXX: What if FALSE return from the following ?? */ + /*valid =*/ validate_xr_block_length(tvb, pinfo, offset + 2, block_type, block_length, xr_block_tree); + } + } else { + proto_tree_add_text(xr_block_tree, tvb, offset + 1, packet_len, "Missing Required Block Headers"); + return offset + packet_len; + } + + content_length = block_length * 4; + proto_item_set_len(block, content_length + 4); + + if (content_length > packet_len) { + proto_tree_add_text(xr_block_tree, tvb, offset + 2, 2, "Block length is greater than packet length"); + } + + offset += 4; + packet_len -= 4; + + contents = proto_tree_add_text(xr_block_tree, tvb, offset, content_length, "Contents"); + content_tree = proto_item_add_subtree(contents, ett_xr_block_contents); + + switch (block_type) { + case RTCP_XR_VOIP_METRCS: { + guint fraction_rate; + + /* Identifier */ + proto_tree_add_item(content_tree, hf_rtcp_ssrc_source, tvb, offset, 4, ENC_BIG_ENDIAN); + offset += 4; + + /* Loss Rate */ + fraction_rate = tvb_get_guint8(tvb, offset); + proto_tree_add_uint_format(content_tree, hf_rtcp_ssrc_fraction, tvb, offset, 1, + fraction_rate, "Fraction lost: %u / 256", fraction_rate); + offset++; + + /* Discard Rate */ + fraction_rate = tvb_get_guint8(tvb, offset); + proto_tree_add_uint_format(content_tree, hf_rtcp_ssrc_discarded, tvb, offset, 1, + fraction_rate, "Fraction Discarded: %u / 256", fraction_rate); + offset++; + + /* Burst Density */ + proto_tree_add_item(content_tree, hf_rtcp_xr_voip_metrics_burst_density, tvb, offset, 1, ENC_BIG_ENDIAN); + offset++; + + /* Gap Density */ + proto_tree_add_item(content_tree, hf_rtcp_xr_voip_metrics_gap_density, tvb, offset, 1, ENC_BIG_ENDIAN); + offset++; + + /* Burst Duration */ + proto_tree_add_item(content_tree, hf_rtcp_xr_voip_metrics_burst_duration, tvb, offset, 2, ENC_BIG_ENDIAN); + offset += 2; + + /* Gap Duration */ + proto_tree_add_item(content_tree, hf_rtcp_xr_voip_metrics_gap_duration, tvb, offset, 2, ENC_BIG_ENDIAN); + offset += 2; + + /* Round Trip Delay */ + proto_tree_add_item(content_tree, hf_rtcp_xr_voip_metrics_rtdelay, tvb, offset, 2, ENC_BIG_ENDIAN); + offset += 2; + + /* End System Delay */ + proto_tree_add_item(content_tree, hf_rtcp_xr_voip_metrics_esdelay, tvb, offset, 2, ENC_BIG_ENDIAN); + offset += 2; + + /* Signal Level */ + proto_tree_add_item(content_tree, hf_rtcp_xr_voip_metrics_siglevel, tvb, offset, 1, ENC_BIG_ENDIAN); + offset++; + + /* Noise Level */ + proto_tree_add_item(content_tree, hf_rtcp_xr_voip_metrics_noiselevel, tvb, offset, 1, ENC_BIG_ENDIAN); + offset++; + + /* RERL */ + proto_tree_add_item(content_tree, hf_rtcp_xr_voip_metrics_rerl, tvb, offset, 1, ENC_BIG_ENDIAN); + offset++; + + /* GMin */ + proto_tree_add_item(content_tree, hf_rtcp_xr_voip_metrics_gmin, tvb, offset, 1, ENC_BIG_ENDIAN); + offset++; + + /* R factor */ + proto_tree_add_item(content_tree, hf_rtcp_xr_voip_metrics_rfactor, tvb, offset, 1, ENC_BIG_ENDIAN); + offset++; + + /* external R Factor */ + proto_tree_add_item(content_tree, hf_rtcp_xr_voip_metrics_extrfactor, tvb, offset, 1, ENC_BIG_ENDIAN); + offset++; + + /* MOS LQ */ + proto_tree_add_float(content_tree, hf_rtcp_xr_voip_metrics_moslq, tvb, offset, 1, + (float) (tvb_get_guint8(tvb, offset) / 10.0)); + offset++; + + /* MOS CQ */ + proto_tree_add_float(content_tree, hf_rtcp_xr_voip_metrics_moscq, tvb, offset, 1, + (float) (tvb_get_guint8(tvb, offset) / 10.0)); + offset++; + + /* PLC, JB Adaptive, JB Rate */ + proto_tree_add_item(content_tree, hf_rtcp_xr_voip_metrics_plc, tvb, offset, 1, ENC_BIG_ENDIAN); + proto_tree_add_item(content_tree, hf_rtcp_xr_voip_metrics_jbadaptive, tvb, offset, 1, ENC_BIG_ENDIAN); + proto_tree_add_item(content_tree, hf_rtcp_xr_voip_metrics_jbrate, tvb, offset, 1, ENC_BIG_ENDIAN); + offset += 2; /* skip over reseved bit */ + + /* JB Nominal */ + proto_tree_add_item(content_tree, hf_rtcp_xr_voip_metrics_jbnominal, tvb, offset, 2, ENC_BIG_ENDIAN); + offset += 2; + + /* JB Max */ + proto_tree_add_item(content_tree, hf_rtcp_xr_voip_metrics_jbmax, tvb, offset, 2, ENC_BIG_ENDIAN); + offset += 2; + + /* JB Abs max */ + proto_tree_add_item(content_tree, hf_rtcp_xr_voip_metrics_jbabsmax, tvb, offset, 2, ENC_BIG_ENDIAN); + offset += 2; + + break; + } + + case RTCP_XR_STATS_SUMRY: { + /* Identifier */ + proto_tree_add_item(content_tree, hf_rtcp_ssrc_source, tvb, offset, 4, ENC_BIG_ENDIAN); + offset += 4; + + /* Begin Seq */ + proto_tree_add_item(content_tree, hf_rtcp_xr_beginseq, tvb, offset, 2, ENC_BIG_ENDIAN); + offset += 2; + + /* End Seq */ + proto_tree_add_item(content_tree, hf_rtcp_xr_endseq, tvb, offset, 2, ENC_BIG_ENDIAN); + offset += 2; + + /* Lost Pkts */ + proto_tree_add_item(content_tree, hf_rtcp_xr_stats_lost, tvb, offset, 4, ENC_BIG_ENDIAN); + offset += 4; + + /* Dup Pkts */ + proto_tree_add_item(content_tree, hf_rtcp_xr_stats_dups, tvb, offset, 4, ENC_BIG_ENDIAN); + offset += 4; + + /* Min Jitter */ + proto_tree_add_item(content_tree, hf_rtcp_xr_stats_minjitter, tvb, offset, 4, ENC_BIG_ENDIAN); + offset += 4; + + /* Max Jitter */ + proto_tree_add_item(content_tree, hf_rtcp_xr_stats_maxjitter, tvb, offset, 4, ENC_BIG_ENDIAN); + offset += 4; + + /* Mean Jitter */ + proto_tree_add_item(content_tree, hf_rtcp_xr_stats_meanjitter, tvb, offset, 4, ENC_BIG_ENDIAN); + offset += 4; + + /* Dev Jitter */ + proto_tree_add_item(content_tree, hf_rtcp_xr_stats_devjitter, tvb, offset, 4, ENC_BIG_ENDIAN); + offset += 4; + + /* Min TTL */ + proto_tree_add_item(content_tree, hf_rtcp_xr_stats_minttl, tvb, offset, 1, ENC_BIG_ENDIAN); + offset ++; + + /* Max TTL */ + proto_tree_add_item(content_tree, hf_rtcp_xr_stats_maxttl, tvb, offset, 1, ENC_BIG_ENDIAN); + offset ++; + + /* Mean TTL */ + proto_tree_add_item(content_tree, hf_rtcp_xr_stats_meanttl, tvb, offset, 1, ENC_BIG_ENDIAN); + offset ++; + + /* Dev TTL */ + proto_tree_add_item(content_tree, hf_rtcp_xr_stats_devttl, tvb, offset, 1, ENC_BIG_ENDIAN); + offset ++; + + break; + } + + case RTCP_XR_REF_TIME: { + guint32 ts_msw, ts_lsw; + + ts_msw = tvb_get_ntohl(tvb, offset); + proto_tree_add_text(content_tree, tvb, offset, 4, "Timestamp, MSW: %u", ts_msw); + offset += 4; + ts_lsw = tvb_get_ntohl(tvb, offset); + proto_tree_add_text(content_tree, tvb, offset, 4, "Timestamp, LSW: %u", ts_lsw); + offset += 4; + + break; + } + + case RTCP_XR_DLRR: { + /* Each report block is 12 bytes */ + gint sources = content_length / 12; + gint counter = 0; + for(counter = 0; counter < sources; counter++) { + /* Create a new subtree for a length of 12 bytes */ + proto_tree *ti = proto_tree_add_text(content_tree, tvb, offset, 12, "Source %u", counter + 1); + proto_tree *ssrc_tree = proto_item_add_subtree(ti, ett_xr_ssrc); + + /* SSRC_n source identifier, 32 bits */ + proto_tree_add_item(ssrc_tree, hf_rtcp_ssrc_source, tvb, offset, 4, ENC_BIG_ENDIAN); + offset += 4; + + /* Last RR timestamp */ + proto_tree_add_item(ssrc_tree, hf_rtcp_xr_lrr, tvb, offset, 4, ENC_BIG_ENDIAN); + offset += 4; + + /* Delay since last RR timestamp */ + proto_tree_add_item(ssrc_tree, hf_rtcp_xr_dlrr, tvb, offset, 4, ENC_BIG_ENDIAN); + offset += 4; + } + + if (content_length % 12 != 0) + offset += content_length % 12; + break; + } + + case RTCP_XR_PKT_RXTIMES: { + /* 8 bytes of fixed header */ + gint count = 0, skip = 8; + guint16 begin = 0; + + /* Identifier */ + proto_tree_add_item(content_tree, hf_rtcp_ssrc_source, tvb, offset, 4, ENC_BIG_ENDIAN); + offset += 4; + + /* Begin Seq */ + begin = tvb_get_ntohs(tvb, offset); + proto_tree_add_item(content_tree, hf_rtcp_xr_beginseq, tvb, offset, 2, ENC_BIG_ENDIAN); + offset += 2; + + /* End Seq */ + proto_tree_add_item(content_tree, hf_rtcp_xr_endseq, tvb, offset, 2, ENC_BIG_ENDIAN); + offset += 2; + + for(count = 0; skip < content_length; skip += 4, count++) { + proto_tree_add_text(content_tree, tvb, offset, 4, "Seq: %u, Timestamp: %u", + (begin + count) % 65536, ENC_BIG_ENDIAN); + offset += 4; + } + break; + } + + case RTCP_XR_LOSS_RLE: + case RTCP_XR_DUP_RLE: { + /* 8 bytes of fixed header */ + gint count = 0, skip = 8; + proto_item *chunks_item; + proto_tree *chunks_tree; + + /* Identifier */ + proto_tree_add_item(content_tree, hf_rtcp_ssrc_source, tvb, offset, 4, ENC_BIG_ENDIAN); + offset += 4; + + /* Begin Seq */ + proto_tree_add_item(content_tree, hf_rtcp_xr_beginseq, tvb, offset, 2, ENC_BIG_ENDIAN); + offset += 2; + + /* End Seq */ + proto_tree_add_item(content_tree, hf_rtcp_xr_endseq, tvb, offset, 2, ENC_BIG_ENDIAN); + offset += 2; + + /* report Chunks */ + chunks_item = proto_tree_add_text(content_tree, tvb, offset, content_length,"Report Chunks"); + chunks_tree = proto_item_add_subtree(chunks_item, ett_xr_loss_chunk); + + for(count = 1; skip < content_length; skip += 2, count++) { + guint value = tvb_get_ntohs(tvb, offset); + + if (value == 0) { + proto_tree_add_text(chunks_tree, tvb, offset, 2, + "Chunk: %u -- Null Terminator ", + count); + } else if ( ! ( value & 0x8000 )) { + const gchar* run_type = (value & 0x4000) ? "1s" : "0s"; + value &= 0x3FFF; + proto_tree_add_text(chunks_tree, tvb, offset, 2, + "Chunk: %u -- Length Run %s, length: %u", + count, run_type, value); + } else { + char bits[20+1]; + other_decode_bitfield_value(bits, value, 0x00007FFF, 16); + proto_tree_add_text(chunks_tree, tvb, offset, 2, + "Chunk: %u -- Bit Vector, bits: %s", + count, bits ); + } + offset += 2; + } + + break; + } + case RTCP_XR_BT_XNQ: { /* BT XNQ block as defined in RFC5093 */ + + proto_tree_add_item(content_tree, hf_rtcp_xr_btxnq_begseq, tvb, offset, 2, ENC_BIG_ENDIAN); /* Begin Sequence number */ + proto_tree_add_item(content_tree, hf_rtcp_xr_btxnq_endseq, tvb, offset+2, 2, ENC_BIG_ENDIAN); /* End Sequence number */ + offset += 4; + + proto_tree_add_item(content_tree, hf_rtcp_xr_btxnq_vmaxdiff, tvb, offset, 2, ENC_BIG_ENDIAN); /* vmaxdiff */ + proto_tree_add_item(content_tree, hf_rtcp_xr_btxnq_vrange, tvb, offset+2, 2, ENC_BIG_ENDIAN); /* vrange */ + offset += 4; + + proto_tree_add_item(content_tree, hf_rtcp_xr_btxnq_vsum, tvb, offset, 4, ENC_BIG_ENDIAN); /* vsum */ + offset += 4; + + proto_tree_add_item(content_tree, hf_rtcp_xr_btxnq_cycles, tvb, offset, 2, ENC_BIG_ENDIAN); /* cycle count */ + proto_tree_add_item(content_tree, hf_rtcp_xr_btxnq_jbevents, tvb, offset+2, 2, ENC_BIG_ENDIAN); /* jitter buffer events */ + offset += 4; temp_value = tvb_get_ntohl(tvb, offset); /* tDegNet */ if( (temp_value & 0x0ff000000) != 0) @@ -2190,36 +2190,36 @@ dissect_rtcp_xr(tvbuff_t *tvb, packet_info *pinfo, int offset, proto_tree *tree, break; } case RTCP_XR_IDMS: - offset -= 3; - proto_tree_add_item(content_tree, hf_rtcp_xr_idms_spst, tvb, offset, 1, ENC_BIG_ENDIAN); - offset+=3; - proto_tree_add_item(content_tree, hf_rtcp_xr_idms_pt, tvb, offset, 1, ENC_BIG_ENDIAN); - offset+=4; - proto_tree_add_item(content_tree, hf_rtcp_xr_idms_msci, tvb, offset, 4, ENC_BIG_ENDIAN); - offset+=4; - proto_tree_add_item(content_tree, hf_rtcp_xr_idms_source_ssrc, tvb, offset, 4, ENC_BIG_ENDIAN); - offset+=4; - proto_tree_add_item(content_tree, hf_rtcp_xr_idms_ntp_rcv_ts_msw, tvb, offset, 4, ENC_BIG_ENDIAN); - offset+=4; - proto_tree_add_item(content_tree, hf_rtcp_xr_idms_ntp_rcv_ts_lsw, tvb, offset, 4, ENC_BIG_ENDIAN); - offset+=4; - item = proto_tree_add_item(content_tree, hf_rtcp_ntp, tvb, offset-8, 8, ENC_TIME_NTP|ENC_BIG_ENDIAN); - PROTO_ITEM_SET_GENERATED(item); - - proto_tree_add_item(content_tree, hf_rtcp_xr_idms_rtp_ts, tvb, offset, 4, ENC_BIG_ENDIAN); - offset+=4; - proto_tree_add_item(content_tree, hf_rtcp_xr_idms_ntp_pres_ts, tvb, offset, 4, ENC_BIG_ENDIAN); - offset+=4; - - tmp_ts = tvb_get_ntohl(tvb,offset-4); - hour = ( (int) ( tmp_ts >> 16 ) ) / 3600; - min = (( (int) ( tmp_ts >> 16 ) ) - hour * 3600) / 60; - sec = (( (int) ( tmp_ts >> 16 ) ) - hour * 3600 - min * 60); - msec = ( (int) ( tmp_ts & 0x0000FFFF ) ) / 66; - - item = proto_tree_add_text( content_tree, tvb, offset-4, 4, "short NTP timestamp of presentation: %d:%02d:%02d:%03d [h:m:s:ms] ", hour,min,sec,msec); - PROTO_ITEM_SET_GENERATED(item); - break; + offset -= 3; + proto_tree_add_item(content_tree, hf_rtcp_xr_idms_spst, tvb, offset, 1, ENC_BIG_ENDIAN); + offset+=3; + proto_tree_add_item(content_tree, hf_rtcp_xr_idms_pt, tvb, offset, 1, ENC_BIG_ENDIAN); + offset+=4; + proto_tree_add_item(content_tree, hf_rtcp_xr_idms_msci, tvb, offset, 4, ENC_BIG_ENDIAN); + offset+=4; + proto_tree_add_item(content_tree, hf_rtcp_xr_idms_source_ssrc, tvb, offset, 4, ENC_BIG_ENDIAN); + offset+=4; + proto_tree_add_item(content_tree, hf_rtcp_xr_idms_ntp_rcv_ts_msw, tvb, offset, 4, ENC_BIG_ENDIAN); + offset+=4; + proto_tree_add_item(content_tree, hf_rtcp_xr_idms_ntp_rcv_ts_lsw, tvb, offset, 4, ENC_BIG_ENDIAN); + offset+=4; + item = proto_tree_add_item(content_tree, hf_rtcp_ntp, tvb, offset-8, 8, ENC_TIME_NTP|ENC_BIG_ENDIAN); + PROTO_ITEM_SET_GENERATED(item); + + proto_tree_add_item(content_tree, hf_rtcp_xr_idms_rtp_ts, tvb, offset, 4, ENC_BIG_ENDIAN); + offset+=4; + proto_tree_add_item(content_tree, hf_rtcp_xr_idms_ntp_pres_ts, tvb, offset, 4, ENC_BIG_ENDIAN); + offset+=4; + + tmp_ts = tvb_get_ntohl(tvb,offset-4); + hour = ( (int) ( tmp_ts >> 16 ) ) / 3600; + min = (( (int) ( tmp_ts >> 16 ) ) - hour * 3600) / 60; + sec = (( (int) ( tmp_ts >> 16 ) ) - hour * 3600 - min * 60); + msec = ( (int) ( tmp_ts & 0x0000FFFF ) ) / 66; + + item = proto_tree_add_text( content_tree, tvb, offset-4, 4, "short NTP timestamp of presentation: %d:%02d:%02d:%03d [h:m:s:ms] ", hour,min,sec,msec); + PROTO_ITEM_SET_GENERATED(item); + break; default: /* skip over the unknown block */ offset += content_length; @@ -2234,296 +2234,296 @@ static int dissect_rtcp_rr( packet_info *pinfo, tvbuff_t *tvb, int offset, proto_tree *tree, unsigned int count, unsigned int packet_length ) { - unsigned int counter = 1; - proto_tree *ssrc_tree = (proto_tree*) NULL; - proto_tree *ssrc_sub_tree = (proto_tree*) NULL; - proto_tree *high_sec_tree = (proto_tree*) NULL; - proto_item *ti = (proto_item*) NULL; - guint8 rr_flt; - int rr_offset = offset; - - - while ( counter <= count ) { - guint32 lsr, dlsr; - - /* Create a new subtree for a length of 24 bytes */ - ti = proto_tree_add_text(tree, tvb, offset, 24, - "Source %u", counter ); - ssrc_tree = proto_item_add_subtree( ti, ett_ssrc ); - - /* SSRC_n source identifier, 32 bits */ - proto_tree_add_item( ssrc_tree, hf_rtcp_ssrc_source, tvb, offset, 4, ENC_BIG_ENDIAN ); - offset += 4; - - ti = proto_tree_add_text(ssrc_tree, tvb, offset, 20, "SSRC contents" ); - ssrc_sub_tree = proto_item_add_subtree( ti, ett_ssrc_item ); - - /* Fraction lost, 8bits */ - rr_flt = tvb_get_guint8( tvb, offset ); - proto_tree_add_uint_format( ssrc_sub_tree, hf_rtcp_ssrc_fraction, tvb, - offset, 1, rr_flt, "Fraction lost: %u / 256", rr_flt ); - offset++; - - /* Cumulative number of packets lost, 24 bits */ - proto_tree_add_item( ssrc_sub_tree, hf_rtcp_ssrc_cum_nr, tvb, - offset, 3, ENC_BIG_ENDIAN ); - offset += 3; - - /* Extended highest sequence nr received, 32 bits - * Just for the sake of it, let's add another subtree - * because this might be a little clearer - */ - ti = proto_tree_add_item( ssrc_tree, hf_rtcp_ssrc_ext_high_seq, - tvb, offset, 4, ENC_BIG_ENDIAN ); - high_sec_tree = proto_item_add_subtree( ti, ett_ssrc_ext_high ); - /* Sequence number cycles */ - proto_tree_add_item( high_sec_tree, hf_rtcp_ssrc_high_cycles, - tvb, offset, 2, ENC_BIG_ENDIAN ); - offset += 2; - /* highest sequence number received */ - proto_tree_add_item( high_sec_tree, hf_rtcp_ssrc_high_seq, - tvb, offset, 2, ENC_BIG_ENDIAN ); - offset += 2; - - /* Interarrival jitter */ - proto_tree_add_item( ssrc_tree, hf_rtcp_ssrc_jitter, tvb, - offset, 4, ENC_BIG_ENDIAN ); - offset += 4; - - /* Last SR timestamp */ - lsr = tvb_get_ntohl( tvb, offset ); - proto_tree_add_item( ssrc_tree, hf_rtcp_ssrc_lsr, tvb, - offset, 4, ENC_BIG_ENDIAN ); - offset += 4; - - /* Delay since last SR timestamp */ - dlsr = tvb_get_ntohl( tvb, offset ); - ti = proto_tree_add_item( ssrc_tree, hf_rtcp_ssrc_dlsr, tvb, - offset, 4, ENC_BIG_ENDIAN ); - proto_item_append_text(ti, " (%d milliseconds)", - (int)(((double)dlsr/(double)65536) * 1000.0)); - offset += 4; - - /* Do roundtrip calculation */ - if (global_rtcp_show_roundtrip_calculation) - { - /* Based on delay since SR was sent in other direction */ - calculate_roundtrip_delay(tvb, pinfo, ssrc_tree, lsr, dlsr); - } - - counter++; - } - - /* If length remaining, assume profile-specific extension bytes */ - if ((offset-rr_offset) < (int)packet_length) - { - proto_tree_add_item(tree, hf_rtcp_profile_specific_extension, tvb, offset, - packet_length - (offset - rr_offset), ENC_NA); - offset = rr_offset + packet_length; - } - - return offset; + unsigned int counter = 1; + proto_tree *ssrc_tree = (proto_tree*) NULL; + proto_tree *ssrc_sub_tree = (proto_tree*) NULL; + proto_tree *high_sec_tree = (proto_tree*) NULL; + proto_item *ti = (proto_item*) NULL; + guint8 rr_flt; + int rr_offset = offset; + + + while ( counter <= count ) { + guint32 lsr, dlsr; + + /* Create a new subtree for a length of 24 bytes */ + ti = proto_tree_add_text(tree, tvb, offset, 24, + "Source %u", counter ); + ssrc_tree = proto_item_add_subtree( ti, ett_ssrc ); + + /* SSRC_n source identifier, 32 bits */ + proto_tree_add_item( ssrc_tree, hf_rtcp_ssrc_source, tvb, offset, 4, ENC_BIG_ENDIAN ); + offset += 4; + + ti = proto_tree_add_text(ssrc_tree, tvb, offset, 20, "SSRC contents" ); + ssrc_sub_tree = proto_item_add_subtree( ti, ett_ssrc_item ); + + /* Fraction lost, 8bits */ + rr_flt = tvb_get_guint8( tvb, offset ); + proto_tree_add_uint_format( ssrc_sub_tree, hf_rtcp_ssrc_fraction, tvb, + offset, 1, rr_flt, "Fraction lost: %u / 256", rr_flt ); + offset++; + + /* Cumulative number of packets lost, 24 bits */ + proto_tree_add_item( ssrc_sub_tree, hf_rtcp_ssrc_cum_nr, tvb, + offset, 3, ENC_BIG_ENDIAN ); + offset += 3; + + /* Extended highest sequence nr received, 32 bits + * Just for the sake of it, let's add another subtree + * because this might be a little clearer + */ + ti = proto_tree_add_item( ssrc_tree, hf_rtcp_ssrc_ext_high_seq, + tvb, offset, 4, ENC_BIG_ENDIAN ); + high_sec_tree = proto_item_add_subtree( ti, ett_ssrc_ext_high ); + /* Sequence number cycles */ + proto_tree_add_item( high_sec_tree, hf_rtcp_ssrc_high_cycles, + tvb, offset, 2, ENC_BIG_ENDIAN ); + offset += 2; + /* highest sequence number received */ + proto_tree_add_item( high_sec_tree, hf_rtcp_ssrc_high_seq, + tvb, offset, 2, ENC_BIG_ENDIAN ); + offset += 2; + + /* Interarrival jitter */ + proto_tree_add_item( ssrc_tree, hf_rtcp_ssrc_jitter, tvb, + offset, 4, ENC_BIG_ENDIAN ); + offset += 4; + + /* Last SR timestamp */ + lsr = tvb_get_ntohl( tvb, offset ); + proto_tree_add_item( ssrc_tree, hf_rtcp_ssrc_lsr, tvb, + offset, 4, ENC_BIG_ENDIAN ); + offset += 4; + + /* Delay since last SR timestamp */ + dlsr = tvb_get_ntohl( tvb, offset ); + ti = proto_tree_add_item( ssrc_tree, hf_rtcp_ssrc_dlsr, tvb, + offset, 4, ENC_BIG_ENDIAN ); + proto_item_append_text(ti, " (%d milliseconds)", + (int)(((double)dlsr/(double)65536) * 1000.0)); + offset += 4; + + /* Do roundtrip calculation */ + if (global_rtcp_show_roundtrip_calculation) + { + /* Based on delay since SR was sent in other direction */ + calculate_roundtrip_delay(tvb, pinfo, ssrc_tree, lsr, dlsr); + } + + counter++; + } + + /* If length remaining, assume profile-specific extension bytes */ + if ((offset-rr_offset) < (int)packet_length) + { + proto_tree_add_item(tree, hf_rtcp_profile_specific_extension, tvb, offset, + packet_length - (offset - rr_offset), ENC_NA); + offset = rr_offset + packet_length; + } + + return offset; } static int dissect_rtcp_sr( packet_info *pinfo, tvbuff_t *tvb, int offset, proto_tree *tree, unsigned int count, unsigned int packet_length ) { - proto_item* item; - guint32 ts_msw, ts_lsw; - int sr_offset = offset; - - /* NTP timestamp */ - ts_msw = tvb_get_ntohl(tvb, offset); - proto_tree_add_item(tree, hf_rtcp_ntp_msw, tvb, offset, 4, ENC_BIG_ENDIAN); - - ts_lsw = tvb_get_ntohl(tvb, offset+4); - proto_tree_add_item(tree, hf_rtcp_ntp_lsw, tvb, offset+4, 4, ENC_BIG_ENDIAN); - - item = proto_tree_add_item(tree, hf_rtcp_ntp, tvb, offset, 8, ENC_TIME_NTP|ENC_BIG_ENDIAN); - PROTO_ITEM_SET_GENERATED(item); - offset += 8; - - /* RTP timestamp, 32 bits */ - proto_tree_add_item( tree, hf_rtcp_rtp_timestamp, tvb, offset, 4, ENC_BIG_ENDIAN ); - offset += 4; - /* Sender's packet count, 32 bits */ - proto_tree_add_item( tree, hf_rtcp_sender_pkt_cnt, tvb, offset, 4, ENC_BIG_ENDIAN ); - offset += 4; - /* Sender's octet count, 32 bits */ - proto_tree_add_item( tree, hf_rtcp_sender_oct_cnt, tvb, offset, 4, ENC_BIG_ENDIAN ); - offset += 4; - - /* Record the time of this packet in the sender's conversation */ - if (global_rtcp_show_roundtrip_calculation) - { - /* Use middle 32 bits of 64-bit time value */ - guint32 lsr = ((ts_msw & 0x0000ffff) << 16 | (ts_lsw & 0xffff0000) >> 16); - - /* Record the time that we sent this in appropriate conversation */ - remember_outgoing_sr(pinfo, lsr); - } - - /* The rest of the packet is equal to the RR packet */ - if ( count != 0 ) - offset = dissect_rtcp_rr( pinfo, tvb, offset, tree, count, packet_length-(offset-sr_offset) ); - else - { - /* If length remaining, assume profile-specific extension bytes */ - if ((offset-sr_offset) < (int)packet_length) - { - proto_tree_add_item(tree, hf_rtcp_profile_specific_extension, tvb, offset, - packet_length - (offset - sr_offset), ENC_NA); - offset = sr_offset + packet_length; - } - } - - return offset; + proto_item* item; + guint32 ts_msw, ts_lsw; + int sr_offset = offset; + + /* NTP timestamp */ + ts_msw = tvb_get_ntohl(tvb, offset); + proto_tree_add_item(tree, hf_rtcp_ntp_msw, tvb, offset, 4, ENC_BIG_ENDIAN); + + ts_lsw = tvb_get_ntohl(tvb, offset+4); + proto_tree_add_item(tree, hf_rtcp_ntp_lsw, tvb, offset+4, 4, ENC_BIG_ENDIAN); + + item = proto_tree_add_item(tree, hf_rtcp_ntp, tvb, offset, 8, ENC_TIME_NTP|ENC_BIG_ENDIAN); + PROTO_ITEM_SET_GENERATED(item); + offset += 8; + + /* RTP timestamp, 32 bits */ + proto_tree_add_item( tree, hf_rtcp_rtp_timestamp, tvb, offset, 4, ENC_BIG_ENDIAN ); + offset += 4; + /* Sender's packet count, 32 bits */ + proto_tree_add_item( tree, hf_rtcp_sender_pkt_cnt, tvb, offset, 4, ENC_BIG_ENDIAN ); + offset += 4; + /* Sender's octet count, 32 bits */ + proto_tree_add_item( tree, hf_rtcp_sender_oct_cnt, tvb, offset, 4, ENC_BIG_ENDIAN ); + offset += 4; + + /* Record the time of this packet in the sender's conversation */ + if (global_rtcp_show_roundtrip_calculation) + { + /* Use middle 32 bits of 64-bit time value */ + guint32 lsr = ((ts_msw & 0x0000ffff) << 16 | (ts_lsw & 0xffff0000) >> 16); + + /* Record the time that we sent this in appropriate conversation */ + remember_outgoing_sr(pinfo, lsr); + } + + /* The rest of the packet is equal to the RR packet */ + if ( count != 0 ) + offset = dissect_rtcp_rr( pinfo, tvb, offset, tree, count, packet_length-(offset-sr_offset) ); + else + { + /* If length remaining, assume profile-specific extension bytes */ + if ((offset-sr_offset) < (int)packet_length) + { + proto_tree_add_item(tree, hf_rtcp_profile_specific_extension, tvb, offset, + packet_length - (offset - sr_offset), ENC_NA); + offset = sr_offset + packet_length; + } + } + + return offset; } /* Look for conversation info and display any setup info found */ void show_setup_info(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { - /* Conversation and current data */ - conversation_t *p_conv = NULL; - struct _rtcp_conversation_info *p_conv_data = NULL; - - /* Use existing packet data if available */ - p_conv_data = p_get_proto_data(pinfo->fd, proto_rtcp); - - if (!p_conv_data) - { - /* First time, get info from conversation */ - p_conv = find_conversation(pinfo->fd->num, &pinfo->net_dst, &pinfo->net_src, - pinfo->ptype, - pinfo->destport, pinfo->srcport, NO_ADDR_B); - - if (p_conv) - { - /* Look for data in conversation */ - struct _rtcp_conversation_info *p_conv_packet_data; - p_conv_data = conversation_get_proto_data(p_conv, proto_rtcp); - - if (p_conv_data) - { - /* Save this conversation info into packet info */ - p_conv_packet_data = se_memdup(p_conv_data, - sizeof(struct _rtcp_conversation_info)); - - p_add_proto_data(pinfo->fd, proto_rtcp, p_conv_packet_data); - } - } - } - - /* Create setup info subtree with summary info. */ - if (p_conv_data && p_conv_data->setup_method_set) - { - proto_tree *rtcp_setup_tree; - proto_item *ti = proto_tree_add_string_format(tree, hf_rtcp_setup, tvb, 0, 0, - "", - "Stream setup by %s (frame %u)", - p_conv_data->setup_method, - p_conv_data->setup_frame_number); - PROTO_ITEM_SET_GENERATED(ti); - rtcp_setup_tree = proto_item_add_subtree(ti, ett_rtcp_setup); - if (rtcp_setup_tree) - { - /* Add details into subtree */ - proto_item* item = proto_tree_add_uint(rtcp_setup_tree, hf_rtcp_setup_frame, - tvb, 0, 0, p_conv_data->setup_frame_number); - PROTO_ITEM_SET_GENERATED(item); - item = proto_tree_add_string(rtcp_setup_tree, hf_rtcp_setup_method, - tvb, 0, 0, p_conv_data->setup_method); - PROTO_ITEM_SET_GENERATED(item); - } - } + /* Conversation and current data */ + conversation_t *p_conv = NULL; + struct _rtcp_conversation_info *p_conv_data = NULL; + + /* Use existing packet data if available */ + p_conv_data = p_get_proto_data(pinfo->fd, proto_rtcp); + + if (!p_conv_data) + { + /* First time, get info from conversation */ + p_conv = find_conversation(pinfo->fd->num, &pinfo->net_dst, &pinfo->net_src, + pinfo->ptype, + pinfo->destport, pinfo->srcport, NO_ADDR_B); + + if (p_conv) + { + /* Look for data in conversation */ + struct _rtcp_conversation_info *p_conv_packet_data; + p_conv_data = conversation_get_proto_data(p_conv, proto_rtcp); + + if (p_conv_data) + { + /* Save this conversation info into packet info */ + p_conv_packet_data = se_memdup(p_conv_data, + sizeof(struct _rtcp_conversation_info)); + + p_add_proto_data(pinfo->fd, proto_rtcp, p_conv_packet_data); + } + } + } + + /* Create setup info subtree with summary info. */ + if (p_conv_data && p_conv_data->setup_method_set) + { + proto_tree *rtcp_setup_tree; + proto_item *ti = proto_tree_add_string_format(tree, hf_rtcp_setup, tvb, 0, 0, + "", + "Stream setup by %s (frame %u)", + p_conv_data->setup_method, + p_conv_data->setup_frame_number); + PROTO_ITEM_SET_GENERATED(ti); + rtcp_setup_tree = proto_item_add_subtree(ti, ett_rtcp_setup); + if (rtcp_setup_tree) + { + /* Add details into subtree */ + proto_item* item = proto_tree_add_uint(rtcp_setup_tree, hf_rtcp_setup_frame, + tvb, 0, 0, p_conv_data->setup_frame_number); + PROTO_ITEM_SET_GENERATED(item); + item = proto_tree_add_string(rtcp_setup_tree, hf_rtcp_setup_method, + tvb, 0, 0, p_conv_data->setup_method); + PROTO_ITEM_SET_GENERATED(item); + } + } } /* Update conversation data to record time that outgoing rr/sr was sent */ static void remember_outgoing_sr(packet_info *pinfo, long lsr) { - conversation_t *p_conv = NULL; - struct _rtcp_conversation_info *p_conv_data = NULL; - struct _rtcp_conversation_info *p_packet_data = NULL; - - /* This information will be accessed when an incoming packet comes back to - the side that sent this packet, so no use storing in the packet - info. However, do store the fact that we've already set this info - before */ - - - /**************************************************************************/ - /* First of all, see if we've already stored this information for this sr */ - - /* Look first in packet info */ - p_packet_data = p_get_proto_data(pinfo->fd, proto_rtcp); - if (p_packet_data && p_packet_data->last_received_set && - p_packet_data->last_received_frame_number >= pinfo->fd->num) - { - /* We already did this, OK */ - return; - } - - - /**************************************************************************/ - /* Otherwise, we want to find/create the conversation and update it */ - - /* First time, get info from conversation. - Even though we think of this as an outgoing packet being sent, - we store the time as being received by the destination. */ - p_conv = find_conversation(pinfo->fd->num, &pinfo->net_dst, &pinfo->net_src, - pinfo->ptype, - pinfo->destport, pinfo->srcport, NO_ADDR_B); - - /* If the conversation doesn't exist, create it now. */ - if (!p_conv) - { - p_conv = conversation_new(pinfo->fd->num, &pinfo->net_dst, &pinfo->net_src, PT_UDP, - pinfo->destport, pinfo->srcport, - NO_ADDR2); - if (!p_conv) - { - /* Give up if can't create it */ - return; - } - } - - - /****************************************************/ - /* Now find/create conversation data */ - p_conv_data = conversation_get_proto_data(p_conv, proto_rtcp); - if (!p_conv_data) - { - /* Allocate memory for data */ - p_conv_data = se_alloc0(sizeof(struct _rtcp_conversation_info)); - - /* Add it to conversation. */ - conversation_add_proto_data(p_conv, proto_rtcp, p_conv_data); - } - - /*******************************************************/ - /* Update conversation data */ - p_conv_data->last_received_set = TRUE; - p_conv_data->last_received_frame_number = pinfo->fd->num; - p_conv_data->last_received_timestamp = pinfo->fd->abs_ts; - p_conv_data->last_received_ts = lsr; - - - /****************************************************************/ - /* Update packet info to record conversation state */ - - /* Will use/create packet info */ - if (!p_packet_data) - { - p_packet_data = se_alloc0(sizeof(struct _rtcp_conversation_info)); - - p_add_proto_data(pinfo->fd, proto_rtcp, p_packet_data); - } - - /* Copy current conversation data into packet info */ - p_packet_data->last_received_set = TRUE; - p_packet_data->last_received_frame_number = p_conv_data->last_received_frame_number; + conversation_t *p_conv = NULL; + struct _rtcp_conversation_info *p_conv_data = NULL; + struct _rtcp_conversation_info *p_packet_data = NULL; + + /* This information will be accessed when an incoming packet comes back to + the side that sent this packet, so no use storing in the packet + info. However, do store the fact that we've already set this info + before */ + + + /**************************************************************************/ + /* First of all, see if we've already stored this information for this sr */ + + /* Look first in packet info */ + p_packet_data = p_get_proto_data(pinfo->fd, proto_rtcp); + if (p_packet_data && p_packet_data->last_received_set && + p_packet_data->last_received_frame_number >= pinfo->fd->num) + { + /* We already did this, OK */ + return; + } + + + /**************************************************************************/ + /* Otherwise, we want to find/create the conversation and update it */ + + /* First time, get info from conversation. + Even though we think of this as an outgoing packet being sent, + we store the time as being received by the destination. */ + p_conv = find_conversation(pinfo->fd->num, &pinfo->net_dst, &pinfo->net_src, + pinfo->ptype, + pinfo->destport, pinfo->srcport, NO_ADDR_B); + + /* If the conversation doesn't exist, create it now. */ + if (!p_conv) + { + p_conv = conversation_new(pinfo->fd->num, &pinfo->net_dst, &pinfo->net_src, PT_UDP, + pinfo->destport, pinfo->srcport, + NO_ADDR2); + if (!p_conv) + { + /* Give up if can't create it */ + return; + } + } + + + /****************************************************/ + /* Now find/create conversation data */ + p_conv_data = conversation_get_proto_data(p_conv, proto_rtcp); + if (!p_conv_data) + { + /* Allocate memory for data */ + p_conv_data = se_alloc0(sizeof(struct _rtcp_conversation_info)); + + /* Add it to conversation. */ + conversation_add_proto_data(p_conv, proto_rtcp, p_conv_data); + } + + /*******************************************************/ + /* Update conversation data */ + p_conv_data->last_received_set = TRUE; + p_conv_data->last_received_frame_number = pinfo->fd->num; + p_conv_data->last_received_timestamp = pinfo->fd->abs_ts; + p_conv_data->last_received_ts = lsr; + + + /****************************************************************/ + /* Update packet info to record conversation state */ + + /* Will use/create packet info */ + if (!p_packet_data) + { + p_packet_data = se_alloc0(sizeof(struct _rtcp_conversation_info)); + + p_add_proto_data(pinfo->fd, proto_rtcp, p_packet_data); + } + + /* Copy current conversation data into packet info */ + p_packet_data->last_received_set = TRUE; + p_packet_data->last_received_frame_number = p_conv_data->last_received_frame_number; } @@ -2533,105 +2533,105 @@ static void remember_outgoing_sr(packet_info *pinfo, long lsr) static void calculate_roundtrip_delay(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint32 lsr, guint32 dlsr) { - /*****************************************************/ - /* This is called dissecting an SR. We need to: - - look in the packet info for stored calculation. If found, use. - - look up the conversation of the sending side to see when the - 'last SR' was detected (received) - - calculate the network delay using the that packet time, - this packet time, and dlsr - *****************************************************/ - - conversation_t *p_conv = NULL; - struct _rtcp_conversation_info *p_conv_data = NULL; - struct _rtcp_conversation_info *p_packet_data = NULL; - - - /*************************************************/ - /* Look for previous result */ - p_packet_data = p_get_proto_data(pinfo->fd, proto_rtcp); - if (p_packet_data && p_packet_data->lsr_matched) - { - /* Show info. */ - add_roundtrip_delay_info(tvb, pinfo, tree, - p_packet_data->calculated_delay_used_frame, - p_packet_data->calculated_delay_report_gap, - p_packet_data->calculated_delay); - return; - } - - - /********************************************************************/ - /* Look for captured timestamp of last SR in conversation of sender */ - /* of this packet */ - p_conv = find_conversation(pinfo->fd->num, &pinfo->net_src, &pinfo->net_dst, - pinfo->ptype, - pinfo->srcport, pinfo->destport, NO_ADDR_B); - if (!p_conv) - { - return; - } - - /* Look for conversation data */ - p_conv_data = conversation_get_proto_data(p_conv, proto_rtcp); - if (!p_conv_data) - { - return; - } - - if (p_conv_data->last_received_set) - { - /* Store result of calculation in packet info */ - if (!p_packet_data) - { - /* Create packet info if it doesn't exist */ - p_packet_data = se_alloc0(sizeof(struct _rtcp_conversation_info)); - - /* Set as packet info */ - p_add_proto_data(pinfo->fd, proto_rtcp, p_packet_data); - } - - /* Don't allow match seemingly calculated from same (or later!) frame */ - if (pinfo->fd->num <= p_conv_data->last_received_frame_number) - { - return; - } - - /* The previous report must match the lsr given here */ - if (p_conv_data->last_received_ts == lsr) - { - /* Look at time of since original packet was sent */ - gint seconds_between_packets = (gint) - (pinfo->fd->abs_ts.secs - p_conv_data->last_received_timestamp.secs); - gint nseconds_between_packets = - pinfo->fd->abs_ts.nsecs - p_conv_data->last_received_timestamp.nsecs; - - gint total_gap = (seconds_between_packets*1000) + - (nseconds_between_packets / 1000000); - gint dlsr_ms = (int)(((double)dlsr/(double)65536) * 1000.0); - gint delay; - - /* Delay is gap - dlsr (N.B. this is allowed to be -ve) */ - delay = total_gap - dlsr_ms; - - /* Record that the LSR matches */ - p_packet_data->lsr_matched = TRUE; - - /* No useful calculation can be done if dlsr not set... */ - if (dlsr) - { - p_packet_data->calculated_delay = delay; - p_packet_data->calculated_delay_report_gap = total_gap; - p_packet_data->calculated_delay_used_frame = p_conv_data->last_received_frame_number; - } - - /* Show info. */ - add_roundtrip_delay_info(tvb, pinfo, tree, - p_conv_data->last_received_frame_number, - total_gap, - delay); - } - } + /*****************************************************/ + /* This is called dissecting an SR. We need to: + - look in the packet info for stored calculation. If found, use. + - look up the conversation of the sending side to see when the + 'last SR' was detected (received) + - calculate the network delay using the that packet time, + this packet time, and dlsr + *****************************************************/ + + conversation_t *p_conv = NULL; + struct _rtcp_conversation_info *p_conv_data = NULL; + struct _rtcp_conversation_info *p_packet_data = NULL; + + + /*************************************************/ + /* Look for previous result */ + p_packet_data = p_get_proto_data(pinfo->fd, proto_rtcp); + if (p_packet_data && p_packet_data->lsr_matched) + { + /* Show info. */ + add_roundtrip_delay_info(tvb, pinfo, tree, + p_packet_data->calculated_delay_used_frame, + p_packet_data->calculated_delay_report_gap, + p_packet_data->calculated_delay); + return; + } + + + /********************************************************************/ + /* Look for captured timestamp of last SR in conversation of sender */ + /* of this packet */ + p_conv = find_conversation(pinfo->fd->num, &pinfo->net_src, &pinfo->net_dst, + pinfo->ptype, + pinfo->srcport, pinfo->destport, NO_ADDR_B); + if (!p_conv) + { + return; + } + + /* Look for conversation data */ + p_conv_data = conversation_get_proto_data(p_conv, proto_rtcp); + if (!p_conv_data) + { + return; + } + + if (p_conv_data->last_received_set) + { + /* Store result of calculation in packet info */ + if (!p_packet_data) + { + /* Create packet info if it doesn't exist */ + p_packet_data = se_alloc0(sizeof(struct _rtcp_conversation_info)); + + /* Set as packet info */ + p_add_proto_data(pinfo->fd, proto_rtcp, p_packet_data); + } + + /* Don't allow match seemingly calculated from same (or later!) frame */ + if (pinfo->fd->num <= p_conv_data->last_received_frame_number) + { + return; + } + + /* The previous report must match the lsr given here */ + if (p_conv_data->last_received_ts == lsr) + { + /* Look at time of since original packet was sent */ + gint seconds_between_packets = (gint) + (pinfo->fd->abs_ts.secs - p_conv_data->last_received_timestamp.secs); + gint nseconds_between_packets = + pinfo->fd->abs_ts.nsecs - p_conv_data->last_received_timestamp.nsecs; + + gint total_gap = (seconds_between_packets*1000) + + (nseconds_between_packets / 1000000); + gint dlsr_ms = (int)(((double)dlsr/(double)65536) * 1000.0); + gint delay; + + /* Delay is gap - dlsr (N.B. this is allowed to be -ve) */ + delay = total_gap - dlsr_ms; + + /* Record that the LSR matches */ + p_packet_data->lsr_matched = TRUE; + + /* No useful calculation can be done if dlsr not set... */ + if (dlsr) + { + p_packet_data->calculated_delay = delay; + p_packet_data->calculated_delay_report_gap = total_gap; + p_packet_data->calculated_delay_used_frame = p_conv_data->last_received_frame_number; + } + + /* Show info. */ + add_roundtrip_delay_info(tvb, pinfo, tree, + p_conv_data->last_received_frame_number, + total_gap, + delay); + } + } } /* Show the calcaulted roundtrip delay info by adding protocol tree items @@ -2640,50 +2640,50 @@ static void add_roundtrip_delay_info(tvbuff_t *tvb, packet_info *pinfo, proto_tr guint frame, guint gap_between_reports, gint delay) { - /* 'Last SR' frame used in calculation. Show this even if no delay shown */ - proto_item* item = proto_tree_add_uint(tree, - hf_rtcp_last_sr_timestamp_frame, - tvb, 0, 0, frame); - PROTO_ITEM_SET_GENERATED(item); - - /* Time elapsed since 'Last SR' time in capture */ - item = proto_tree_add_uint(tree, - hf_rtcp_time_since_last_sr, - tvb, 0, 0, gap_between_reports); - PROTO_ITEM_SET_GENERATED(item); - - /* Don't report on calculated delays below the threshold. - Will report delays less than -threshold, to highlight - problems with generated reports */ - if (abs(delay) < (int)global_rtcp_show_roundtrip_calculation_minimum) - { - return; - } - - /* Calculated delay in ms */ - item = proto_tree_add_int(tree, hf_rtcp_roundtrip_delay, tvb, 0, 0, delay); - PROTO_ITEM_SET_GENERATED(item); - - /* Add to expert info */ - if (delay >= 0) - { - expert_add_info_format(pinfo, item, - PI_SEQUENCE, PI_NOTE, - "RTCP round-trip delay detected (%d ms)", - delay); - } - else - { - expert_add_info_format(pinfo, item, - PI_SEQUENCE, PI_ERROR, - "Negative RTCP round-trip delay detected (%d ms)", - delay); - } - - /* Report delay in INFO column */ - col_append_fstr(pinfo->cinfo, COL_INFO, - " (roundtrip delay <-> %s = %dms, using frame %u) ", - ep_address_to_str(&pinfo->net_src), delay, frame); + /* 'Last SR' frame used in calculation. Show this even if no delay shown */ + proto_item* item = proto_tree_add_uint(tree, + hf_rtcp_last_sr_timestamp_frame, + tvb, 0, 0, frame); + PROTO_ITEM_SET_GENERATED(item); + + /* Time elapsed since 'Last SR' time in capture */ + item = proto_tree_add_uint(tree, + hf_rtcp_time_since_last_sr, + tvb, 0, 0, gap_between_reports); + PROTO_ITEM_SET_GENERATED(item); + + /* Don't report on calculated delays below the threshold. + Will report delays less than -threshold, to highlight + problems with generated reports */ + if (abs(delay) < (int)global_rtcp_show_roundtrip_calculation_minimum) + { + return; + } + + /* Calculated delay in ms */ + item = proto_tree_add_int(tree, hf_rtcp_roundtrip_delay, tvb, 0, 0, delay); + PROTO_ITEM_SET_GENERATED(item); + + /* Add to expert info */ + if (delay >= 0) + { + expert_add_info_format(pinfo, item, + PI_SEQUENCE, PI_NOTE, + "RTCP round-trip delay detected (%d ms)", + delay); + } + else + { + expert_add_info_format(pinfo, item, + PI_SEQUENCE, PI_ERROR, + "Negative RTCP round-trip delay detected (%d ms)", + delay); + } + + /* Report delay in INFO column */ + col_append_fstr(pinfo->cinfo, COL_INFO, + " (roundtrip delay <-> %s = %dms, using frame %u) ", + ep_address_to_str(&pinfo->net_src), delay, frame); } static int @@ -2972,2025 +2972,2025 @@ dissect_rtcp( tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree ) void proto_register_rtcp(void) { - static hf_register_info hf[] = - { - { - &hf_rtcp_version, - { - "Version", - "rtcp.version", - FT_UINT8, - BASE_DEC, - VALS(rtcp_version_vals), - 0xC0, - NULL, HFILL - } - }, - { - &hf_rtcp_padding, - { - "Padding", - "rtcp.padding", - FT_BOOLEAN, - 8, - NULL, - 0x20, - NULL, HFILL - } - }, - { - &hf_rtcp_rc, - { - "Reception report count", - "rtcp.rc", - FT_UINT8, - BASE_DEC, - NULL, - 0x1F, - NULL, HFILL - } - }, - { - &hf_rtcp_sc, - { - "Source count", - "rtcp.sc", - FT_UINT8, - BASE_DEC, - NULL, - 0x1F, - NULL, HFILL - } - }, - { - &hf_rtcp_pt, - { - "Packet type", - "rtcp.pt", - FT_UINT8, - BASE_DEC, - VALS( rtcp_packet_type_vals ), - 0x0, - NULL, HFILL - } - }, - { - &hf_rtcp_length, - { - "Length", - "rtcp.length", - FT_UINT16, - BASE_DEC, - NULL, - 0x0, - "32-bit words (-1) in packet", HFILL - } - }, - { - &hf_rtcp_ssrc_sender, - { - "Sender SSRC", - "rtcp.senderssrc", - FT_UINT32, - BASE_HEX_DEC, - NULL, - 0x0, - NULL, HFILL - } - }, - { + static hf_register_info hf[] = + { + { + &hf_rtcp_version, + { + "Version", + "rtcp.version", + FT_UINT8, + BASE_DEC, + VALS(rtcp_version_vals), + 0xC0, + NULL, HFILL + } + }, + { + &hf_rtcp_padding, + { + "Padding", + "rtcp.padding", + FT_BOOLEAN, + 8, + NULL, + 0x20, + NULL, HFILL + } + }, + { + &hf_rtcp_rc, + { + "Reception report count", + "rtcp.rc", + FT_UINT8, + BASE_DEC, + NULL, + 0x1F, + NULL, HFILL + } + }, + { + &hf_rtcp_sc, + { + "Source count", + "rtcp.sc", + FT_UINT8, + BASE_DEC, + NULL, + 0x1F, + NULL, HFILL + } + }, + { + &hf_rtcp_pt, + { + "Packet type", + "rtcp.pt", + FT_UINT8, + BASE_DEC, + VALS( rtcp_packet_type_vals ), + 0x0, + NULL, HFILL + } + }, + { + &hf_rtcp_length, + { + "Length", + "rtcp.length", + FT_UINT16, + BASE_DEC, + NULL, + 0x0, + "32-bit words (-1) in packet", HFILL + } + }, + { + &hf_rtcp_ssrc_sender, + { + "Sender SSRC", + "rtcp.senderssrc", + FT_UINT32, + BASE_HEX_DEC, + NULL, + 0x0, + NULL, HFILL + } + }, + { &hf_rtcp_ssrc_media_source, - { - "Media source SSRC", - "rtcp.mediassrc", - FT_UINT32, - BASE_HEX_DEC, - NULL, - 0x0, - NULL, HFILL - } - }, - { - &hf_rtcp_ntp_msw, - { - "Timestamp, MSW", - "rtcp.timestamp.ntp.msw", - FT_UINT32, - BASE_DEC_HEX, - NULL, - 0x0, - NULL, HFILL - } - }, - { - &hf_rtcp_ntp_lsw, - { - "Timestamp, LSW", - "rtcp.timestamp.ntp.lsw", - FT_UINT32, - BASE_DEC_HEX, - NULL, - 0x0, - NULL, HFILL - } - }, - { - &hf_rtcp_ntp, - { - "MSW and LSW as NTP timestamp", - "rtcp.timestamp.ntp", - FT_ABSOLUTE_TIME, - ABSOLUTE_TIME_UTC, - NULL, - 0x0, - NULL, HFILL - } - }, - { - &hf_rtcp_rtp_timestamp, - { - "RTP timestamp", - "rtcp.timestamp.rtp", - FT_UINT32, - BASE_DEC, - NULL, - 0x0, - NULL, HFILL - } - }, - { - &hf_rtcp_sender_pkt_cnt, - { - "Sender's packet count", - "rtcp.sender.packetcount", - FT_UINT32, - BASE_DEC, - NULL, - 0x0, - NULL, HFILL - } - }, - { - &hf_rtcp_sender_oct_cnt, - { - "Sender's octet count", - "rtcp.sender.octetcount", - FT_UINT32, - BASE_DEC, - NULL, - 0x0, - NULL, HFILL - } - }, - { - &hf_rtcp_ssrc_source, - { - "Identifier", - "rtcp.ssrc.identifier", - FT_UINT32, - BASE_HEX_DEC, - NULL, - 0x0, - NULL, HFILL - } - }, - { - &hf_rtcp_ssrc_fraction, - { - "Fraction lost", - "rtcp.ssrc.fraction", - FT_UINT8, - BASE_DEC, - NULL, - 0x0, - NULL, HFILL - } - }, - { - &hf_rtcp_ssrc_cum_nr, - { - "Cumulative number of packets lost", - "rtcp.ssrc.cum_nr", - FT_INT24, - BASE_DEC, - NULL, - 0x0, - NULL, HFILL - } - }, - { - &hf_rtcp_ssrc_ext_high_seq, - { - "Extended highest sequence number received", - "rtcp.ssrc.ext_high", - FT_UINT32, - BASE_DEC, - NULL, - 0x0, - NULL, HFILL - } - }, - { - &hf_rtcp_ssrc_high_seq, - { - "Highest sequence number received", - "rtcp.ssrc.high_seq", - FT_UINT16, - BASE_DEC, - NULL, - 0x0, - NULL, HFILL - } - }, - { - &hf_rtcp_ssrc_high_cycles, - { - "Sequence number cycles count", - "rtcp.ssrc.high_cycles", - FT_UINT16, - BASE_DEC, - NULL, - 0x0, - NULL, HFILL - } - }, - { - &hf_rtcp_ssrc_jitter, - { - "Interarrival jitter", - "rtcp.ssrc.jitter", - FT_UINT32, - BASE_DEC, - NULL, - 0x0, - NULL, HFILL - } - }, - { - &hf_rtcp_ssrc_lsr, - { - "Last SR timestamp", - "rtcp.ssrc.lsr", - FT_UINT32, - BASE_DEC_HEX, - NULL, - 0x0, - NULL, HFILL - } - }, - { - &hf_rtcp_ssrc_dlsr, - { - "Delay since last SR timestamp", - "rtcp.ssrc.dlsr", - FT_UINT32, - BASE_DEC, - NULL, - 0x0, - NULL, HFILL - } - }, - { - &hf_rtcp_ssrc_csrc, - { - "SSRC / CSRC identifier", - "rtcp.sdes.ssrc_csrc", - FT_UINT32, - BASE_HEX_DEC, - NULL, - 0x0, - NULL, HFILL - } - }, - { - &hf_rtcp_sdes_type, - { - "Type", - "rtcp.sdes.type", - FT_UINT8, - BASE_DEC, - VALS( rtcp_sdes_type_vals ), - 0x0, - NULL, HFILL - } - }, - { - &hf_rtcp_sdes_length, - { - "Length", - "rtcp.sdes.length", - FT_UINT32, - BASE_DEC, - NULL, - 0x0, - NULL, HFILL - } - }, - { - &hf_rtcp_sdes_text, - { - "Text", - "rtcp.sdes.text", - FT_STRING, - BASE_NONE, - NULL, - 0x0, - NULL, HFILL - } - }, - { - &hf_rtcp_sdes_prefix_len, - { - "Prefix length", - "rtcp.sdes.prefix.length", - FT_UINT8, - BASE_DEC, - NULL, - 0x0, - NULL, HFILL - } - }, - { - &hf_rtcp_sdes_prefix_string, - { - "Prefix string", - "rtcp.sdes.prefix.string", - FT_STRING, - BASE_NONE, - NULL, - 0x0, - NULL, HFILL - } - }, - { - &hf_rtcp_subtype, - { - "Subtype", - "rtcp.app.subtype", - FT_UINT8, - BASE_DEC, - NULL, - 0x0, - NULL, HFILL - } - }, - { - &hf_rtcp_name_ascii, - { - "Name (ASCII)", - "rtcp.app.name", - FT_STRING, - BASE_NONE, - NULL, - 0x0, - NULL, HFILL - } - }, - { - &hf_rtcp_app_data, - { - "Application specific data", - "rtcp.app.data", - FT_BYTES, - BASE_NONE, - NULL, - 0x0, - NULL, HFILL - } - }, - { - &hf_rtcp_app_poc1, - { - "PoC1 Application specific data", - "rtcp.app.poc1", - FT_NONE, - BASE_NONE, - NULL, - 0x0, - NULL, HFILL - } - }, - { - &hf_rtcp_app_poc1_subtype, - { - "Subtype", - "rtcp.app.PoC1.subtype", - FT_UINT8, - BASE_DEC, - VALS(rtcp_app_poc1_floor_cnt_type_vals), - 0x0, - NULL, HFILL - } - }, - { - &hf_rtcp_app_poc1_sip_uri, - { - "SIP URI", - "rtcp.app.poc1.sip.uri", - FT_UINT_STRING, - BASE_NONE, - NULL, - 0x0, - NULL, HFILL - } - }, - { - &hf_rtcp_app_poc1_disp_name, - { - "Display Name", - "rtcp.app.poc1.disp.name", - FT_UINT_STRING, - BASE_NONE, - NULL, - 0x0, - NULL, HFILL - } - }, - { - &hf_rtcp_app_poc1_priority, - { - "Priority", - "rtcp.app.poc1.priority", - FT_UINT8, - BASE_DEC, - VALS(rtcp_app_poc1_qsresp_priority_vals), - 0x0, - NULL, HFILL - } - }, - { - &hf_rtcp_app_poc1_request_ts, - { - "Talk Burst Request Timestamp", - "rtcp.app.poc1.request.ts", - FT_ABSOLUTE_TIME, - ABSOLUTE_TIME_UTC, - NULL, - 0x0, - NULL, HFILL - } - }, - { - &hf_rtcp_app_poc1_stt, - { - "Stop talking timer", - "rtcp.app.poc1.stt", - FT_UINT16, - BASE_DEC, - NULL, - 0x0, - NULL, HFILL - } - }, - { - &hf_rtcp_app_poc1_partic, - { - "Number of participants", - "rtcp.app.poc1.participants", - FT_UINT16, - BASE_DEC, - NULL, - 0x0, - NULL, HFILL - } - }, - { - &hf_rtcp_app_poc1_ssrc_granted, - { - "SSRC of client granted permission to talk", - "rtcp.app.poc1.ssrc.granted", - FT_UINT32, - BASE_DEC, - NULL, - 0x0, - NULL, HFILL - } - }, - { - &hf_rtcp_app_poc1_last_pkt_seq_no, - { - "Sequence number of last RTP packet", - "rtcp.app.poc1.last.pkt.seq.no", - FT_UINT16, - BASE_DEC, - NULL, - 0x0, - NULL, HFILL - } - }, - { - &hf_rtcp_app_poc1_ignore_seq_no, - { - "Ignore sequence number field", - "rtcp.app.poc1.ignore.seq.no", - FT_UINT16, - BASE_HEX, - NULL, - 0x8000, - NULL, HFILL - } - }, - { - &hf_rtcp_app_poc1_reason_code1, - { - "Reason code", - "rtcp.app.poc1.reason.code", - FT_UINT8, - BASE_DEC, - VALS(rtcp_app_poc1_reason_code1_vals), - 0x0, - NULL, HFILL - } - }, - { - &hf_rtcp_app_poc1_reason1_phrase, - { - "Reason Phrase", - "rtcp.app.poc1.reason.phrase", - FT_UINT_STRING, - BASE_NONE, - NULL, - 0x0, - NULL, HFILL - } - }, - { - &hf_rtcp_app_poc1_reason_code2, - { - "Reason code", - "rtcp.app.poc1.reason.code", - FT_UINT16, - BASE_DEC, - VALS(rtcp_app_poc1_reason_code2_vals), - 0x0, - NULL, HFILL - } - }, - { - &hf_rtcp_app_poc1_new_time_request, - { - "New time client can request (seconds)", - "rtcp.app.poc1.new.time.request", - FT_UINT16, - BASE_DEC, - NULL, - 0x0, - "Time in seconds client can request for", HFILL - } - }, - { - &hf_rtcp_app_poc1_ack_subtype, - { - "Subtype", - "rtcp.app.poc1.ack.subtype", - FT_UINT8, - BASE_DEC, - VALS(rtcp_app_poc1_floor_cnt_type_vals), - 0xf8, - NULL, HFILL - } - }, - { - &hf_rtcp_app_poc1_ack_reason_code, - { - "Reason code", - "rtcp.app.poc1.ack.reason.code", - FT_UINT16, - BASE_DEC, - VALS(rtcp_app_poc1_reason_code_ack_vals), - 0x07ff, - NULL, HFILL - } - }, - { - &hf_rtcp_app_poc1_qsresp_priority, - { - "Priority", - "rtcp.app.poc1.qsresp.priority", - FT_UINT8, - BASE_DEC, - VALS(rtcp_app_poc1_qsresp_priority_vals), - 0x0, - NULL, HFILL - } - }, - { - &hf_rtcp_app_poc1_qsresp_position, - { - "Position (number of clients ahead)", - "rtcp.app.poc1.qsresp.position", - FT_UINT16, - BASE_DEC, - NULL, - 0x0, - NULL, HFILL - } - }, - { - &hf_rtcp_app_poc1_conn_content[0], - { - "Identity of inviting client", - "rtcp.app.poc1.conn.content.a.id", - FT_BOOLEAN, - 16, - NULL, - 0x8000, - NULL, HFILL - } - }, - { - &hf_rtcp_app_poc1_conn_content[1], - { - "Nick name of inviting client", - "rtcp.app.poc1.conn.content.a.dn", - FT_BOOLEAN, - 16, - NULL, - 0x4000, - NULL, HFILL - } - }, - { - &hf_rtcp_app_poc1_conn_content[2], - { - "Session identity", - "rtcp.app.poc1.conn.content.sess.id", - FT_BOOLEAN, - 16, - NULL, - 0x2000, - NULL, HFILL - } - }, - { - &hf_rtcp_app_poc1_conn_content[3], - { - "Group name", - "rtcp.app.poc1.conn.content.grp.dn", - FT_BOOLEAN, - 16, - NULL, - 0x1000, - NULL, HFILL - } - }, - { - &hf_rtcp_app_poc1_conn_content[4], - { - "Group identity", - "rtcp.app.poc1.conn.content.grp.id", - FT_BOOLEAN, - 16, - NULL, - 0x0800, - NULL, HFILL - } - }, - { - &hf_rtcp_app_poc1_conn_session_type, - { - "Session type", - "rtcp.app.poc1.conn.session.type", - FT_UINT8, - BASE_DEC, - VALS(rtcp_app_poc1_conn_sess_type_vals), - 0x0, - NULL, HFILL - } - }, - { - &hf_rtcp_app_poc1_conn_add_ind_mao, - { - "Manual answer override", - "rtcp.app.poc1.conn.add.ind.mao", - FT_BOOLEAN, - 8, - NULL, - 0x80, - NULL, HFILL - } - }, - { - &hf_rtcp_app_poc1_conn_sdes_items[0], - { - "Identity of inviting client", - "rtcp.app.poc1.conn.sdes.a.id", - FT_UINT_STRING, - BASE_NONE, - NULL, - 0x0, - NULL, HFILL - } - }, - { - &hf_rtcp_app_poc1_conn_sdes_items[1], - { - "Nick name of inviting client", - "rtcp.app.poc1.conn.sdes.a.dn", - FT_UINT_STRING, - BASE_NONE, - NULL, - 0x0, - NULL, HFILL - } - }, - { - &hf_rtcp_app_poc1_conn_sdes_items[2], - { - "Session identity", - "rtcp.app.poc1.conn.sdes.sess.id", - FT_UINT_STRING, - BASE_NONE, - NULL, - 0x0, - NULL, HFILL - } - }, - { - &hf_rtcp_app_poc1_conn_sdes_items[3], - { - "Group Name", - "rtcp.app.poc1.conn.sdes.grp.dn", - FT_UINT_STRING, - BASE_NONE, - NULL, - 0x0, - NULL, HFILL - } - }, - { - &hf_rtcp_app_poc1_conn_sdes_items[4], - { - "Group identity", - "rtcp.app.poc1.conn.sdes.grp.id", - FT_UINT_STRING, - BASE_NONE, - NULL, - 0x0, - NULL, HFILL - } - }, - { - &hf_rtcp_app_mux, - { - "RtpMux Application specific data", - "rtcp.app.mux", - FT_NONE, - BASE_NONE, - NULL, - 0x0, - NULL, HFILL - } - }, - { - &hf_rtcp_app_mux_mux, - { - "Multiplexing supported", - "rtcp.app.mux.mux", - FT_BOOLEAN, - BASE_NONE, - NULL, - 0x80, - NULL, HFILL - } + { + "Media source SSRC", + "rtcp.mediassrc", + FT_UINT32, + BASE_HEX_DEC, + NULL, + 0x0, + NULL, HFILL + } + }, + { + &hf_rtcp_ntp_msw, + { + "Timestamp, MSW", + "rtcp.timestamp.ntp.msw", + FT_UINT32, + BASE_DEC_HEX, + NULL, + 0x0, + NULL, HFILL + } + }, + { + &hf_rtcp_ntp_lsw, + { + "Timestamp, LSW", + "rtcp.timestamp.ntp.lsw", + FT_UINT32, + BASE_DEC_HEX, + NULL, + 0x0, + NULL, HFILL + } + }, + { + &hf_rtcp_ntp, + { + "MSW and LSW as NTP timestamp", + "rtcp.timestamp.ntp", + FT_ABSOLUTE_TIME, + ABSOLUTE_TIME_UTC, + NULL, + 0x0, + NULL, HFILL + } + }, + { + &hf_rtcp_rtp_timestamp, + { + "RTP timestamp", + "rtcp.timestamp.rtp", + FT_UINT32, + BASE_DEC, + NULL, + 0x0, + NULL, HFILL + } + }, + { + &hf_rtcp_sender_pkt_cnt, + { + "Sender's packet count", + "rtcp.sender.packetcount", + FT_UINT32, + BASE_DEC, + NULL, + 0x0, + NULL, HFILL + } + }, + { + &hf_rtcp_sender_oct_cnt, + { + "Sender's octet count", + "rtcp.sender.octetcount", + FT_UINT32, + BASE_DEC, + NULL, + 0x0, + NULL, HFILL + } + }, + { + &hf_rtcp_ssrc_source, + { + "Identifier", + "rtcp.ssrc.identifier", + FT_UINT32, + BASE_HEX_DEC, + NULL, + 0x0, + NULL, HFILL + } + }, + { + &hf_rtcp_ssrc_fraction, + { + "Fraction lost", + "rtcp.ssrc.fraction", + FT_UINT8, + BASE_DEC, + NULL, + 0x0, + NULL, HFILL + } + }, + { + &hf_rtcp_ssrc_cum_nr, + { + "Cumulative number of packets lost", + "rtcp.ssrc.cum_nr", + FT_INT24, + BASE_DEC, + NULL, + 0x0, + NULL, HFILL + } + }, + { + &hf_rtcp_ssrc_ext_high_seq, + { + "Extended highest sequence number received", + "rtcp.ssrc.ext_high", + FT_UINT32, + BASE_DEC, + NULL, + 0x0, + NULL, HFILL + } + }, + { + &hf_rtcp_ssrc_high_seq, + { + "Highest sequence number received", + "rtcp.ssrc.high_seq", + FT_UINT16, + BASE_DEC, + NULL, + 0x0, + NULL, HFILL + } + }, + { + &hf_rtcp_ssrc_high_cycles, + { + "Sequence number cycles count", + "rtcp.ssrc.high_cycles", + FT_UINT16, + BASE_DEC, + NULL, + 0x0, + NULL, HFILL + } + }, + { + &hf_rtcp_ssrc_jitter, + { + "Interarrival jitter", + "rtcp.ssrc.jitter", + FT_UINT32, + BASE_DEC, + NULL, + 0x0, + NULL, HFILL + } + }, + { + &hf_rtcp_ssrc_lsr, + { + "Last SR timestamp", + "rtcp.ssrc.lsr", + FT_UINT32, + BASE_DEC_HEX, + NULL, + 0x0, + NULL, HFILL + } + }, + { + &hf_rtcp_ssrc_dlsr, + { + "Delay since last SR timestamp", + "rtcp.ssrc.dlsr", + FT_UINT32, + BASE_DEC, + NULL, + 0x0, + NULL, HFILL + } + }, + { + &hf_rtcp_ssrc_csrc, + { + "SSRC / CSRC identifier", + "rtcp.sdes.ssrc_csrc", + FT_UINT32, + BASE_HEX_DEC, + NULL, + 0x0, + NULL, HFILL + } + }, + { + &hf_rtcp_sdes_type, + { + "Type", + "rtcp.sdes.type", + FT_UINT8, + BASE_DEC, + VALS( rtcp_sdes_type_vals ), + 0x0, + NULL, HFILL + } + }, + { + &hf_rtcp_sdes_length, + { + "Length", + "rtcp.sdes.length", + FT_UINT32, + BASE_DEC, + NULL, + 0x0, + NULL, HFILL + } + }, + { + &hf_rtcp_sdes_text, + { + "Text", + "rtcp.sdes.text", + FT_STRING, + BASE_NONE, + NULL, + 0x0, + NULL, HFILL + } + }, + { + &hf_rtcp_sdes_prefix_len, + { + "Prefix length", + "rtcp.sdes.prefix.length", + FT_UINT8, + BASE_DEC, + NULL, + 0x0, + NULL, HFILL + } + }, + { + &hf_rtcp_sdes_prefix_string, + { + "Prefix string", + "rtcp.sdes.prefix.string", + FT_STRING, + BASE_NONE, + NULL, + 0x0, + NULL, HFILL + } + }, + { + &hf_rtcp_subtype, + { + "Subtype", + "rtcp.app.subtype", + FT_UINT8, + BASE_DEC, + NULL, + 0x0, + NULL, HFILL + } + }, + { + &hf_rtcp_name_ascii, + { + "Name (ASCII)", + "rtcp.app.name", + FT_STRING, + BASE_NONE, + NULL, + 0x0, + NULL, HFILL + } + }, + { + &hf_rtcp_app_data, + { + "Application specific data", + "rtcp.app.data", + FT_BYTES, + BASE_NONE, + NULL, + 0x0, + NULL, HFILL + } + }, + { + &hf_rtcp_app_poc1, + { + "PoC1 Application specific data", + "rtcp.app.poc1", + FT_NONE, + BASE_NONE, + NULL, + 0x0, + NULL, HFILL + } + }, + { + &hf_rtcp_app_poc1_subtype, + { + "Subtype", + "rtcp.app.PoC1.subtype", + FT_UINT8, + BASE_DEC, + VALS(rtcp_app_poc1_floor_cnt_type_vals), + 0x0, + NULL, HFILL + } + }, + { + &hf_rtcp_app_poc1_sip_uri, + { + "SIP URI", + "rtcp.app.poc1.sip.uri", + FT_UINT_STRING, + BASE_NONE, + NULL, + 0x0, + NULL, HFILL + } + }, + { + &hf_rtcp_app_poc1_disp_name, + { + "Display Name", + "rtcp.app.poc1.disp.name", + FT_UINT_STRING, + BASE_NONE, + NULL, + 0x0, + NULL, HFILL + } + }, + { + &hf_rtcp_app_poc1_priority, + { + "Priority", + "rtcp.app.poc1.priority", + FT_UINT8, + BASE_DEC, + VALS(rtcp_app_poc1_qsresp_priority_vals), + 0x0, + NULL, HFILL + } + }, + { + &hf_rtcp_app_poc1_request_ts, + { + "Talk Burst Request Timestamp", + "rtcp.app.poc1.request.ts", + FT_ABSOLUTE_TIME, + ABSOLUTE_TIME_UTC, + NULL, + 0x0, + NULL, HFILL + } + }, + { + &hf_rtcp_app_poc1_stt, + { + "Stop talking timer", + "rtcp.app.poc1.stt", + FT_UINT16, + BASE_DEC, + NULL, + 0x0, + NULL, HFILL + } + }, + { + &hf_rtcp_app_poc1_partic, + { + "Number of participants", + "rtcp.app.poc1.participants", + FT_UINT16, + BASE_DEC, + NULL, + 0x0, + NULL, HFILL + } + }, + { + &hf_rtcp_app_poc1_ssrc_granted, + { + "SSRC of client granted permission to talk", + "rtcp.app.poc1.ssrc.granted", + FT_UINT32, + BASE_DEC, + NULL, + 0x0, + NULL, HFILL + } + }, + { + &hf_rtcp_app_poc1_last_pkt_seq_no, + { + "Sequence number of last RTP packet", + "rtcp.app.poc1.last.pkt.seq.no", + FT_UINT16, + BASE_DEC, + NULL, + 0x0, + NULL, HFILL + } + }, + { + &hf_rtcp_app_poc1_ignore_seq_no, + { + "Ignore sequence number field", + "rtcp.app.poc1.ignore.seq.no", + FT_UINT16, + BASE_HEX, + NULL, + 0x8000, + NULL, HFILL + } + }, + { + &hf_rtcp_app_poc1_reason_code1, + { + "Reason code", + "rtcp.app.poc1.reason.code", + FT_UINT8, + BASE_DEC, + VALS(rtcp_app_poc1_reason_code1_vals), + 0x0, + NULL, HFILL + } + }, + { + &hf_rtcp_app_poc1_reason1_phrase, + { + "Reason Phrase", + "rtcp.app.poc1.reason.phrase", + FT_UINT_STRING, + BASE_NONE, + NULL, + 0x0, + NULL, HFILL + } + }, + { + &hf_rtcp_app_poc1_reason_code2, + { + "Reason code", + "rtcp.app.poc1.reason.code", + FT_UINT16, + BASE_DEC, + VALS(rtcp_app_poc1_reason_code2_vals), + 0x0, + NULL, HFILL + } + }, + { + &hf_rtcp_app_poc1_new_time_request, + { + "New time client can request (seconds)", + "rtcp.app.poc1.new.time.request", + FT_UINT16, + BASE_DEC, + NULL, + 0x0, + "Time in seconds client can request for", HFILL + } + }, + { + &hf_rtcp_app_poc1_ack_subtype, + { + "Subtype", + "rtcp.app.poc1.ack.subtype", + FT_UINT8, + BASE_DEC, + VALS(rtcp_app_poc1_floor_cnt_type_vals), + 0xf8, + NULL, HFILL + } + }, + { + &hf_rtcp_app_poc1_ack_reason_code, + { + "Reason code", + "rtcp.app.poc1.ack.reason.code", + FT_UINT16, + BASE_DEC, + VALS(rtcp_app_poc1_reason_code_ack_vals), + 0x07ff, + NULL, HFILL + } + }, + { + &hf_rtcp_app_poc1_qsresp_priority, + { + "Priority", + "rtcp.app.poc1.qsresp.priority", + FT_UINT8, + BASE_DEC, + VALS(rtcp_app_poc1_qsresp_priority_vals), + 0x0, + NULL, HFILL + } + }, + { + &hf_rtcp_app_poc1_qsresp_position, + { + "Position (number of clients ahead)", + "rtcp.app.poc1.qsresp.position", + FT_UINT16, + BASE_DEC, + NULL, + 0x0, + NULL, HFILL + } + }, + { + &hf_rtcp_app_poc1_conn_content[0], + { + "Identity of inviting client", + "rtcp.app.poc1.conn.content.a.id", + FT_BOOLEAN, + 16, + NULL, + 0x8000, + NULL, HFILL + } + }, + { + &hf_rtcp_app_poc1_conn_content[1], + { + "Nick name of inviting client", + "rtcp.app.poc1.conn.content.a.dn", + FT_BOOLEAN, + 16, + NULL, + 0x4000, + NULL, HFILL + } + }, + { + &hf_rtcp_app_poc1_conn_content[2], + { + "Session identity", + "rtcp.app.poc1.conn.content.sess.id", + FT_BOOLEAN, + 16, + NULL, + 0x2000, + NULL, HFILL + } + }, + { + &hf_rtcp_app_poc1_conn_content[3], + { + "Group name", + "rtcp.app.poc1.conn.content.grp.dn", + FT_BOOLEAN, + 16, + NULL, + 0x1000, + NULL, HFILL + } + }, + { + &hf_rtcp_app_poc1_conn_content[4], + { + "Group identity", + "rtcp.app.poc1.conn.content.grp.id", + FT_BOOLEAN, + 16, + NULL, + 0x0800, + NULL, HFILL + } + }, + { + &hf_rtcp_app_poc1_conn_session_type, + { + "Session type", + "rtcp.app.poc1.conn.session.type", + FT_UINT8, + BASE_DEC, + VALS(rtcp_app_poc1_conn_sess_type_vals), + 0x0, + NULL, HFILL + } + }, + { + &hf_rtcp_app_poc1_conn_add_ind_mao, + { + "Manual answer override", + "rtcp.app.poc1.conn.add.ind.mao", + FT_BOOLEAN, + 8, + NULL, + 0x80, + NULL, HFILL + } + }, + { + &hf_rtcp_app_poc1_conn_sdes_items[0], + { + "Identity of inviting client", + "rtcp.app.poc1.conn.sdes.a.id", + FT_UINT_STRING, + BASE_NONE, + NULL, + 0x0, + NULL, HFILL + } + }, + { + &hf_rtcp_app_poc1_conn_sdes_items[1], + { + "Nick name of inviting client", + "rtcp.app.poc1.conn.sdes.a.dn", + FT_UINT_STRING, + BASE_NONE, + NULL, + 0x0, + NULL, HFILL + } + }, + { + &hf_rtcp_app_poc1_conn_sdes_items[2], + { + "Session identity", + "rtcp.app.poc1.conn.sdes.sess.id", + FT_UINT_STRING, + BASE_NONE, + NULL, + 0x0, + NULL, HFILL + } + }, + { + &hf_rtcp_app_poc1_conn_sdes_items[3], + { + "Group Name", + "rtcp.app.poc1.conn.sdes.grp.dn", + FT_UINT_STRING, + BASE_NONE, + NULL, + 0x0, + NULL, HFILL + } + }, + { + &hf_rtcp_app_poc1_conn_sdes_items[4], + { + "Group identity", + "rtcp.app.poc1.conn.sdes.grp.id", + FT_UINT_STRING, + BASE_NONE, + NULL, + 0x0, + NULL, HFILL + } + }, + { + &hf_rtcp_app_mux, + { + "RtpMux Application specific data", + "rtcp.app.mux", + FT_NONE, + BASE_NONE, + NULL, + 0x0, + NULL, HFILL + } + }, + { + &hf_rtcp_app_mux_mux, + { + "Multiplexing supported", + "rtcp.app.mux.mux", + FT_BOOLEAN, + BASE_NONE, + NULL, + 0x80, + NULL, HFILL + } }, - { - &hf_rtcp_app_mux_cp, - { - "Header compression supported", - "rtcp.app.mux.cp", - FT_BOOLEAN, - BASE_NONE, - NULL, - 0x40, - NULL, HFILL - } - }, - { - &hf_rtcp_app_mux_selection, - { - "Multiplexing selection", - "rtcp.app.mux.selection", - FT_UINT8, - BASE_DEC, - VALS(rtcp_app_mux_selection_vals), - 0x30, - NULL, HFILL - } - }, + { + &hf_rtcp_app_mux_cp, + { + "Header compression supported", + "rtcp.app.mux.cp", + FT_BOOLEAN, + BASE_NONE, + NULL, + 0x40, + NULL, HFILL + } + }, + { + &hf_rtcp_app_mux_selection, + { + "Multiplexing selection", + "rtcp.app.mux.selection", + FT_UINT8, + BASE_DEC, + VALS(rtcp_app_mux_selection_vals), + 0x30, + NULL, HFILL + } + }, { - &hf_rtcp_app_mux_localmuxport, - { - "Local Mux Port", - "rtcp.app.mux.muxport", - FT_UINT16, - BASE_DEC, - NULL, - 0x0, - NULL, HFILL - } - }, - { - &hf_rtcp_fsn, - { - "First sequence number", - "rtcp.nack.fsn", - FT_UINT16, - BASE_DEC, - NULL, - 0x0, - NULL, HFILL - } - }, - { - &hf_rtcp_blp, - { - "Bitmask of following lost packets", - "rtcp.nack.blp", - FT_UINT16, - BASE_DEC, - NULL, - 0x0, - NULL, HFILL - } - }, - { - &hf_rtcp_padding_count, - { - "Padding count", - "rtcp.padding.count", - FT_UINT8, - BASE_DEC, - NULL, - 0x0, - NULL, HFILL - } - }, - { - &hf_rtcp_padding_data, - { - "Padding data", - "rtcp.padding.data", - FT_BYTES, - BASE_NONE, - NULL, - 0x0, - NULL, HFILL - } - }, - { - &hf_rtcp_profile_specific_extension, - { - "Profile-specific extension", - "rtcp.profile-specific-extension", - FT_BYTES, - BASE_NONE, - NULL, - 0x0, - NULL, HFILL - } - }, - { - &hf_rtcp_setup, - { - "Stream setup", - "rtcp.setup", - FT_STRING, - BASE_NONE, - NULL, - 0x0, - "Stream setup, method and frame number", HFILL - } - }, - { - &hf_rtcp_setup_frame, - { - "Setup frame", - "rtcp.setup-frame", - FT_FRAMENUM, - BASE_NONE, - NULL, - 0x0, - "Frame that set up this stream", HFILL - } - }, - { - &hf_rtcp_setup_method, - { - "Setup Method", - "rtcp.setup-method", - FT_STRING, - BASE_NONE, - NULL, - 0x0, - "Method used to set up this stream", HFILL - } - }, - { - &hf_rtcp_last_sr_timestamp_frame, - { - "Frame matching Last SR timestamp", - "rtcp.lsr-frame", - FT_FRAMENUM, - BASE_NONE, - NULL, - 0x0, - "Frame matching LSR field (used to calculate roundtrip delay)", HFILL - } - }, - { - &hf_rtcp_time_since_last_sr, - { - "Time since Last SR captured", - "rtcp.lsr-frame-captured", - FT_UINT32, - BASE_DEC, - NULL, - 0x0, - "Time since frame matching LSR field was captured", HFILL - } - }, - { - &hf_rtcp_roundtrip_delay, - { - "Roundtrip Delay(ms)", - "rtcp.roundtrip-delay", - FT_INT32, - BASE_DEC, - NULL, - 0x0, - "Calculated roundtrip delay in ms", HFILL - } - }, - { - &hf_rtcp_xr_block_type, - { - "Type", - "rtcp.xr.bt", - FT_UINT8, - BASE_DEC, - VALS(rtcp_xr_type_vals), - 0x0, - "Block Type", HFILL - } - }, - { - &hf_rtcp_xr_block_specific, - { - "Type Specific", - "rtcp.xr.bs", - FT_UINT8, - BASE_DEC, - NULL, - 0x0, - "Reserved", HFILL - } - }, - { - &hf_rtcp_xr_block_length, - { - "Length", - "rtcp.xr.bl", - FT_UINT16, - BASE_DEC, - NULL, - 0x0, - "Block Length", HFILL - } - }, - { - &hf_rtcp_ssrc_discarded, - { - "Fraction discarded", - "rtcp.ssrc.discarded", - FT_UINT8, - BASE_DEC, - NULL, - 0x0, - "Discard Rate", HFILL - } - }, - { - &hf_rtcp_xr_voip_metrics_burst_density, - { - "Burst Density", - "rtcp.xr.voipmetrics.burstdensity", - FT_UINT8, - BASE_DEC, - NULL, - 0x0, - NULL, HFILL - } - }, - { - &hf_rtcp_xr_voip_metrics_gap_density, - { - "Gap Density", - "rtcp.xr.voipmetrics.gapdensity", - FT_UINT8, - BASE_DEC, - NULL, - 0x0, - NULL, HFILL - } - }, - { - &hf_rtcp_xr_voip_metrics_burst_duration, - { - "Burst Duration(ms)", - "rtcp.xr.voipmetrics.burstduration", - FT_UINT16, - BASE_DEC, - NULL, - 0x0, - NULL, HFILL - } - }, - { - &hf_rtcp_xr_voip_metrics_gap_duration, - { - "Gap Duration(ms)", - "rtcp.xr.voipmetrics.gapduration", - FT_UINT16, - BASE_DEC, - NULL, - 0x0, - NULL, HFILL - } - }, - { - &hf_rtcp_xr_voip_metrics_rtdelay, - { - "Round Trip Delay(ms)", - "rtcp.xr.voipmetrics.rtdelay", - FT_UINT16, - BASE_DEC, - NULL, - 0x0, - NULL, HFILL - } - }, - { - &hf_rtcp_xr_voip_metrics_esdelay, - { - "End System Delay(ms)", - "rtcp.xr.voipmetrics.esdelay", - FT_UINT16, - BASE_DEC, - NULL, - 0x0, - NULL, HFILL - } - }, - { - &hf_rtcp_xr_voip_metrics_siglevel, - { - "Signal Level", - "rtcp.xr.voipmetrics.signallevel", - FT_INT8, - BASE_DEC, - NULL, - 0x0, - "Signal level of 127 indicates this parameter is unavailable", HFILL - } - }, - { - &hf_rtcp_xr_voip_metrics_noiselevel, - { - "Noise Level", - "rtcp.xr.voipmetrics.noiselevel", - FT_INT8, - BASE_DEC, - NULL, - 0x0, - "Noise level of 127 indicates this parameter is unavailable", HFILL - } - }, - { - &hf_rtcp_xr_voip_metrics_rerl, - { - "Residual Echo Return Loss", - "rtcp.xr.voipmetrics.rerl", - FT_UINT8, - BASE_DEC, - NULL, - 0x0, - NULL, HFILL - } - }, - { - &hf_rtcp_xr_voip_metrics_gmin, - { - "Gmin", - "rtcp.xr.voipmetrics.gmin", - FT_UINT8, - BASE_DEC, - NULL, - 0x0, - NULL, HFILL - } - }, - { - &hf_rtcp_xr_voip_metrics_rfactor, - { - "R Factor", - "rtcp.xr.voipmetrics.rfactor", - FT_UINT8, - BASE_DEC, - NULL, - 0x0, - "R Factor is in the range of 0 to 100; 127 indicates this parameter is unavailable", HFILL - } - }, - { - &hf_rtcp_xr_voip_metrics_extrfactor, - { - "External R Factor", - "rtcp.xr.voipmetrics.extrfactor", - FT_UINT8, - BASE_DEC, - NULL, - 0x0, - "R Factor is in the range of 0 to 100; 127 indicates this parameter is unavailable", HFILL - } - }, - { - &hf_rtcp_xr_voip_metrics_moslq, - { - "MOS - Listening Quality", - "rtcp.xr.voipmetrics.moslq", - FT_FLOAT, - BASE_NONE, - NULL, - 0x0, - "MOS is in the range of 1 to 5; 127 indicates this parameter is unavailable", HFILL - } - }, - { - &hf_rtcp_xr_voip_metrics_moscq, - { - "MOS - Conversational Quality", - "rtcp.xr.voipmetrics.moscq", - FT_FLOAT, - BASE_NONE, - NULL, - 0x0, - "MOS is in the range of 1 to 5; 127 indicates this parameter is unavailable", HFILL - } - }, - { - &hf_rtcp_xr_voip_metrics_plc, - { - "Packet Loss Concealment Algorithm", - "rtcp.xr.voipmetrics.plc", - FT_UINT8, - BASE_DEC, - VALS(rtcp_xr_plc_algo_vals), - 0xC0, - NULL, HFILL - } - }, - { - &hf_rtcp_xr_voip_metrics_jbadaptive, - { - "Adaptive Jitter Buffer Algorithm", - "rtcp.xr.voipmetrics.jba", - FT_UINT8, - BASE_DEC, - VALS(rtcp_xr_jb_adaptive_vals), - 0x30, - NULL, HFILL - } - }, - { - &hf_rtcp_xr_voip_metrics_jbrate, - { - "Jitter Buffer Rate", - "rtcp.xr.voipmetrics.jbrate", - FT_UINT8, - BASE_DEC, - NULL, - 0x0F, - NULL, HFILL - } - }, - { - &hf_rtcp_xr_voip_metrics_jbnominal, - { - "Nominal Jitter Buffer Size", - "rtcp.xr.voipmetrics.jbnominal", - FT_UINT16, - BASE_DEC, - NULL, - 0x0, - NULL, HFILL - } - }, - { - &hf_rtcp_xr_voip_metrics_jbmax, - { - "Maximum Jitter Buffer Size", - "rtcp.xr.voipmetrics.jbmax", - FT_UINT16, - BASE_DEC, - NULL, - 0x0, - NULL, HFILL - } - }, - { - &hf_rtcp_xr_voip_metrics_jbabsmax, - { - "Absolute Maximum Jitter Buffer Size", - "rtcp.xr.voipmetrics.jbabsmax", - FT_UINT16, - BASE_DEC, - NULL, - 0x0, - NULL, HFILL - } - }, - { - &hf_rtcp_xr_thinning, - { - "Thinning factor", - "rtcp.xr.tf", - FT_UINT8, - BASE_DEC, + &hf_rtcp_app_mux_localmuxport, + { + "Local Mux Port", + "rtcp.app.mux.muxport", + FT_UINT16, + BASE_DEC, + NULL, + 0x0, + NULL, HFILL + } + }, + { + &hf_rtcp_fsn, + { + "First sequence number", + "rtcp.nack.fsn", + FT_UINT16, + BASE_DEC, + NULL, + 0x0, + NULL, HFILL + } + }, + { + &hf_rtcp_blp, + { + "Bitmask of following lost packets", + "rtcp.nack.blp", + FT_UINT16, + BASE_DEC, + NULL, + 0x0, + NULL, HFILL + } + }, + { + &hf_rtcp_padding_count, + { + "Padding count", + "rtcp.padding.count", + FT_UINT8, + BASE_DEC, + NULL, + 0x0, + NULL, HFILL + } + }, + { + &hf_rtcp_padding_data, + { + "Padding data", + "rtcp.padding.data", + FT_BYTES, + BASE_NONE, + NULL, + 0x0, + NULL, HFILL + } + }, + { + &hf_rtcp_profile_specific_extension, + { + "Profile-specific extension", + "rtcp.profile-specific-extension", + FT_BYTES, + BASE_NONE, + NULL, + 0x0, + NULL, HFILL + } + }, + { + &hf_rtcp_setup, + { + "Stream setup", + "rtcp.setup", + FT_STRING, + BASE_NONE, + NULL, + 0x0, + "Stream setup, method and frame number", HFILL + } + }, + { + &hf_rtcp_setup_frame, + { + "Setup frame", + "rtcp.setup-frame", + FT_FRAMENUM, + BASE_NONE, + NULL, + 0x0, + "Frame that set up this stream", HFILL + } + }, + { + &hf_rtcp_setup_method, + { + "Setup Method", + "rtcp.setup-method", + FT_STRING, + BASE_NONE, + NULL, + 0x0, + "Method used to set up this stream", HFILL + } + }, + { + &hf_rtcp_last_sr_timestamp_frame, + { + "Frame matching Last SR timestamp", + "rtcp.lsr-frame", + FT_FRAMENUM, + BASE_NONE, + NULL, + 0x0, + "Frame matching LSR field (used to calculate roundtrip delay)", HFILL + } + }, + { + &hf_rtcp_time_since_last_sr, + { + "Time since Last SR captured", + "rtcp.lsr-frame-captured", + FT_UINT32, + BASE_DEC, + NULL, + 0x0, + "Time since frame matching LSR field was captured", HFILL + } + }, + { + &hf_rtcp_roundtrip_delay, + { + "Roundtrip Delay(ms)", + "rtcp.roundtrip-delay", + FT_INT32, + BASE_DEC, + NULL, + 0x0, + "Calculated roundtrip delay in ms", HFILL + } + }, + { + &hf_rtcp_xr_block_type, + { + "Type", + "rtcp.xr.bt", + FT_UINT8, + BASE_DEC, + VALS(rtcp_xr_type_vals), + 0x0, + "Block Type", HFILL + } + }, + { + &hf_rtcp_xr_block_specific, + { + "Type Specific", + "rtcp.xr.bs", + FT_UINT8, + BASE_DEC, + NULL, + 0x0, + "Reserved", HFILL + } + }, + { + &hf_rtcp_xr_block_length, + { + "Length", + "rtcp.xr.bl", + FT_UINT16, + BASE_DEC, + NULL, + 0x0, + "Block Length", HFILL + } + }, + { + &hf_rtcp_ssrc_discarded, + { + "Fraction discarded", + "rtcp.ssrc.discarded", + FT_UINT8, + BASE_DEC, + NULL, + 0x0, + "Discard Rate", HFILL + } + }, + { + &hf_rtcp_xr_voip_metrics_burst_density, + { + "Burst Density", + "rtcp.xr.voipmetrics.burstdensity", + FT_UINT8, + BASE_DEC, + NULL, + 0x0, + NULL, HFILL + } + }, + { + &hf_rtcp_xr_voip_metrics_gap_density, + { + "Gap Density", + "rtcp.xr.voipmetrics.gapdensity", + FT_UINT8, + BASE_DEC, + NULL, + 0x0, + NULL, HFILL + } + }, + { + &hf_rtcp_xr_voip_metrics_burst_duration, + { + "Burst Duration(ms)", + "rtcp.xr.voipmetrics.burstduration", + FT_UINT16, + BASE_DEC, + NULL, + 0x0, + NULL, HFILL + } + }, + { + &hf_rtcp_xr_voip_metrics_gap_duration, + { + "Gap Duration(ms)", + "rtcp.xr.voipmetrics.gapduration", + FT_UINT16, + BASE_DEC, + NULL, + 0x0, + NULL, HFILL + } + }, + { + &hf_rtcp_xr_voip_metrics_rtdelay, + { + "Round Trip Delay(ms)", + "rtcp.xr.voipmetrics.rtdelay", + FT_UINT16, + BASE_DEC, + NULL, + 0x0, + NULL, HFILL + } + }, + { + &hf_rtcp_xr_voip_metrics_esdelay, + { + "End System Delay(ms)", + "rtcp.xr.voipmetrics.esdelay", + FT_UINT16, + BASE_DEC, + NULL, + 0x0, + NULL, HFILL + } + }, + { + &hf_rtcp_xr_voip_metrics_siglevel, + { + "Signal Level", + "rtcp.xr.voipmetrics.signallevel", + FT_INT8, + BASE_DEC, + NULL, + 0x0, + "Signal level of 127 indicates this parameter is unavailable", HFILL + } + }, + { + &hf_rtcp_xr_voip_metrics_noiselevel, + { + "Noise Level", + "rtcp.xr.voipmetrics.noiselevel", + FT_INT8, + BASE_DEC, + NULL, + 0x0, + "Noise level of 127 indicates this parameter is unavailable", HFILL + } + }, + { + &hf_rtcp_xr_voip_metrics_rerl, + { + "Residual Echo Return Loss", + "rtcp.xr.voipmetrics.rerl", + FT_UINT8, + BASE_DEC, + NULL, + 0x0, + NULL, HFILL + } + }, + { + &hf_rtcp_xr_voip_metrics_gmin, + { + "Gmin", + "rtcp.xr.voipmetrics.gmin", + FT_UINT8, + BASE_DEC, + NULL, + 0x0, + NULL, HFILL + } + }, + { + &hf_rtcp_xr_voip_metrics_rfactor, + { + "R Factor", + "rtcp.xr.voipmetrics.rfactor", + FT_UINT8, + BASE_DEC, + NULL, + 0x0, + "R Factor is in the range of 0 to 100; 127 indicates this parameter is unavailable", HFILL + } + }, + { + &hf_rtcp_xr_voip_metrics_extrfactor, + { + "External R Factor", + "rtcp.xr.voipmetrics.extrfactor", + FT_UINT8, + BASE_DEC, + NULL, + 0x0, + "R Factor is in the range of 0 to 100; 127 indicates this parameter is unavailable", HFILL + } + }, + { + &hf_rtcp_xr_voip_metrics_moslq, + { + "MOS - Listening Quality", + "rtcp.xr.voipmetrics.moslq", + FT_FLOAT, + BASE_NONE, + NULL, + 0x0, + "MOS is in the range of 1 to 5; 127 indicates this parameter is unavailable", HFILL + } + }, + { + &hf_rtcp_xr_voip_metrics_moscq, + { + "MOS - Conversational Quality", + "rtcp.xr.voipmetrics.moscq", + FT_FLOAT, + BASE_NONE, + NULL, + 0x0, + "MOS is in the range of 1 to 5; 127 indicates this parameter is unavailable", HFILL + } + }, + { + &hf_rtcp_xr_voip_metrics_plc, + { + "Packet Loss Concealment Algorithm", + "rtcp.xr.voipmetrics.plc", + FT_UINT8, + BASE_DEC, + VALS(rtcp_xr_plc_algo_vals), + 0xC0, + NULL, HFILL + } + }, + { + &hf_rtcp_xr_voip_metrics_jbadaptive, + { + "Adaptive Jitter Buffer Algorithm", + "rtcp.xr.voipmetrics.jba", + FT_UINT8, + BASE_DEC, + VALS(rtcp_xr_jb_adaptive_vals), + 0x30, + NULL, HFILL + } + }, + { + &hf_rtcp_xr_voip_metrics_jbrate, + { + "Jitter Buffer Rate", + "rtcp.xr.voipmetrics.jbrate", + FT_UINT8, + BASE_DEC, + NULL, + 0x0F, + NULL, HFILL + } + }, + { + &hf_rtcp_xr_voip_metrics_jbnominal, + { + "Nominal Jitter Buffer Size", + "rtcp.xr.voipmetrics.jbnominal", + FT_UINT16, + BASE_DEC, + NULL, + 0x0, + NULL, HFILL + } + }, + { + &hf_rtcp_xr_voip_metrics_jbmax, + { + "Maximum Jitter Buffer Size", + "rtcp.xr.voipmetrics.jbmax", + FT_UINT16, + BASE_DEC, + NULL, + 0x0, + NULL, HFILL + } + }, + { + &hf_rtcp_xr_voip_metrics_jbabsmax, + { + "Absolute Maximum Jitter Buffer Size", + "rtcp.xr.voipmetrics.jbabsmax", + FT_UINT16, + BASE_DEC, + NULL, + 0x0, + NULL, HFILL + } + }, + { + &hf_rtcp_xr_thinning, + { + "Thinning factor", + "rtcp.xr.tf", + FT_UINT8, + BASE_DEC, NULL, - 0x0F, - NULL, HFILL - } - }, - { - &hf_rtcp_xr_stats_loss_flag, - { - "Loss Report Flag", - "rtcp.xr.stats.lrflag", - FT_BOOLEAN, - 8, - NULL, - 0x80, - NULL, HFILL - } - }, - { - &hf_rtcp_xr_stats_dup_flag, - { - "Duplicates Report Flag", - "rtcp.xr.stats.dupflag", - FT_BOOLEAN, - 8, - NULL, - 0x40, - NULL, HFILL - } - }, - { - &hf_rtcp_xr_stats_jitter_flag, - { - "Jitter Report Flag", - "rtcp.xr.stats.jitterflag", - FT_BOOLEAN, - 8, - NULL, - 0x20, - NULL, HFILL - } - }, - { - &hf_rtcp_xr_stats_ttl, - { - "TTL or Hop Limit Flag", - "rtcp.xr.stats.ttl", - FT_UINT8, - BASE_DEC, - VALS(rtcp_xr_ip_ttl_vals), - 0x18, - NULL, HFILL - } - }, - { - &hf_rtcp_xr_endseq, - { - "End Sequence Number", - "rtcp.xr.endseq", - FT_UINT16, - BASE_DEC, - NULL, - 0x0, - NULL, HFILL - } - }, - { - &hf_rtcp_xr_beginseq, - { - "Begin Sequence Number", - "rtcp.xr.beginseq", - FT_UINT16, - BASE_DEC, - NULL, - 0x0, - NULL, HFILL - } - }, - { - &hf_rtcp_xr_stats_lost, - { - "Lost Packets", - "rtcp.xr.stats.lost", - FT_UINT32, - BASE_DEC, - NULL, - 0x0, - NULL, HFILL - } - }, - { - &hf_rtcp_xr_stats_dups, - { - "Duplicate Packets", - "rtcp.xr.stats.dups", - FT_UINT32, - BASE_DEC, - NULL, - 0x0, - NULL, HFILL - } - }, - { - &hf_rtcp_xr_stats_minjitter, - { - "Minimum Jitter", - "rtcp.xr.stats.minjitter", - FT_UINT32, - BASE_DEC, - NULL, - 0x0, - NULL, HFILL - } - }, - { - &hf_rtcp_xr_stats_maxjitter, - { - "Maximum Jitter", - "rtcp.xr.stats.maxjitter", - FT_UINT32, - BASE_DEC, - NULL, - 0x0, - NULL, HFILL - } - }, - { - &hf_rtcp_xr_stats_meanjitter, - { - "Mean Jitter", - "rtcp.xr.stats.meanjitter", - FT_UINT32, - BASE_DEC, - NULL, - 0x0, - NULL, HFILL - } - }, - { - &hf_rtcp_xr_stats_devjitter, - { - "Standard Deviation of Jitter", - "rtcp.xr.stats.devjitter", - FT_UINT32, - BASE_DEC, - NULL, - 0x0, - NULL, HFILL - } - }, - { - &hf_rtcp_xr_stats_minttl, - { - "Minimum TTL or Hop Limit", - "rtcp.xr.stats.minttl", - FT_UINT8, - BASE_DEC, - NULL, - 0x0, - NULL, HFILL - } - }, - { - &hf_rtcp_xr_stats_maxttl, - { - "Maximum TTL or Hop Limit", - "rtcp.xr.stats.maxttl", - FT_UINT8, - BASE_DEC, - NULL, - 0x0, - NULL, HFILL - } - }, - { - &hf_rtcp_xr_stats_meanttl, - { - "Mean TTL or Hop Limit", - "rtcp.xr.stats.meanttl", - FT_UINT8, - BASE_DEC, - NULL, - 0x0, - NULL, HFILL - } - }, - { - &hf_rtcp_xr_stats_devttl, - { - "Standard Deviation of TTL", - "rtcp.xr.stats.devttl", - FT_UINT8, - BASE_DEC, - NULL, - 0x0, - NULL, HFILL - } - }, - { - &hf_rtcp_xr_lrr, - { - "Last RR timestamp", - "rtcp.xr.lrr", - FT_UINT32, - BASE_DEC, - NULL, - 0x0, - NULL, HFILL - } - }, - { - &hf_rtcp_xr_dlrr, - { - "Delay since last RR timestamp", - "rtcp.xr.dlrr", - FT_UINT32, - BASE_DEC, - NULL, - 0x0, - NULL, HFILL - } - }, - { - &hf_rtcp_length_check, - { - "RTCP frame length check", - "rtcp.length_check", - FT_BOOLEAN, - BASE_NONE, - NULL, - 0x0, - NULL, HFILL - } - }, - { - &hf_rtcp_bye_reason_not_padded, - { - "BYE reason string not NULL padded", - "rtcp.bye_reason_not_padded", - FT_NONE, - BASE_NONE, - NULL, - 0x0, - "RTCP BYE reason string not padded", HFILL - } - }, - { - &hf_rtcp_rtpfb_fmt, - { - "RTCP Feedback message type (FMT)", - "rtcp.rtpfb.fmt", - FT_UINT8, - BASE_DEC, - VALS(rtcp_rtpfb_fmt_vals), - 0x1f, - NULL, HFILL - } - }, - { - &hf_rtcp_psfb_fmt, - { - "RTCP Feedback message type (FMT)", - "rtcp.psfb.fmt", - FT_UINT8, - BASE_DEC, - VALS(rtcp_psfb_fmt_vals), - 0x1f, - NULL, HFILL - } - }, - { - &hf_rtcp_rtpfb_nack_pid, - { - "RTCP Transport Feedback NACK", - "rtcp.rtpfb.nack", - FT_UINT16, - BASE_DEC, - NULL, - 0x0, - NULL, HFILL - } - }, - { - &hf_rtcp_rtpfb_nack_blp, - { - "RTCP Transport Feedback NACK BLP", - "rtcp.rtpfb.nack.blp", - FT_UINT16, - BASE_DEC, - NULL, - 0x0, - NULL, HFILL - } - }, - { - &hf_rtcp_fci, - { - "Feedback Control Information (FCI)", - "rtcp.fci", - FT_BYTES, - BASE_NONE, - NULL, - 0x0, - NULL, HFILL - } - }, - { - &hf_rtcp_xr_idms_spst, - { - "Syncronization Packet Sender Type", - "rtcp.xr.idms.spst", - FT_UINT8, - BASE_DEC, + 0x0F, + NULL, HFILL + } + }, + { + &hf_rtcp_xr_stats_loss_flag, + { + "Loss Report Flag", + "rtcp.xr.stats.lrflag", + FT_BOOLEAN, + 8, + NULL, + 0x80, + NULL, HFILL + } + }, + { + &hf_rtcp_xr_stats_dup_flag, + { + "Duplicates Report Flag", + "rtcp.xr.stats.dupflag", + FT_BOOLEAN, + 8, + NULL, + 0x40, + NULL, HFILL + } + }, + { + &hf_rtcp_xr_stats_jitter_flag, + { + "Jitter Report Flag", + "rtcp.xr.stats.jitterflag", + FT_BOOLEAN, + 8, + NULL, + 0x20, + NULL, HFILL + } + }, + { + &hf_rtcp_xr_stats_ttl, + { + "TTL or Hop Limit Flag", + "rtcp.xr.stats.ttl", + FT_UINT8, + BASE_DEC, + VALS(rtcp_xr_ip_ttl_vals), + 0x18, + NULL, HFILL + } + }, + { + &hf_rtcp_xr_endseq, + { + "End Sequence Number", + "rtcp.xr.endseq", + FT_UINT16, + BASE_DEC, + NULL, + 0x0, + NULL, HFILL + } + }, + { + &hf_rtcp_xr_beginseq, + { + "Begin Sequence Number", + "rtcp.xr.beginseq", + FT_UINT16, + BASE_DEC, + NULL, + 0x0, + NULL, HFILL + } + }, + { + &hf_rtcp_xr_stats_lost, + { + "Lost Packets", + "rtcp.xr.stats.lost", + FT_UINT32, + BASE_DEC, + NULL, + 0x0, + NULL, HFILL + } + }, + { + &hf_rtcp_xr_stats_dups, + { + "Duplicate Packets", + "rtcp.xr.stats.dups", + FT_UINT32, + BASE_DEC, + NULL, + 0x0, + NULL, HFILL + } + }, + { + &hf_rtcp_xr_stats_minjitter, + { + "Minimum Jitter", + "rtcp.xr.stats.minjitter", + FT_UINT32, + BASE_DEC, + NULL, + 0x0, + NULL, HFILL + } + }, + { + &hf_rtcp_xr_stats_maxjitter, + { + "Maximum Jitter", + "rtcp.xr.stats.maxjitter", + FT_UINT32, + BASE_DEC, + NULL, + 0x0, + NULL, HFILL + } + }, + { + &hf_rtcp_xr_stats_meanjitter, + { + "Mean Jitter", + "rtcp.xr.stats.meanjitter", + FT_UINT32, + BASE_DEC, + NULL, + 0x0, + NULL, HFILL + } + }, + { + &hf_rtcp_xr_stats_devjitter, + { + "Standard Deviation of Jitter", + "rtcp.xr.stats.devjitter", + FT_UINT32, + BASE_DEC, + NULL, + 0x0, + NULL, HFILL + } + }, + { + &hf_rtcp_xr_stats_minttl, + { + "Minimum TTL or Hop Limit", + "rtcp.xr.stats.minttl", + FT_UINT8, + BASE_DEC, + NULL, + 0x0, + NULL, HFILL + } + }, + { + &hf_rtcp_xr_stats_maxttl, + { + "Maximum TTL or Hop Limit", + "rtcp.xr.stats.maxttl", + FT_UINT8, + BASE_DEC, + NULL, + 0x0, + NULL, HFILL + } + }, + { + &hf_rtcp_xr_stats_meanttl, + { + "Mean TTL or Hop Limit", + "rtcp.xr.stats.meanttl", + FT_UINT8, + BASE_DEC, + NULL, + 0x0, + NULL, HFILL + } + }, + { + &hf_rtcp_xr_stats_devttl, + { + "Standard Deviation of TTL", + "rtcp.xr.stats.devttl", + FT_UINT8, + BASE_DEC, + NULL, + 0x0, + NULL, HFILL + } + }, + { + &hf_rtcp_xr_lrr, + { + "Last RR timestamp", + "rtcp.xr.lrr", + FT_UINT32, + BASE_DEC, + NULL, + 0x0, + NULL, HFILL + } + }, + { + &hf_rtcp_xr_dlrr, + { + "Delay since last RR timestamp", + "rtcp.xr.dlrr", + FT_UINT32, + BASE_DEC, + NULL, + 0x0, + NULL, HFILL + } + }, + { + &hf_rtcp_length_check, + { + "RTCP frame length check", + "rtcp.length_check", + FT_BOOLEAN, + BASE_NONE, + NULL, + 0x0, + NULL, HFILL + } + }, + { + &hf_rtcp_bye_reason_not_padded, + { + "BYE reason string not NULL padded", + "rtcp.bye_reason_not_padded", + FT_NONE, + BASE_NONE, + NULL, + 0x0, + "RTCP BYE reason string not padded", HFILL + } + }, + { + &hf_rtcp_rtpfb_fmt, + { + "RTCP Feedback message type (FMT)", + "rtcp.rtpfb.fmt", + FT_UINT8, + BASE_DEC, + VALS(rtcp_rtpfb_fmt_vals), + 0x1f, + NULL, HFILL + } + }, + { + &hf_rtcp_psfb_fmt, + { + "RTCP Feedback message type (FMT)", + "rtcp.psfb.fmt", + FT_UINT8, + BASE_DEC, + VALS(rtcp_psfb_fmt_vals), + 0x1f, + NULL, HFILL + } + }, + { + &hf_rtcp_rtpfb_nack_pid, + { + "RTCP Transport Feedback NACK", + "rtcp.rtpfb.nack", + FT_UINT16, + BASE_DEC, + NULL, + 0x0, + NULL, HFILL + } + }, + { + &hf_rtcp_rtpfb_nack_blp, + { + "RTCP Transport Feedback NACK BLP", + "rtcp.rtpfb.nack.blp", + FT_UINT16, + BASE_DEC, + NULL, + 0x0, + NULL, HFILL + } + }, + { + &hf_rtcp_fci, + { + "Feedback Control Information (FCI)", + "rtcp.fci", + FT_BYTES, + BASE_NONE, + NULL, + 0x0, + NULL, HFILL + } + }, + { + &hf_rtcp_xr_idms_spst, + { + "Syncronization Packet Sender Type", + "rtcp.xr.idms.spst", + FT_UINT8, + BASE_DEC, NULL, - 0x0, - NULL, HFILL - } - }, - { - &hf_rtcp_xr_idms_pt, - { - "Payload Type", - "rtcp.xr.idms.pt", - FT_UINT8, - BASE_DEC, + 0x0, + NULL, HFILL + } + }, + { + &hf_rtcp_xr_idms_pt, + { + "Payload Type", + "rtcp.xr.idms.pt", + FT_UINT8, + BASE_DEC, NULL, - 0x0, - NULL, HFILL - } - }, - { - &hf_rtcp_xr_idms_msci, - { - "Media Stream Correlation Identifier", - "rtcp.xr.idms.msci", - FT_UINT32, - BASE_DEC, + 0x0, + NULL, HFILL + } + }, + { + &hf_rtcp_xr_idms_msci, + { + "Media Stream Correlation Identifier", + "rtcp.xr.idms.msci", + FT_UINT32, + BASE_DEC, NULL, - 0x0, - NULL, HFILL - } - }, - { - &hf_rtcp_xr_idms_source_ssrc, - { - "Source SSRC", - "rtcp.xr.idms.source_ssrc", - FT_UINT32, - BASE_DEC, + 0x0, + NULL, HFILL + } + }, + { + &hf_rtcp_xr_idms_source_ssrc, + { + "Source SSRC", + "rtcp.xr.idms.source_ssrc", + FT_UINT32, + BASE_DEC, NULL, - 0x0, - NULL, HFILL - } - }, - { - &hf_rtcp_xr_idms_ntp_rcv_ts_msw, - { - "NTP Timestamp of packet reception (msw)", - "rtcp.xr.idms.ntp_rcv_ts_msw", - FT_UINT32, - BASE_DEC, + 0x0, + NULL, HFILL + } + }, + { + &hf_rtcp_xr_idms_ntp_rcv_ts_msw, + { + "NTP Timestamp of packet reception (msw)", + "rtcp.xr.idms.ntp_rcv_ts_msw", + FT_UINT32, + BASE_DEC, NULL, - 0x0, - NULL, HFILL - } - }, - { - &hf_rtcp_xr_idms_ntp_rcv_ts_lsw, - { - "NTP Timestamp of packet reception (lsw)", - "rtcp.xr.idms.ntp_rcv_ts_lsw", - FT_UINT32, - BASE_DEC, + 0x0, + NULL, HFILL + } + }, + { + &hf_rtcp_xr_idms_ntp_rcv_ts_lsw, + { + "NTP Timestamp of packet reception (lsw)", + "rtcp.xr.idms.ntp_rcv_ts_lsw", + FT_UINT32, + BASE_DEC, NULL, - 0x0, - NULL, HFILL - } - }, - { - &hf_rtcp_xr_idms_rtp_ts, - { - "RTP Timestamp of packet", - "rtcp.xr.idms.rtp_ts", - FT_UINT32, - BASE_DEC, + 0x0, + NULL, HFILL + } + }, + { + &hf_rtcp_xr_idms_rtp_ts, + { + "RTP Timestamp of packet", + "rtcp.xr.idms.rtp_ts", + FT_UINT32, + BASE_DEC, NULL, - 0x0, - NULL, HFILL - } - }, - { - &hf_rtcp_xr_idms_ntp_pres_ts, - { - "NTP Timestamp of presentation", - "rtcp.xr.idms.ntp_pres_ts", - FT_UINT32, - BASE_DEC, + 0x0, + NULL, HFILL + } + }, + { + &hf_rtcp_xr_idms_ntp_pres_ts, + { + "NTP Timestamp of presentation", + "rtcp.xr.idms.ntp_pres_ts", + FT_UINT32, + BASE_DEC, NULL, - 0x0, - NULL, HFILL - } - }, + 0x0, + NULL, HFILL + } + }, { &hf_rtcp_psfb_fir_fci_ssrc, - { - "SSRC", - "rtcp.psfb.fir.fci.ssrc", - FT_UINT32, - BASE_HEX_DEC, - NULL, - 0x0, - NULL, HFILL - } - }, + { + "SSRC", + "rtcp.psfb.fir.fci.ssrc", + FT_UINT32, + BASE_HEX_DEC, + NULL, + 0x0, + NULL, HFILL + } + }, { &hf_rtcp_psfb_fir_fci_csn, - { - "Command Sequence Number", - "rtcp.psfb.fir.fci.csn", - FT_UINT8, - BASE_DEC, - NULL, - 0x0, - NULL, HFILL - } - }, + { + "Command Sequence Number", + "rtcp.psfb.fir.fci.csn", + FT_UINT8, + BASE_DEC, + NULL, + 0x0, + NULL, HFILL + } + }, { &hf_rtcp_psfb_fir_fci_reserved, - { - "Reserved", - "rtcp.psfb.fir.fci.reserved", - FT_UINT32, - BASE_DEC, - NULL, - 0x0, - NULL, HFILL - } - }, + { + "Reserved", + "rtcp.psfb.fir.fci.reserved", + FT_UINT32, + BASE_DEC, + NULL, + 0x0, + NULL, HFILL + } + }, { &hf_rtcp_rtpfb_tmbbr_fci_ssrc, - { - "SSRC", - "rtcp.rtpfb.tmmbr.fci.ssrc", - FT_UINT32, - BASE_HEX_DEC, - NULL, - 0x0, - NULL, HFILL - } - }, + { + "SSRC", + "rtcp.rtpfb.tmmbr.fci.ssrc", + FT_UINT32, + BASE_HEX_DEC, + NULL, + 0x0, + NULL, HFILL + } + }, { &hf_rtcp_rtpfb_tmbbr_fci_exp, - { - "MxTBR Exp", - "rtcp.rtpfb.tmmbr.fci.exp", - FT_UINT8, - BASE_DEC, - NULL, - 0xfc, - NULL, HFILL - } - }, + { + "MxTBR Exp", + "rtcp.rtpfb.tmmbr.fci.exp", + FT_UINT8, + BASE_DEC, + NULL, + 0xfc, + NULL, HFILL + } + }, { &hf_rtcp_rtpfb_tmbbr_fci_mantissa, - { - "MxTBR Mantissa", - "rtcp.rtpfb.tmmbr.fci.mantissa", - FT_UINT32, - BASE_DEC, - NULL, - 0x3fffe, - NULL, HFILL - } - }, + { + "MxTBR Mantissa", + "rtcp.rtpfb.tmmbr.fci.mantissa", + FT_UINT32, + BASE_DEC, + NULL, + 0x3fffe, + NULL, HFILL + } + }, { &hf_rtcp_rtpfb_tmbbr_fci_bitrate, - { - "Maximum total media bit rate", - "rtcp.rtpfb.tmmbr.fci.bitrate", - FT_STRING, - BASE_NONE, - NULL, - 0x0, - NULL, HFILL - } - }, + { + "Maximum total media bit rate", + "rtcp.rtpfb.tmmbr.fci.bitrate", + FT_STRING, + BASE_NONE, + NULL, + 0x0, + NULL, HFILL + } + }, { &hf_rtcp_rtpfb_tmbbr_fci_measuredoverhead, - { - "Measured Overhead", - "rtcp.rtpfb.tmmbr.fci.measuredoverhead", - FT_UINT16, - BASE_DEC, - NULL, - 0x1ff, - NULL, HFILL - } - }, - - - { - &hf_srtcp_e, - { - "SRTCP E flag", - "srtcp.e", - FT_BOOLEAN, - 32, - NULL, - 0x80000000, - "SRTCP Encryption Flag", HFILL - } - }, - { - &hf_srtcp_index, - { - "SRTCP Index", - "srtcp.index", - FT_UINT32, - BASE_DEC_HEX, - NULL, - 0x7fffffff, - NULL, HFILL - } - }, - { - &hf_srtcp_mki, - { - "SRTCP MKI", - "srtcp.mki", - FT_BYTES, - BASE_NONE, - NULL, - 0, - "SRTCP Master Key Index", HFILL - } - }, - { - &hf_srtcp_auth_tag, - { - "SRTCP Auth Tag", - "srtcp.auth_tag", - FT_BYTES, - BASE_NONE, - NULL, - 0, - "SRTCP Authentication Tag", HFILL - } - }, - /* additions for BT XNQ block as defined in RFC5093 */ - { - &hf_rtcp_xr_btxnq_begseq, - { - "Starting sequence number", - "rtcp.xr.btxnq.begseq", - FT_UINT16, - BASE_DEC, - NULL, - 0x0, - NULL, HFILL - } - }, - { - &hf_rtcp_xr_btxnq_endseq, - { - "Last sequence number", - "rtcp.xr.btxnq.endseq", - FT_UINT16, - BASE_DEC, - NULL, - 0x0, - NULL, HFILL - } - }, - { - &hf_rtcp_xr_btxnq_vmaxdiff, - { - "Maximum IPDV difference in 1 cycle", - "rtcp.xr.btxnq.vmaxdiff", - FT_UINT16, - BASE_DEC, - NULL, - 0x0, - NULL, HFILL - } - }, - { - &hf_rtcp_xr_btxnq_vrange, - { - "Maximum IPDV difference seen to date", - "rtcp.xr.btxnq.vrange", - FT_UINT16, - BASE_DEC, - NULL, - 0x0, - NULL, HFILL - } - }, - { - &hf_rtcp_xr_btxnq_vsum, - { - "Sum of peak IPDV differences to date", - "rtcp.xr.btxnq.vsum", - FT_UINT32, - BASE_DEC, - NULL, - 0x0, - NULL, HFILL - } - }, - { - &hf_rtcp_xr_btxnq_cycles, - { - "Number of cycles in calculation", - "rtcp.xr.btxnq.cycles", - FT_UINT16, - BASE_DEC, - NULL, - 0x0, - NULL, HFILL - } - }, - { - &hf_rtcp_xr_btxnq_jbevents, - { - "Number of jitter buffer adaptations to date", - "rtcp.xr.btxnq.jbevents", - FT_UINT16, - BASE_DEC, - NULL, - 0x0, - NULL, HFILL - } - }, - { - &hf_rtcp_xr_btxnq_spare, - { - "Spare/reserved bits", - "rtcp.xr.btxnq.spare", - FT_STRING, - BASE_NONE, - NULL, - 0x0, - NULL, HFILL - } - }, - { - &hf_rtcp_xr_btxnq_tdegnet, - { - "Time degraded by packet loss or late delivery", - "rtcp.xr.btxnq.tdegnet", - FT_UINT32, - BASE_DEC, - NULL, - 0x0, - NULL, HFILL - } - }, - { - &hf_rtcp_xr_btxnq_tdegjit, - { - "Time degraded by jitter buffer adaptation events", - "rtcp.xr.btxnq.tdegjit", - FT_UINT32, - BASE_DEC, - NULL, - 0x0, - NULL, HFILL - } - }, - { - &hf_rtcp_xr_btxnq_es, - { - "ES due to unavailable packet events", - "rtcp.xr.btxnq.es", - FT_UINT32, - BASE_DEC, - NULL, - 0x0, - NULL, HFILL - } - }, - { - &hf_rtcp_xr_btxnq_ses, - { - "SES due to unavailable packet events", - "rtcp.xr.btxnq.ses", - FT_UINT32, - BASE_DEC, - NULL, - 0x0, - NULL, HFILL - } - }, - }; - - static gint *ett[] = - { - &ett_rtcp, - &ett_rtcp_sr, - &ett_rtcp_rr, - &ett_rtcp_sdes, - &ett_rtcp_bye, - &ett_rtcp_app, - &ett_rtcp_rtpfb, - &ett_rtcp_psfb, - &ett_rtcp_xr, - &ett_rtcp_fir, - &ett_rtcp_nack, - &ett_ssrc, - &ett_ssrc_item, - &ett_ssrc_ext_high, - &ett_sdes, - &ett_sdes_item, - &ett_PoC1, + { + "Measured Overhead", + "rtcp.rtpfb.tmmbr.fci.measuredoverhead", + FT_UINT16, + BASE_DEC, + NULL, + 0x1ff, + NULL, HFILL + } + }, + + + { + &hf_srtcp_e, + { + "SRTCP E flag", + "srtcp.e", + FT_BOOLEAN, + 32, + NULL, + 0x80000000, + "SRTCP Encryption Flag", HFILL + } + }, + { + &hf_srtcp_index, + { + "SRTCP Index", + "srtcp.index", + FT_UINT32, + BASE_DEC_HEX, + NULL, + 0x7fffffff, + NULL, HFILL + } + }, + { + &hf_srtcp_mki, + { + "SRTCP MKI", + "srtcp.mki", + FT_BYTES, + BASE_NONE, + NULL, + 0, + "SRTCP Master Key Index", HFILL + } + }, + { + &hf_srtcp_auth_tag, + { + "SRTCP Auth Tag", + "srtcp.auth_tag", + FT_BYTES, + BASE_NONE, + NULL, + 0, + "SRTCP Authentication Tag", HFILL + } + }, + /* additions for BT XNQ block as defined in RFC5093 */ + { + &hf_rtcp_xr_btxnq_begseq, + { + "Starting sequence number", + "rtcp.xr.btxnq.begseq", + FT_UINT16, + BASE_DEC, + NULL, + 0x0, + NULL, HFILL + } + }, + { + &hf_rtcp_xr_btxnq_endseq, + { + "Last sequence number", + "rtcp.xr.btxnq.endseq", + FT_UINT16, + BASE_DEC, + NULL, + 0x0, + NULL, HFILL + } + }, + { + &hf_rtcp_xr_btxnq_vmaxdiff, + { + "Maximum IPDV difference in 1 cycle", + "rtcp.xr.btxnq.vmaxdiff", + FT_UINT16, + BASE_DEC, + NULL, + 0x0, + NULL, HFILL + } + }, + { + &hf_rtcp_xr_btxnq_vrange, + { + "Maximum IPDV difference seen to date", + "rtcp.xr.btxnq.vrange", + FT_UINT16, + BASE_DEC, + NULL, + 0x0, + NULL, HFILL + } + }, + { + &hf_rtcp_xr_btxnq_vsum, + { + "Sum of peak IPDV differences to date", + "rtcp.xr.btxnq.vsum", + FT_UINT32, + BASE_DEC, + NULL, + 0x0, + NULL, HFILL + } + }, + { + &hf_rtcp_xr_btxnq_cycles, + { + "Number of cycles in calculation", + "rtcp.xr.btxnq.cycles", + FT_UINT16, + BASE_DEC, + NULL, + 0x0, + NULL, HFILL + } + }, + { + &hf_rtcp_xr_btxnq_jbevents, + { + "Number of jitter buffer adaptations to date", + "rtcp.xr.btxnq.jbevents", + FT_UINT16, + BASE_DEC, + NULL, + 0x0, + NULL, HFILL + } + }, + { + &hf_rtcp_xr_btxnq_spare, + { + "Spare/reserved bits", + "rtcp.xr.btxnq.spare", + FT_STRING, + BASE_NONE, + NULL, + 0x0, + NULL, HFILL + } + }, + { + &hf_rtcp_xr_btxnq_tdegnet, + { + "Time degraded by packet loss or late delivery", + "rtcp.xr.btxnq.tdegnet", + FT_UINT32, + BASE_DEC, + NULL, + 0x0, + NULL, HFILL + } + }, + { + &hf_rtcp_xr_btxnq_tdegjit, + { + "Time degraded by jitter buffer adaptation events", + "rtcp.xr.btxnq.tdegjit", + FT_UINT32, + BASE_DEC, + NULL, + 0x0, + NULL, HFILL + } + }, + { + &hf_rtcp_xr_btxnq_es, + { + "ES due to unavailable packet events", + "rtcp.xr.btxnq.es", + FT_UINT32, + BASE_DEC, + NULL, + 0x0, + NULL, HFILL + } + }, + { + &hf_rtcp_xr_btxnq_ses, + { + "SES due to unavailable packet events", + "rtcp.xr.btxnq.ses", + FT_UINT32, + BASE_DEC, + NULL, + 0x0, + NULL, HFILL + } + }, + }; + + static gint *ett[] = + { + &ett_rtcp, + &ett_rtcp_sr, + &ett_rtcp_rr, + &ett_rtcp_sdes, + &ett_rtcp_bye, + &ett_rtcp_app, + &ett_rtcp_rtpfb, + &ett_rtcp_psfb, + &ett_rtcp_xr, + &ett_rtcp_fir, + &ett_rtcp_nack, + &ett_ssrc, + &ett_ssrc_item, + &ett_ssrc_ext_high, + &ett_sdes, + &ett_sdes_item, + &ett_PoC1, &ett_mux, - &ett_rtcp_setup, - &ett_rtcp_roundtrip_delay, - &ett_xr_block, - &ett_xr_block_contents, - &ett_xr_ssrc, - &ett_xr_loss_chunk, - &ett_poc1_conn_contents, - &ett_rtcp_nack_blp, - }; - - module_t *rtcp_module; - - proto_rtcp = proto_register_protocol("Real-time Transport Control Protocol", + &ett_rtcp_setup, + &ett_rtcp_roundtrip_delay, + &ett_xr_block, + &ett_xr_block_contents, + &ett_xr_ssrc, + &ett_xr_loss_chunk, + &ett_poc1_conn_contents, + &ett_rtcp_nack_blp, + }; + + module_t *rtcp_module; + + proto_rtcp = proto_register_protocol("Real-time Transport Control Protocol", "RTCP", "rtcp"); - proto_register_field_array(proto_rtcp, hf, array_length(hf)); - proto_register_subtree_array(ett, array_length(ett)); + proto_register_field_array(proto_rtcp, hf, array_length(hf)); + proto_register_subtree_array(ett, array_length(ett)); - register_dissector("rtcp", dissect_rtcp, proto_rtcp); + register_dissector("rtcp", dissect_rtcp, proto_rtcp); - rtcp_module = prefs_register_protocol(proto_rtcp, NULL); + rtcp_module = prefs_register_protocol(proto_rtcp, NULL); - prefs_register_bool_preference(rtcp_module, "show_setup_info", - "Show stream setup information", - "Where available, show which protocol and frame caused " - "this RTCP stream to be created", - &global_rtcp_show_setup_info); + prefs_register_bool_preference(rtcp_module, "show_setup_info", + "Show stream setup information", + "Where available, show which protocol and frame caused " + "this RTCP stream to be created", + &global_rtcp_show_setup_info); - prefs_register_bool_preference(rtcp_module, "heuristic_rtcp", - "Try to decode RTCP outside of conversations", - "If call control SIP/H.323/RTSP/.. messages are missing in the trace, " - "RTCP isn't decoded without this", - &global_rtcp_heur); + prefs_register_bool_preference(rtcp_module, "heuristic_rtcp", + "Try to decode RTCP outside of conversations", + "If call control SIP/H.323/RTSP/.. messages are missing in the trace, " + "RTCP isn't decoded without this", + &global_rtcp_heur); - prefs_register_bool_preference(rtcp_module, "show_roundtrip_calculation", - "Show relative roundtrip calculations", - "Try to work out network delay by comparing time between packets " - "as captured and delays as seen by endpoint", - &global_rtcp_show_roundtrip_calculation); + prefs_register_bool_preference(rtcp_module, "show_roundtrip_calculation", + "Show relative roundtrip calculations", + "Try to work out network delay by comparing time between packets " + "as captured and delays as seen by endpoint", + &global_rtcp_show_roundtrip_calculation); - prefs_register_uint_preference(rtcp_module, "roundtrip_min_threshhold", - "Minimum roundtrip calculation to report (ms)", - "Minimum (absolute) calculated roundtrip delay time in milliseconds that " - "should be reported", - 10, &global_rtcp_show_roundtrip_calculation_minimum); + prefs_register_uint_preference(rtcp_module, "roundtrip_min_threshhold", + "Minimum roundtrip calculation to report (ms)", + "Minimum (absolute) calculated roundtrip delay time in milliseconds that " + "should be reported", + 10, &global_rtcp_show_roundtrip_calculation_minimum); - /* Register table for sub-dissetors */ - rtcp_dissector_table = register_dissector_table("rtcp.app.name", "RTCP Application Name", FT_STRING, BASE_NONE); + /* Register table for sub-dissetors */ + rtcp_dissector_table = register_dissector_table("rtcp.app.name", "RTCP Application Name", FT_STRING, BASE_NONE); } void proto_reg_handoff_rtcp(void) { - /* - * Register this dissector as one that can be selected by a - * UDP port number. - */ - rtcp_handle = find_dissector("rtcp"); - dissector_add_handle("udp.port", rtcp_handle); - - heur_dissector_add( "udp", dissect_rtcp_heur, proto_rtcp); + /* + * Register this dissector as one that can be selected by a + * UDP port number. + */ + rtcp_handle = find_dissector("rtcp"); + dissector_add_handle("udp.port", rtcp_handle); + + heur_dissector_add( "udp", dissect_rtcp_heur, proto_rtcp); heur_dissector_add("stun", dissect_rtcp_heur, proto_rtcp); } diff --git a/epan/dissectors/packet-sflow.c b/epan/dissectors/packet-sflow.c index 17797969af..265defc7ef 100644 --- a/epan/dissectors/packet-sflow.c +++ b/epan/dissectors/packet-sflow.c @@ -876,11 +876,11 @@ dissect_sflow_245_address_type(tvbuff_t *tvb, proto_tree *tree, gint offset, switch (addr_type) { case ADDR_TYPE_IPV4: len = 4; - proto_tree_add_item(tree, hf_type->hf_addr_v4, tvb, offset, 4, FALSE); + proto_tree_add_item(tree, hf_type->hf_addr_v4, tvb, offset, 4, ENC_BIG_ENDIAN); break; case ADDR_TYPE_IPV6: len = 16; - proto_tree_add_item(tree, hf_type->hf_addr_v6, tvb, offset, 16, FALSE); + proto_tree_add_item(tree, hf_type->hf_addr_v6, tvb, offset, 16, ENC_NA); break; default: /* acferen: November 10, 2010 diff --git a/epan/dissectors/packet-ucp.c b/epan/dissectors/packet-ucp.c index 739c8c1966..1e1fa9f447 100644 --- a/epan/dissectors/packet-ucp.c +++ b/epan/dissectors/packet-ucp.c @@ -798,7 +798,7 @@ ucp_handle_string(proto_tree *tree, tvbuff_t *tvb, int field, int *offset) } else len = idx - *offset; if (len > 0) - proto_tree_add_item(tree, field, tvb, *offset, len, FALSE); + proto_tree_add_item(tree, field, tvb, *offset, len, ENC_ASCII|ENC_NA); *offset += len; if (idx != -1) *offset += 1; /* skip terminating '/' */ -- cgit v1.2.3