summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnders Broman <anders.broman@ericsson.com>2012-04-27 10:48:03 +0000
committerAnders Broman <anders.broman@ericsson.com>2012-04-27 10:48:03 +0000
commita72f9abfc0c79a3920316140dc68a40a297da7aa (patch)
tree502b2bb6fe34b32f23c6abc6bd0227ae9a5ee945
parent7eab849657682663b54bc4969312c3f76d490f27 (diff)
downloadwireshark-a72f9abfc0c79a3920316140dc68a40a297da7aa.tar.gz
From David Wei:
Further additions and fixes to MBMS in GTPv2 and DIAMETER dissectors. svn path=/trunk/; revision=42289
-rw-r--r--epan/dissectors/packet-diameter_3gpp.c1399
-rw-r--r--epan/dissectors/packet-gtpv2.c40
-rw-r--r--epan/dissectors/packet-gtpv2.h1
3 files changed, 747 insertions, 693 deletions
diff --git a/epan/dissectors/packet-diameter_3gpp.c b/epan/dissectors/packet-diameter_3gpp.c
index 83f7c97053..3ec6200828 100644
--- a/epan/dissectors/packet-diameter_3gpp.c
+++ b/epan/dissectors/packet-diameter_3gpp.c
@@ -44,18 +44,18 @@
#include "packet-ntp.h"
/* Initialize the protocol and registered fields */
-static int proto_diameter_3gpp = -1;
-
-static int hf_diameter_3gpp_visited_nw_id = -1;
-static int hf_diameter_3gpp_msisdn = -1;
-static int hf_diameter_3gpp_path = -1;
-static int hf_diameter_3gpp_contact = -1;
-static int hf_diameter_3gpp_user_data = -1;
-static int hf_diameter_3gpp_ipaddr = -1;
-static int hf_diameter_3gpp_mbms_required_qos_prio = -1;
-static int hf_diameter_3gpp_tmgi = -1;
-static int hf_diameter_3gpp_service_ind = -1;
-static int hf_diameter_mbms_service_id = -1;
+static int proto_diameter_3gpp = -1;
+
+static int hf_diameter_3gpp_visited_nw_id = -1;
+static int hf_diameter_3gpp_msisdn = -1;
+static int hf_diameter_3gpp_path = -1;
+static int hf_diameter_3gpp_contact = -1;
+static int hf_diameter_3gpp_user_data = -1;
+static int hf_diameter_3gpp_ipaddr = -1;
+static int hf_diameter_3gpp_mbms_required_qos_prio = -1;
+static int hf_diameter_3gpp_tmgi = -1;
+static int hf_diameter_3gpp_service_ind = -1;
+static int hf_diameter_mbms_service_id = -1;
static int hf_diameter_address_digits = -1;
static int hf_diameter_3gpp_spare_bits = -1;
static int hf_diameter_3gpp_feature_list_flags = -1;
@@ -106,12 +106,13 @@ static int hf_diameter_3gpp_idr_flags_bit1 = -1;
static int hf_diameter_3gpp_idr_flags_bit2 = -1;
static int hf_diameter_3gpp_idr_flags_bit3 = -1;
static int hf_diameter_3gpp_idr_flags_bit4 = -1;
-static int hf_diameter_3gpp_sgsn_ipv6_addr = -1;
+static int hf_diameter_3gpp_ipv6addr = -1;
static int hf_diameter_3gpp_mbms_abs_time_ofmbms_data_tfer = -1;
+static int hf_diameter_3gpp_udp_port = -1;
static gint diameter_3gpp_path_ett = -1;
static gint diameter_3gpp_msisdn_ett = -1;
static gint diameter_3gpp_feature_list_ett = -1;
-static gint diameter_3gpp_tmgi_ett = -1;
+static gint diameter_3gpp_tmgi_ett = -1;
static gint diameter_3gpp_ulr_flags_ett = -1;
static gint diameter_3gpp_ula_flags_ett = -1;
static gint diameter_3gpp_dsr_flags_ett = -1;
@@ -125,16 +126,17 @@ static gint diameter_3gpp_idr_flags_ett = -1;
static dissector_handle_t xml_handle;
/* AVP Code: 15 3GPP-SGSN-IPv6-Address */
+/* AVP Code: 917 MBMS-GGSN-IPv6-Address */
static int
-dissect_diameter_3gpp_sgsn_ipv6_addr(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
+dissect_diameter_3gpp_ipv6addr(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
{
- int offset = 0;
+ int offset = 0;
- proto_tree_add_item(tree, hf_diameter_3gpp_sgsn_ipv6_addr, tvb, offset, 16, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_diameter_3gpp_ipv6addr, tvb, offset, 16, ENC_BIG_ENDIAN);
- offset += 16;
+ offset += 16;
- return offset;
+ return offset;
}
@@ -148,19 +150,19 @@ dissect_diameter_3gpp_sgsn_ipv6_addr(tvbuff_t *tvb, packet_info *pinfo _U_, prot
static int
dissect_diameter_3gpp_visited_nw_id(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree) {
- proto_item* item;
- int offset = 0, i;
- int length = tvb_length(tvb);
+ proto_item* item;
+ int offset = 0, i;
+ int length = tvb_length(tvb);
- for(i = 0; i < length; i++)
- if(!g_ascii_isprint(tvb_get_guint8(tvb, i)))
- return length;
+ for(i = 0; i < length; i++)
+ if(!g_ascii_isprint(tvb_get_guint8(tvb, i)))
+ return length;
- item = proto_tree_add_item(tree, hf_diameter_3gpp_visited_nw_id, tvb, offset, length, ENC_ASCII|ENC_NA);
- PROTO_ITEM_SET_GENERATED(item);
+ item = proto_tree_add_item(tree, hf_diameter_3gpp_visited_nw_id, tvb, offset, length, ENC_ASCII|ENC_NA);
+ PROTO_ITEM_SET_GENERATED(item);
- return length;
+ return length;
}
/* AVP Code: 630 Feature-List
* imscxdx.xml
@@ -170,13 +172,13 @@ dissect_diameter_3gpp_visited_nw_id(tvbuff_t *tvb, packet_info *pinfo _U_, proto
static int
dissect_diameter_3gpp_feature_list(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree) {
- proto_item* item;
- proto_tree *sub_tree;
- int offset = 0;
+ proto_item* item;
+ proto_tree *sub_tree;
+ int offset = 0;
guint32 bit_offset;
- item = proto_tree_add_item(tree, hf_diameter_3gpp_feature_list_flags, tvb, offset, 4, ENC_BIG_ENDIAN);
- sub_tree = proto_item_add_subtree(item, diameter_3gpp_feature_list_ett);
+ item = proto_tree_add_item(tree, hf_diameter_3gpp_feature_list_flags, tvb, offset, 4, ENC_BIG_ENDIAN);
+ sub_tree = proto_item_add_subtree(item, diameter_3gpp_feature_list_ett);
bit_offset = 0;
proto_tree_add_bits_item(sub_tree, hf_diameter_3gpp_spare_bits, tvb, bit_offset, 29, ENC_BIG_ENDIAN);
@@ -189,7 +191,7 @@ dissect_diameter_3gpp_feature_list(tvbuff_t *tvb, packet_info *pinfo _U_, proto_
bit_offset++;
offset = bit_offset>>3;
- return offset;
+ return offset;
}
@@ -203,26 +205,26 @@ dissect_diameter_3gpp_feature_list(tvbuff_t *tvb, packet_info *pinfo _U_, proto_
static int
dissect_diameter_3gpp_path(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree) {
- proto_item* item;
- proto_tree *sub_tree;
- int offset = 0, comma_offset;
- int end_offset = tvb_length(tvb) - 1;
+ proto_item* item;
+ proto_tree *sub_tree;
+ int offset = 0, comma_offset;
+ int end_offset = tvb_length(tvb) - 1;
- item = proto_tree_add_text(tree, tvb, offset, -1,"Paths");
- sub_tree = proto_item_add_subtree(item,diameter_3gpp_path_ett);
+ item = proto_tree_add_text(tree, tvb, offset, -1,"Paths");
+ sub_tree = proto_item_add_subtree(item,diameter_3gpp_path_ett);
- while (offset < end_offset){
- comma_offset = tvb_find_guint8(tvb, offset, -1, ',');
- if(comma_offset == -1){
- proto_tree_add_item(sub_tree, hf_diameter_3gpp_path, tvb, offset, comma_offset, ENC_ASCII|ENC_NA);
- return end_offset;
- }
- proto_tree_add_item(sub_tree, hf_diameter_3gpp_path, tvb, offset, comma_offset, ENC_ASCII|ENC_NA);
- offset = comma_offset+1;
- }
+ while (offset < end_offset){
+ comma_offset = tvb_find_guint8(tvb, offset, -1, ',');
+ if(comma_offset == -1){
+ proto_tree_add_item(sub_tree, hf_diameter_3gpp_path, tvb, offset, comma_offset, ENC_ASCII|ENC_NA);
+ return end_offset;
+ }
+ proto_tree_add_item(sub_tree, hf_diameter_3gpp_path, tvb, offset, comma_offset, ENC_ASCII|ENC_NA);
+ offset = comma_offset+1;
+ }
- return tvb_length(tvb);
+ return tvb_length(tvb);
}
/* AVP Code: 641 Contact
@@ -235,63 +237,63 @@ dissect_diameter_3gpp_path(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tr
static int
dissect_diameter_3gpp_contact(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree) {
- proto_item* item;
- int offset = 0;
+ proto_item* item;
+ int offset = 0;
- item = proto_tree_add_item(tree, hf_diameter_3gpp_contact, tvb, offset, -1, ENC_ASCII|ENC_NA);
- PROTO_ITEM_SET_GENERATED(item);
+ item = proto_tree_add_item(tree, hf_diameter_3gpp_contact, tvb, offset, -1, ENC_ASCII|ENC_NA);
+ PROTO_ITEM_SET_GENERATED(item);
- return tvb_length(tvb);
+ return tvb_length(tvb);
}
/* AVP Code: 701 MSISDN */
static int
dissect_diameter_3gpp_msisdn(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree) {
- proto_item* item;
- proto_tree *sub_tree;
- int offset = 0;
- const char *digit_str;
- int length = tvb_length(tvb);
+ proto_item* item;
+ proto_tree *sub_tree;
+ int offset = 0;
+ const char *digit_str;
+ int length = tvb_length(tvb);
- item = proto_tree_add_item(tree, hf_diameter_3gpp_msisdn, tvb, offset, length, ENC_NA);
- sub_tree = proto_item_add_subtree(item,diameter_3gpp_msisdn_ett);
+ item = proto_tree_add_item(tree, hf_diameter_3gpp_msisdn, tvb, offset, length, ENC_NA);
+ sub_tree = proto_item_add_subtree(item,diameter_3gpp_msisdn_ett);
- dissect_e164_cc(tvb, sub_tree, offset, TRUE);
+ dissect_e164_cc(tvb, sub_tree, offset, TRUE);
- digit_str = unpack_digits(tvb, 1);
- proto_tree_add_string(sub_tree, hf_diameter_address_digits, tvb, 1, -1, digit_str);
+ digit_str = unpack_digits(tvb, 1);
+ proto_tree_add_string(sub_tree, hf_diameter_address_digits, tvb, 1, -1, digit_str);
- return tvb_length(tvb);
+ return tvb_length(tvb);
}
-/* AVP Code: 702 User-Data
+/* AVP Code: 702 User-Data
* TGPPSh.xml
* The AVP codes from 709 to799 are reserved for TS 29.329
*/
-/* AVP Code: 606 User-Data
+/* AVP Code: 606 User-Data
* imscxdx.xml
* IMS Cx Dx AVPS 3GPP TS 29.229
*/
static int
dissect_diameter_3gpp_user_data(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree) {
- guint8 word[6];
- int length = tvb_length(tvb);
+ guint8 word[6];
+ int length = tvb_length(tvb);
- /* If there is less than 38 characters this is not XML
- * <?xml version="1.0" encoding="UTF-8"?>
- */
- if(length < 38)
- return length;
+ /* If there is less than 38 characters this is not XML
+ * <?xml version="1.0" encoding="UTF-8"?>
+ */
+ if(length < 38)
+ return length;
- tvb_get_nstringz0(tvb, 0, sizeof(word),word);
- if (g_ascii_strncasecmp(word, "<?xml", 5) == 0){
- call_dissector(xml_handle, tvb, pinfo, tree);
- }
+ tvb_get_nstringz0(tvb, 0, sizeof(word),word);
+ if (g_ascii_strncasecmp(word, "<?xml", 5) == 0){
+ call_dissector(xml_handle, tvb, pinfo, tree);
+ }
- return length;
+ return length;
}
@@ -301,41 +303,41 @@ dissect_diameter_3gpp_user_data(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tre
static int
dissect_diameter_3gpp_service_ind(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree) {
- proto_item* item;
- int offset = 0, i;
- int length = tvb_length(tvb);
+ proto_item* item;
+ int offset = 0, i;
+ int length = tvb_length(tvb);
- for(i = 0; i < length; i++)
- if(!g_ascii_isprint(tvb_get_guint8(tvb, i)))
- return length;
+ for(i = 0; i < length; i++)
+ if(!g_ascii_isprint(tvb_get_guint8(tvb, i)))
+ return length;
- item = proto_tree_add_item(tree, hf_diameter_3gpp_service_ind, tvb, offset, length, ENC_ASCII|ENC_NA);
- PROTO_ITEM_SET_GENERATED(item);
+ item = proto_tree_add_item(tree, hf_diameter_3gpp_service_ind, tvb, offset, length, ENC_ASCII|ENC_NA);
+ PROTO_ITEM_SET_GENERATED(item);
- return length;
+ return length;
}
/* AVP Code: 900 TMGI */
static int
dissect_diameter_3gpp_tmgi(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree) {
- proto_item* item;
- proto_tree *sub_tree;
- int offset = 0;
+ proto_item* item;
+ proto_tree *sub_tree;
+ int offset = 0;
- item = proto_tree_add_item(tree, hf_diameter_3gpp_tmgi, tvb, offset, 6, ENC_NA);
- sub_tree = proto_item_add_subtree(item,diameter_3gpp_tmgi_ett);
+ item = proto_tree_add_item(tree, hf_diameter_3gpp_tmgi, tvb, offset, 6, ENC_NA);
+ sub_tree = proto_item_add_subtree(item,diameter_3gpp_tmgi_ett);
- /* MBMS Service ID consisting of three octets. MBMS Service ID consists of a 6-digit
- * fixed-length hexadecimal number between 000000 and FFFFFF.
- * MBMS Service ID uniquely identifies an MBMS bearer service within a PLMN.
- */
+ /* MBMS Service ID consisting of three octets. MBMS Service ID consists of a 6-digit
+ * fixed-length hexadecimal number between 000000 and FFFFFF.
+ * MBMS Service ID uniquely identifies an MBMS bearer service within a PLMN.
+ */
- proto_tree_add_item(sub_tree, hf_diameter_mbms_service_id, tvb, offset, 3, ENC_BIG_ENDIAN);
- offset = offset+3;
- offset = dissect_e212_mcc_mnc(tvb, pinfo, sub_tree, offset, TRUE);
+ proto_tree_add_item(sub_tree, hf_diameter_mbms_service_id, tvb, offset, 3, ENC_BIG_ENDIAN);
+ offset = offset+3;
+ offset = dissect_e212_mcc_mnc(tvb, pinfo, sub_tree, offset, TRUE);
- return offset;
+ return offset;
}
@@ -345,12 +347,12 @@ dissect_diameter_3gpp_tmgi(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tr
static int
dissect_diameter_3gpp_ipaddr(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree) {
- int offset = 0;
+ int offset = 0;
- proto_tree_add_item(tree, hf_diameter_3gpp_ipaddr, tvb, offset, 4, ENC_BIG_ENDIAN);
- offset += 4;
+ proto_tree_add_item(tree, hf_diameter_3gpp_ipaddr, tvb, offset, 4, ENC_BIG_ENDIAN);
+ offset += 4;
- return offset;
+ return offset;
}
@@ -358,73 +360,87 @@ dissect_diameter_3gpp_ipaddr(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *
static int
dissect_diameter_3gpp_mbms_required_qos(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
- int offset = 0;
- guint length;
-
- /* Octet
- * 1 Allocation/Retention Priority as specified in 3GPP TS 23.107.
- * This octet encodes each priority level defined in 3GPP TS 23.107
- * as the binary value of the priority level. It specifies the relative
- * importance of the actual MBMS bearer service compared to other MBMS
- * and non-MBMS bearer services for allocation and retention of the
- * MBMS bearer service.
- * 2-N QoS Profile as specified by the Quality-of-Service information element,
- * from octet 3 onwards, in 3GPP TS 24.008
- */
- proto_tree_add_item(tree, hf_diameter_3gpp_mbms_required_qos_prio, tvb, offset, 1, ENC_BIG_ENDIAN);
- offset++;
- length = tvb_length(tvb) - 1;
- de_sm_qos(tvb, tree, pinfo, offset,length, NULL, 0);
- return offset+length;
+ int offset = 0;
+ guint length;
+
+ /* Octet
+ * 1 Allocation/Retention Priority as specified in 3GPP TS 23.107.
+ * This octet encodes each priority level defined in 3GPP TS 23.107
+ * as the binary value of the priority level. It specifies the relative
+ * importance of the actual MBMS bearer service compared to other MBMS
+ * and non-MBMS bearer services for allocation and retention of the
+ * MBMS bearer service.
+ * 2-N QoS Profile as specified by the Quality-of-Service information element,
+ * from octet 3 onwards, in 3GPP TS 24.008
+ */
+ proto_tree_add_item(tree, hf_diameter_3gpp_mbms_required_qos_prio, tvb, offset, 1, ENC_BIG_ENDIAN);
+ offset++;
+ length = tvb_length(tvb) - 1;
+ de_sm_qos(tvb, tree, pinfo, offset,length, NULL, 0);
+ return offset+length;
}
+/* AVP Code: 926 MBMS-BMSC-SSM-UDP-Port */
+/* AVP Code: 927 MBMS-GW-UDP-Port */
+static int
+dissect_diameter_3gpp_udp_port(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
+{
+ int offset = 0;
+
+ proto_tree_add_item(tree, hf_diameter_3gpp_udp_port, tvb, offset, 1, ENC_BIG_ENDIAN);
+
+ offset += 1;
+
+ return offset;
+}
+
/* AVP Code: 929 MBMS-Data-Transfer-Start */
/* AVP Code: 930 MBMS-Data-Transfer-Stop */
static int
dissect_diameter_3gpp_mbms_abs_time_ofmbms_data_tfer(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
{
- int offset = 0;
- const gchar *time_str;
+ int offset = 0;
+ const gchar *time_str;
- time_str = tvb_ntp_fmt_ts(tvb, offset);
- proto_tree_add_string(tree, hf_diameter_3gpp_mbms_abs_time_ofmbms_data_tfer, tvb, offset, 8, time_str);
- offset+=8;
+ time_str = tvb_ntp_fmt_ts(tvb, offset);
+ proto_tree_add_string(tree, hf_diameter_3gpp_mbms_abs_time_ofmbms_data_tfer, tvb, offset, 8, time_str);
+ offset+=8;
- return offset;
+ return offset;
}
/* AVP Code: 1405 ULR-Flags */
static int
dissect_diameter_3gpp_ulr_flags(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree) {
- proto_item* item;
- proto_tree *sub_tree;
- int offset = 0;
- guint32 bit_offset;
-
- item = proto_tree_add_item(tree, hf_diameter_3gpp_ulr_flags, tvb, offset, 4, ENC_BIG_ENDIAN);
- sub_tree = proto_item_add_subtree(item, diameter_3gpp_ulr_flags_ett);
- bit_offset = 0;
- proto_tree_add_bits_item(sub_tree, hf_diameter_3gpp_spare_bits, tvb, bit_offset, 25, ENC_BIG_ENDIAN);
- bit_offset+=25;
- proto_tree_add_bits_item(sub_tree, hf_diameter_3gpp_ulr_flags_bit6, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
- bit_offset++;
- proto_tree_add_bits_item(sub_tree, hf_diameter_3gpp_ulr_flags_bit5, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
- bit_offset++;
- proto_tree_add_bits_item(sub_tree, hf_diameter_3gpp_ulr_flags_bit4, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
- bit_offset++;
- proto_tree_add_bits_item(sub_tree, hf_diameter_3gpp_ulr_flags_bit3, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
- bit_offset++;
- proto_tree_add_bits_item(sub_tree, hf_diameter_3gpp_ulr_flags_bit2, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
- bit_offset++;
- proto_tree_add_bits_item(sub_tree, hf_diameter_3gpp_ulr_flags_bit1, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
- bit_offset++;
- proto_tree_add_bits_item(sub_tree, hf_diameter_3gpp_ulr_flags_bit0, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
- bit_offset++;
-
- offset = bit_offset>>3;
- return offset;
+ proto_item* item;
+ proto_tree *sub_tree;
+ int offset = 0;
+ guint32 bit_offset;
+
+ item = proto_tree_add_item(tree, hf_diameter_3gpp_ulr_flags, tvb, offset, 4, ENC_BIG_ENDIAN);
+ sub_tree = proto_item_add_subtree(item, diameter_3gpp_ulr_flags_ett);
+ bit_offset = 0;
+ proto_tree_add_bits_item(sub_tree, hf_diameter_3gpp_spare_bits, tvb, bit_offset, 25, ENC_BIG_ENDIAN);
+ bit_offset+=25;
+ proto_tree_add_bits_item(sub_tree, hf_diameter_3gpp_ulr_flags_bit6, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
+ bit_offset++;
+ proto_tree_add_bits_item(sub_tree, hf_diameter_3gpp_ulr_flags_bit5, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
+ bit_offset++;
+ proto_tree_add_bits_item(sub_tree, hf_diameter_3gpp_ulr_flags_bit4, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
+ bit_offset++;
+ proto_tree_add_bits_item(sub_tree, hf_diameter_3gpp_ulr_flags_bit3, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
+ bit_offset++;
+ proto_tree_add_bits_item(sub_tree, hf_diameter_3gpp_ulr_flags_bit2, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
+ bit_offset++;
+ proto_tree_add_bits_item(sub_tree, hf_diameter_3gpp_ulr_flags_bit1, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
+ bit_offset++;
+ proto_tree_add_bits_item(sub_tree, hf_diameter_3gpp_ulr_flags_bit0, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
+ bit_offset++;
+
+ offset = bit_offset>>3;
+ return offset;
}
@@ -432,21 +448,21 @@ dissect_diameter_3gpp_ulr_flags(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tre
static int
dissect_diameter_3gpp_ula_flags(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree) {
- proto_item* item;
- proto_tree *sub_tree;
- int offset = 0;
- guint32 bit_offset;
+ proto_item* item;
+ proto_tree *sub_tree;
+ int offset = 0;
+ guint32 bit_offset;
- item = proto_tree_add_item(tree, hf_diameter_3gpp_ula_flags, tvb, offset, 4, ENC_BIG_ENDIAN);
- sub_tree = proto_item_add_subtree(item, diameter_3gpp_ula_flags_ett);
- bit_offset = 0;
- proto_tree_add_bits_item(sub_tree, hf_diameter_3gpp_spare_bits, tvb, bit_offset, 31, ENC_BIG_ENDIAN);
- bit_offset+=31;
- proto_tree_add_bits_item(sub_tree, hf_diameter_3gpp_ula_flags_bit0, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
- bit_offset++;
+ item = proto_tree_add_item(tree, hf_diameter_3gpp_ula_flags, tvb, offset, 4, ENC_BIG_ENDIAN);
+ sub_tree = proto_item_add_subtree(item, diameter_3gpp_ula_flags_ett);
+ bit_offset = 0;
+ proto_tree_add_bits_item(sub_tree, hf_diameter_3gpp_spare_bits, tvb, bit_offset, 31, ENC_BIG_ENDIAN);
+ bit_offset+=31;
+ proto_tree_add_bits_item(sub_tree, hf_diameter_3gpp_ula_flags_bit0, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
+ bit_offset++;
- offset = bit_offset>>3;
- return offset;
+ offset = bit_offset>>3;
+ return offset;
}
@@ -454,47 +470,47 @@ dissect_diameter_3gpp_ula_flags(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tre
static int
dissect_diameter_3gpp_dsr_flags(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree) {
- proto_item* item;
- proto_tree *sub_tree;
- int offset = 0;
- guint32 bit_offset;
-
- item = proto_tree_add_item(tree, hf_diameter_3gpp_dsr_flags, tvb, offset, 4, ENC_BIG_ENDIAN);
- sub_tree = proto_item_add_subtree(item, diameter_3gpp_dsr_flags_ett);
- bit_offset = 0;
- proto_tree_add_bits_item(sub_tree, hf_diameter_3gpp_spare_bits, tvb, bit_offset, 18, ENC_BIG_ENDIAN);
- bit_offset+=18;
- proto_tree_add_bits_item(sub_tree, hf_diameter_3gpp_dsr_flags_bit13, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
- bit_offset++;
- proto_tree_add_bits_item(sub_tree, hf_diameter_3gpp_dsr_flags_bit12, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
- bit_offset++;
- proto_tree_add_bits_item(sub_tree, hf_diameter_3gpp_dsr_flags_bit11, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
- bit_offset++;
- proto_tree_add_bits_item(sub_tree, hf_diameter_3gpp_dsr_flags_bit10, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
- bit_offset++;
- proto_tree_add_bits_item(sub_tree, hf_diameter_3gpp_dsr_flags_bit9, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
- bit_offset++;
- proto_tree_add_bits_item(sub_tree, hf_diameter_3gpp_dsr_flags_bit8, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
- bit_offset++;
- proto_tree_add_bits_item(sub_tree, hf_diameter_3gpp_dsr_flags_bit7, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
- bit_offset++;
- proto_tree_add_bits_item(sub_tree, hf_diameter_3gpp_dsr_flags_bit6, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
- bit_offset++;
- proto_tree_add_bits_item(sub_tree, hf_diameter_3gpp_dsr_flags_bit5, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
- bit_offset++;
- proto_tree_add_bits_item(sub_tree, hf_diameter_3gpp_dsr_flags_bit4, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
- bit_offset++;
- proto_tree_add_bits_item(sub_tree, hf_diameter_3gpp_dsr_flags_bit3, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
- bit_offset++;
- proto_tree_add_bits_item(sub_tree, hf_diameter_3gpp_dsr_flags_bit2, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
- bit_offset++;
- proto_tree_add_bits_item(sub_tree, hf_diameter_3gpp_dsr_flags_bit1, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
- bit_offset++;
- proto_tree_add_bits_item(sub_tree, hf_diameter_3gpp_dsr_flags_bit0, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
- bit_offset++;
-
- offset = bit_offset>>3;
- return offset;
+ proto_item* item;
+ proto_tree *sub_tree;
+ int offset = 0;
+ guint32 bit_offset;
+
+ item = proto_tree_add_item(tree, hf_diameter_3gpp_dsr_flags, tvb, offset, 4, ENC_BIG_ENDIAN);
+ sub_tree = proto_item_add_subtree(item, diameter_3gpp_dsr_flags_ett);
+ bit_offset = 0;
+ proto_tree_add_bits_item(sub_tree, hf_diameter_3gpp_spare_bits, tvb, bit_offset, 18, ENC_BIG_ENDIAN);
+ bit_offset+=18;
+ proto_tree_add_bits_item(sub_tree, hf_diameter_3gpp_dsr_flags_bit13, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
+ bit_offset++;
+ proto_tree_add_bits_item(sub_tree, hf_diameter_3gpp_dsr_flags_bit12, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
+ bit_offset++;
+ proto_tree_add_bits_item(sub_tree, hf_diameter_3gpp_dsr_flags_bit11, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
+ bit_offset++;
+ proto_tree_add_bits_item(sub_tree, hf_diameter_3gpp_dsr_flags_bit10, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
+ bit_offset++;
+ proto_tree_add_bits_item(sub_tree, hf_diameter_3gpp_dsr_flags_bit9, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
+ bit_offset++;
+ proto_tree_add_bits_item(sub_tree, hf_diameter_3gpp_dsr_flags_bit8, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
+ bit_offset++;
+ proto_tree_add_bits_item(sub_tree, hf_diameter_3gpp_dsr_flags_bit7, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
+ bit_offset++;
+ proto_tree_add_bits_item(sub_tree, hf_diameter_3gpp_dsr_flags_bit6, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
+ bit_offset++;
+ proto_tree_add_bits_item(sub_tree, hf_diameter_3gpp_dsr_flags_bit5, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
+ bit_offset++;
+ proto_tree_add_bits_item(sub_tree, hf_diameter_3gpp_dsr_flags_bit4, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
+ bit_offset++;
+ proto_tree_add_bits_item(sub_tree, hf_diameter_3gpp_dsr_flags_bit3, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
+ bit_offset++;
+ proto_tree_add_bits_item(sub_tree, hf_diameter_3gpp_dsr_flags_bit2, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
+ bit_offset++;
+ proto_tree_add_bits_item(sub_tree, hf_diameter_3gpp_dsr_flags_bit1, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
+ bit_offset++;
+ proto_tree_add_bits_item(sub_tree, hf_diameter_3gpp_dsr_flags_bit0, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
+ bit_offset++;
+
+ offset = bit_offset>>3;
+ return offset;
}
@@ -502,21 +518,21 @@ dissect_diameter_3gpp_dsr_flags(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tre
static int
dissect_diameter_3gpp_dsa_flags(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree) {
- proto_item* item;
- proto_tree *sub_tree;
- int offset = 0;
- guint32 bit_offset;
+ proto_item* item;
+ proto_tree *sub_tree;
+ int offset = 0;
+ guint32 bit_offset;
- item = proto_tree_add_item(tree, hf_diameter_3gpp_dsa_flags, tvb, offset, 4, ENC_BIG_ENDIAN);
- sub_tree = proto_item_add_subtree(item, diameter_3gpp_dsa_flags_ett);
- bit_offset = 0;
- proto_tree_add_bits_item(sub_tree, hf_diameter_3gpp_spare_bits, tvb, bit_offset, 31, ENC_BIG_ENDIAN);
- bit_offset+=31;
- proto_tree_add_bits_item(sub_tree, hf_diameter_3gpp_dsa_flags_bit0, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
- bit_offset++;
+ item = proto_tree_add_item(tree, hf_diameter_3gpp_dsa_flags, tvb, offset, 4, ENC_BIG_ENDIAN);
+ sub_tree = proto_item_add_subtree(item, diameter_3gpp_dsa_flags_ett);
+ bit_offset = 0;
+ proto_tree_add_bits_item(sub_tree, hf_diameter_3gpp_spare_bits, tvb, bit_offset, 31, ENC_BIG_ENDIAN);
+ bit_offset+=31;
+ proto_tree_add_bits_item(sub_tree, hf_diameter_3gpp_dsa_flags_bit0, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
+ bit_offset++;
- offset = bit_offset>>3;
- return offset;
+ offset = bit_offset>>3;
+ return offset;
}
@@ -524,21 +540,21 @@ dissect_diameter_3gpp_dsa_flags(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tre
static int
dissect_diameter_3gpp_ida_flags(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree) {
- proto_item* item;
- proto_tree *sub_tree;
- int offset = 0;
- guint32 bit_offset;
+ proto_item* item;
+ proto_tree *sub_tree;
+ int offset = 0;
+ guint32 bit_offset;
- item = proto_tree_add_item(tree, hf_diameter_3gpp_ida_flags, tvb, offset, 4, ENC_BIG_ENDIAN);
- sub_tree = proto_item_add_subtree(item, diameter_3gpp_ida_flags_ett);
- bit_offset = 0;
- proto_tree_add_bits_item(sub_tree, hf_diameter_3gpp_spare_bits, tvb, bit_offset, 31, ENC_BIG_ENDIAN);
- bit_offset+=31;
- proto_tree_add_bits_item(sub_tree, hf_diameter_3gpp_ida_flags_bit0, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
- bit_offset++;
+ item = proto_tree_add_item(tree, hf_diameter_3gpp_ida_flags, tvb, offset, 4, ENC_BIG_ENDIAN);
+ sub_tree = proto_item_add_subtree(item, diameter_3gpp_ida_flags_ett);
+ bit_offset = 0;
+ proto_tree_add_bits_item(sub_tree, hf_diameter_3gpp_spare_bits, tvb, bit_offset, 31, ENC_BIG_ENDIAN);
+ bit_offset+=31;
+ proto_tree_add_bits_item(sub_tree, hf_diameter_3gpp_ida_flags_bit0, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
+ bit_offset++;
- offset = bit_offset>>3;
- return offset;
+ offset = bit_offset>>3;
+ return offset;
}
@@ -546,23 +562,23 @@ dissect_diameter_3gpp_ida_flags(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tre
static int
dissect_diameter_3gpp_pua_flags(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree) {
- proto_item* item;
- proto_tree *sub_tree;
- int offset = 0;
- guint32 bit_offset;
+ proto_item* item;
+ proto_tree *sub_tree;
+ int offset = 0;
+ guint32 bit_offset;
- item = proto_tree_add_item(tree, hf_diameter_3gpp_pua_flags, tvb, offset, 4, ENC_BIG_ENDIAN);
- sub_tree = proto_item_add_subtree(item, diameter_3gpp_pua_flags_ett);
- bit_offset = 0;
- proto_tree_add_bits_item(sub_tree, hf_diameter_3gpp_spare_bits, tvb, bit_offset, 30, ENC_BIG_ENDIAN);
- bit_offset+=30;
- proto_tree_add_bits_item(sub_tree, hf_diameter_3gpp_pua_flags_bit1, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
- bit_offset++;
- proto_tree_add_bits_item(sub_tree, hf_diameter_3gpp_pua_flags_bit0, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
- bit_offset++;
+ item = proto_tree_add_item(tree, hf_diameter_3gpp_pua_flags, tvb, offset, 4, ENC_BIG_ENDIAN);
+ sub_tree = proto_item_add_subtree(item, diameter_3gpp_pua_flags_ett);
+ bit_offset = 0;
+ proto_tree_add_bits_item(sub_tree, hf_diameter_3gpp_spare_bits, tvb, bit_offset, 30, ENC_BIG_ENDIAN);
+ bit_offset+=30;
+ proto_tree_add_bits_item(sub_tree, hf_diameter_3gpp_pua_flags_bit1, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
+ bit_offset++;
+ proto_tree_add_bits_item(sub_tree, hf_diameter_3gpp_pua_flags_bit0, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
+ bit_offset++;
- offset = bit_offset>>3;
- return offset;
+ offset = bit_offset>>3;
+ return offset;
}
@@ -571,29 +587,29 @@ dissect_diameter_3gpp_pua_flags(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tre
static int
dissect_diameter_3gpp_nor_flags(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree) {
- proto_item* item;
- proto_tree *sub_tree;
- int offset = 0;
- guint32 bit_offset;
-
- item = proto_tree_add_item(tree, hf_diameter_3gpp_nor_flags, tvb, offset, 4, ENC_BIG_ENDIAN);
- sub_tree = proto_item_add_subtree(item, diameter_3gpp_nor_flags_ett);
- bit_offset = 0;
- proto_tree_add_bits_item(sub_tree, hf_diameter_3gpp_spare_bits, tvb, bit_offset, 27, ENC_BIG_ENDIAN);
- bit_offset+=27;
- proto_tree_add_bits_item(sub_tree, hf_diameter_3gpp_nor_flags_bit4, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
- bit_offset++;
- proto_tree_add_bits_item(sub_tree, hf_diameter_3gpp_nor_flags_bit3, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
- bit_offset++;
- proto_tree_add_bits_item(sub_tree, hf_diameter_3gpp_nor_flags_bit2, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
- bit_offset++;
- proto_tree_add_bits_item(sub_tree, hf_diameter_3gpp_nor_flags_bit1, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
- bit_offset++;
- proto_tree_add_bits_item(sub_tree, hf_diameter_3gpp_nor_flags_bit0, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
- bit_offset++;
-
- offset = bit_offset>>3;
- return offset;
+ proto_item* item;
+ proto_tree *sub_tree;
+ int offset = 0;
+ guint32 bit_offset;
+
+ item = proto_tree_add_item(tree, hf_diameter_3gpp_nor_flags, tvb, offset, 4, ENC_BIG_ENDIAN);
+ sub_tree = proto_item_add_subtree(item, diameter_3gpp_nor_flags_ett);
+ bit_offset = 0;
+ proto_tree_add_bits_item(sub_tree, hf_diameter_3gpp_spare_bits, tvb, bit_offset, 27, ENC_BIG_ENDIAN);
+ bit_offset+=27;
+ proto_tree_add_bits_item(sub_tree, hf_diameter_3gpp_nor_flags_bit4, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
+ bit_offset++;
+ proto_tree_add_bits_item(sub_tree, hf_diameter_3gpp_nor_flags_bit3, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
+ bit_offset++;
+ proto_tree_add_bits_item(sub_tree, hf_diameter_3gpp_nor_flags_bit2, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
+ bit_offset++;
+ proto_tree_add_bits_item(sub_tree, hf_diameter_3gpp_nor_flags_bit1, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
+ bit_offset++;
+ proto_tree_add_bits_item(sub_tree, hf_diameter_3gpp_nor_flags_bit0, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
+ bit_offset++;
+
+ offset = bit_offset>>3;
+ return offset;
}
@@ -601,29 +617,29 @@ dissect_diameter_3gpp_nor_flags(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tre
static int
dissect_diameter_3gpp_idr_flags(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree) {
- proto_item* item;
- proto_tree *sub_tree;
- int offset = 0;
- guint32 bit_offset;
-
- item = proto_tree_add_item(tree, hf_diameter_3gpp_idr_flags, tvb, offset, 4, ENC_BIG_ENDIAN);
- sub_tree = proto_item_add_subtree(item, diameter_3gpp_idr_flags_ett);
- bit_offset = 0;
- proto_tree_add_bits_item(sub_tree, hf_diameter_3gpp_spare_bits, tvb, bit_offset, 27, ENC_BIG_ENDIAN);
- bit_offset+=27;
- proto_tree_add_bits_item(sub_tree, hf_diameter_3gpp_idr_flags_bit4, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
- bit_offset++;
- proto_tree_add_bits_item(sub_tree, hf_diameter_3gpp_idr_flags_bit3, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
- bit_offset++;
- proto_tree_add_bits_item(sub_tree, hf_diameter_3gpp_idr_flags_bit2, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
- bit_offset++;
- proto_tree_add_bits_item(sub_tree, hf_diameter_3gpp_idr_flags_bit1, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
- bit_offset++;
- proto_tree_add_bits_item(sub_tree, hf_diameter_3gpp_idr_flags_bit0, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
- bit_offset++;
-
- offset = bit_offset>>3;
- return offset;
+ proto_item* item;
+ proto_tree *sub_tree;
+ int offset = 0;
+ guint32 bit_offset;
+
+ item = proto_tree_add_item(tree, hf_diameter_3gpp_idr_flags, tvb, offset, 4, ENC_BIG_ENDIAN);
+ sub_tree = proto_item_add_subtree(item, diameter_3gpp_idr_flags_ett);
+ bit_offset = 0;
+ proto_tree_add_bits_item(sub_tree, hf_diameter_3gpp_spare_bits, tvb, bit_offset, 27, ENC_BIG_ENDIAN);
+ bit_offset+=27;
+ proto_tree_add_bits_item(sub_tree, hf_diameter_3gpp_idr_flags_bit4, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
+ bit_offset++;
+ proto_tree_add_bits_item(sub_tree, hf_diameter_3gpp_idr_flags_bit3, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
+ bit_offset++;
+ proto_tree_add_bits_item(sub_tree, hf_diameter_3gpp_idr_flags_bit2, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
+ bit_offset++;
+ proto_tree_add_bits_item(sub_tree, hf_diameter_3gpp_idr_flags_bit1, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
+ bit_offset++;
+ proto_tree_add_bits_item(sub_tree, hf_diameter_3gpp_idr_flags_bit0, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
+ bit_offset++;
+
+ offset = bit_offset>>3;
+ return offset;
}
@@ -631,86 +647,94 @@ void
proto_reg_handoff_diameter_3gpp(void)
{
- /* AVP Code: 5 3GPP-GPRS Negotiated QoS profile */
- /* Registered by packet-gtp.c */
+ /* AVP Code: 5 3GPP-GPRS Negotiated QoS profile */
+ /* Registered by packet-gtp.c */
+
+ /* AVP Code: 15 3GPP-SGSN-IPv6-Address */
+ dissector_add_uint("diameter.3gpp", 15, new_create_dissector_handle(dissect_diameter_3gpp_ipv6addr, proto_diameter_3gpp));
+
+ /* AVP Code: 22 3GPP-User-Location-Info
+ * Registered by packet-gtpv2.c
+ */
- /* AVP Code: 15 3GPP-SGSN-IPv6-Address */
- dissector_add_uint("diameter.3gpp", 15, new_create_dissector_handle(dissect_diameter_3gpp_sgsn_ipv6_addr, proto_diameter_3gpp));
+ /* AVP Code: 600 Visited-Network-Identifier */
+ dissector_add_uint("diameter.3gpp", 600, new_create_dissector_handle(dissect_diameter_3gpp_visited_nw_id, proto_diameter_3gpp));
- /* AVP Code: 22 3GPP-User-Location-Info
- * Registered by packet-gtpv2.c
- */
+ /* AVP Code: 606 User-Data */
+ dissector_add_uint("diameter.3gpp", 606, new_create_dissector_handle(dissect_diameter_3gpp_user_data, proto_diameter_3gpp));
- /* AVP Code: 600 Visited-Network-Identifier */
- dissector_add_uint("diameter.3gpp", 600, new_create_dissector_handle(dissect_diameter_3gpp_visited_nw_id, proto_diameter_3gpp));
+ /* AVP Code: 630 Feature-List */
+ dissector_add_uint("diameter.3gpp", 630, new_create_dissector_handle(dissect_diameter_3gpp_feature_list, proto_diameter_3gpp));
- /* AVP Code: 606 User-Data */
- dissector_add_uint("diameter.3gpp", 606, new_create_dissector_handle(dissect_diameter_3gpp_user_data, proto_diameter_3gpp));
+ /* AVP Code: 640 Path */
+ dissector_add_uint("diameter.3gpp", 640, new_create_dissector_handle(dissect_diameter_3gpp_path, proto_diameter_3gpp));
- /* AVP Code: 630 Feature-List */
- dissector_add_uint("diameter.3gpp", 630, new_create_dissector_handle(dissect_diameter_3gpp_feature_list, proto_diameter_3gpp));
+ /* AVP Code: 641 Contact */
+ dissector_add_uint("diameter.3gpp", 641, new_create_dissector_handle(dissect_diameter_3gpp_contact, proto_diameter_3gpp));
- /* AVP Code: 640 Path */
- dissector_add_uint("diameter.3gpp", 640, new_create_dissector_handle(dissect_diameter_3gpp_path, proto_diameter_3gpp));
+ /* AVP Code: 701 MSISDN */
+ dissector_add_uint("diameter.3gpp", 701, new_create_dissector_handle(dissect_diameter_3gpp_msisdn, proto_diameter_3gpp));
- /* AVP Code: 641 Contact */
- dissector_add_uint("diameter.3gpp", 641, new_create_dissector_handle(dissect_diameter_3gpp_contact, proto_diameter_3gpp));
+ /* AVP Code: 702 User-Data */
+ dissector_add_uint("diameter.3gpp", 702, new_create_dissector_handle(dissect_diameter_3gpp_user_data, proto_diameter_3gpp));
- /* AVP Code: 701 MSISDN */
- dissector_add_uint("diameter.3gpp", 701, new_create_dissector_handle(dissect_diameter_3gpp_msisdn, proto_diameter_3gpp));
+ /* AVP Code: 704 Service-Indication */
+ dissector_add_uint("diameter.3gpp", 704, new_create_dissector_handle(dissect_diameter_3gpp_service_ind, proto_diameter_3gpp));
- /* AVP Code: 702 User-Data */
- dissector_add_uint("diameter.3gpp", 702, new_create_dissector_handle(dissect_diameter_3gpp_user_data, proto_diameter_3gpp));
+ /* AVP Code: 900 TMGI */
+ dissector_add_uint("diameter.3gpp", 900, new_create_dissector_handle(dissect_diameter_3gpp_tmgi, proto_diameter_3gpp));
- /* AVP Code: 704 Service-Indication */
- dissector_add_uint("diameter.3gpp", 704, new_create_dissector_handle(dissect_diameter_3gpp_service_ind, proto_diameter_3gpp));
+ /* AVP Code: 904 MBMS-Session-Duration Registered by packet-gtp.c */
+ /* AVP Code: 903 MBMS-Service-Area Registered by packet-gtp.c */
- /* AVP Code: 900 TMGI */
- dissector_add_uint("diameter.3gpp", 900, new_create_dissector_handle(dissect_diameter_3gpp_tmgi, proto_diameter_3gpp));
+ /* AVP Code: 911 MBMS-Time-To-Data-Transfer Registered by packet-gtp.c */
+ /* Registered by packet-gtp.c */
- /* AVP Code: 904 MBMS-Session-Duration Registered by packet-gtp.c */
- /* AVP Code: 903 MBMS-Service-Area Registered by packet-gtp.c */
+ /* AVP Code: 913 MBMS-Required-QoS */
+ dissector_add_uint("diameter.3gpp", 913, new_create_dissector_handle(dissect_diameter_3gpp_mbms_required_qos, proto_diameter_3gpp));
- /* AVP Code: 911 MBMS-Time-To-Data-Transfer Registered by packet-gtp.c */
- /* Registered by packet-gtp.c */
+ /* AVP Code: 917 MBMS-GGSN-IPv6-Address */
+ dissector_add_uint("diameter.3gpp", 917, new_create_dissector_handle(dissect_diameter_3gpp_ipv6addr, proto_diameter_3gpp));
- /* AVP Code: 913 MBMS-Required-QoS */
- dissector_add_uint("diameter.3gpp", 913, new_create_dissector_handle(dissect_diameter_3gpp_mbms_required_qos, proto_diameter_3gpp));
+ /* AVP Code: 918 MBMS-BMSC-SSM-IP-Address */
+ dissector_add_uint("diameter.3gpp", 918, new_create_dissector_handle(dissect_diameter_3gpp_ipaddr, proto_diameter_3gpp));
- /* AVP Code: 918 MBMS-BMSC-SSM-IP-Address */
- dissector_add_uint("diameter.3gpp", 918, new_create_dissector_handle(dissect_diameter_3gpp_ipaddr, proto_diameter_3gpp));
+ /* AVP Code: 926 MBMS-BMSC-SSM-UDP-Port */
+ /* AVP Code: 927 MBMS-GW-UDP-Port */
+ dissector_add_uint("diameter.3gpp", 926, new_create_dissector_handle(dissect_diameter_3gpp_udp_port, proto_diameter_3gpp));
+ dissector_add_uint("diameter.3gpp", 927, new_create_dissector_handle(dissect_diameter_3gpp_udp_port, proto_diameter_3gpp));
- /* AVP Code: 929 MBMS-Data-Transfer-Start */
- dissector_add_uint("diameter.3gpp", 929, new_create_dissector_handle(dissect_diameter_3gpp_mbms_abs_time_ofmbms_data_tfer, proto_diameter_3gpp));
+ /* AVP Code: 929 MBMS-Data-Transfer-Start */
+ dissector_add_uint("diameter.3gpp", 929, new_create_dissector_handle(dissect_diameter_3gpp_mbms_abs_time_ofmbms_data_tfer, proto_diameter_3gpp));
- /* AVP Code: 930 MBMS-Data-Transfer-Stop */
- dissector_add_uint("diameter.3gpp", 930, new_create_dissector_handle(dissect_diameter_3gpp_mbms_abs_time_ofmbms_data_tfer, proto_diameter_3gpp));
+ /* AVP Code: 930 MBMS-Data-Transfer-Stop */
+ dissector_add_uint("diameter.3gpp", 930, new_create_dissector_handle(dissect_diameter_3gpp_mbms_abs_time_ofmbms_data_tfer, proto_diameter_3gpp));
- /* AVP Code: 1405 ULR-Flags */
- dissector_add_uint("diameter.3gpp", 1405, new_create_dissector_handle(dissect_diameter_3gpp_ulr_flags, proto_diameter_3gpp));
+ /* AVP Code: 1405 ULR-Flags */
+ dissector_add_uint("diameter.3gpp", 1405, new_create_dissector_handle(dissect_diameter_3gpp_ulr_flags, proto_diameter_3gpp));
- /* AVP Code: 1406 ULA-Flags */
- dissector_add_uint("diameter.3gpp", 1406, new_create_dissector_handle(dissect_diameter_3gpp_ula_flags, proto_diameter_3gpp));
+ /* AVP Code: 1406 ULA-Flags */
+ dissector_add_uint("diameter.3gpp", 1406, new_create_dissector_handle(dissect_diameter_3gpp_ula_flags, proto_diameter_3gpp));
- /* AVP Code: 1421 DSR-Flags */
- dissector_add_uint("diameter.3gpp", 1421, new_create_dissector_handle(dissect_diameter_3gpp_dsr_flags, proto_diameter_3gpp));
+ /* AVP Code: 1421 DSR-Flags */
+ dissector_add_uint("diameter.3gpp", 1421, new_create_dissector_handle(dissect_diameter_3gpp_dsr_flags, proto_diameter_3gpp));
- /* AVP Code: 1422 DSA-Flags */
- dissector_add_uint("diameter.3gpp", 1422, new_create_dissector_handle(dissect_diameter_3gpp_dsa_flags, proto_diameter_3gpp));
+ /* AVP Code: 1422 DSA-Flags */
+ dissector_add_uint("diameter.3gpp", 1422, new_create_dissector_handle(dissect_diameter_3gpp_dsa_flags, proto_diameter_3gpp));
- /* AVP Code: 1441 IDA-Flags */
- dissector_add_uint("diameter.3gpp", 1441, new_create_dissector_handle(dissect_diameter_3gpp_ida_flags, proto_diameter_3gpp));
+ /* AVP Code: 1441 IDA-Flags */
+ dissector_add_uint("diameter.3gpp", 1441, new_create_dissector_handle(dissect_diameter_3gpp_ida_flags, proto_diameter_3gpp));
- /* AVP Code: 1442 PUA-Flags */
- dissector_add_uint("diameter.3gpp", 1442, new_create_dissector_handle(dissect_diameter_3gpp_pua_flags, proto_diameter_3gpp));
+ /* AVP Code: 1442 PUA-Flags */
+ dissector_add_uint("diameter.3gpp", 1442, new_create_dissector_handle(dissect_diameter_3gpp_pua_flags, proto_diameter_3gpp));
- /* AVP Code: 1443 NOR-Flags */
- dissector_add_uint("diameter.3gpp", 1443, new_create_dissector_handle(dissect_diameter_3gpp_nor_flags, proto_diameter_3gpp));
+ /* AVP Code: 1443 NOR-Flags */
+ dissector_add_uint("diameter.3gpp", 1443, new_create_dissector_handle(dissect_diameter_3gpp_nor_flags, proto_diameter_3gpp));
- /* AVP Code: 1490 IDR-Flags */
- dissector_add_uint("diameter.3gpp", 1490, new_create_dissector_handle(dissect_diameter_3gpp_idr_flags, proto_diameter_3gpp));
+ /* AVP Code: 1490 IDR-Flags */
+ dissector_add_uint("diameter.3gpp", 1490, new_create_dissector_handle(dissect_diameter_3gpp_idr_flags, proto_diameter_3gpp));
- xml_handle = find_dissector("xml");
+ xml_handle = find_dissector("xml");
}
void
@@ -718,337 +742,342 @@ proto_register_diameter_3gpp(void)
{
/* Setup list of header fields See Section 1.6.1 for details*/
- static hf_register_info hf[] = {
- { &hf_diameter_3gpp_path,
- { "Path", "diameter.3gpp.path",
- FT_STRING, BASE_NONE, NULL, 0x0,
- NULL, HFILL }
- },
- { &hf_diameter_3gpp_contact,
- { "Contact", "diameter.3gpp.contact",
- FT_STRING, BASE_NONE, NULL, 0x0,
- NULL, HFILL }
- },
- { &hf_diameter_3gpp_visited_nw_id,
- { "Visited-Network-Identifier", "diameter.3gpp.visited_nw_id",
- FT_STRING, BASE_NONE, NULL, 0x0,
- NULL, HFILL }
- },
- { &hf_diameter_3gpp_msisdn,
- { "MSISDN", "diameter.3gpp.msisdn",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- NULL, HFILL }
- },
- { &hf_diameter_3gpp_user_data,
- { "User data", "diameter.3gpp.user_data",
- FT_STRING, BASE_NONE, NULL, 0x0,
- NULL, HFILL }
- },
- { &hf_diameter_3gpp_ipaddr,
- { "IPv4 Address", "diameter.3gpp.ipaddr",
- FT_IPv4, BASE_NONE, NULL, 0x0,
- NULL, HFILL }
- },
- { &hf_diameter_3gpp_mbms_required_qos_prio,
- { "Allocation/Retention Priority", "diameter.3gpp.mbms_required_qos_prio",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- NULL, HFILL }
- },
- { &hf_diameter_3gpp_tmgi,
- { "TMGI", "diameter.3gpp.tmgi",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- NULL, HFILL }
- },
- { &hf_diameter_3gpp_service_ind,
- { "Service-Indication", "diameter.3gpp.service_ind",
- FT_STRING, BASE_NONE, NULL, 0x0,
- NULL, HFILL }
- },
- { &hf_diameter_mbms_service_id,
- { "MBMS Service ID", "diameter.3gpp.mbms_service_id",
- FT_UINT24, BASE_HEX, NULL, 0x0,
- NULL, HFILL }
- },
- { &hf_diameter_address_digits,
- { "Address digits", "diameter.3gpp.address_digits",
- FT_STRING, BASE_NONE, NULL, 0x0,
- NULL, HFILL }
- },
- { &hf_diameter_3gpp_spare_bits,
- { "Spare bit(s)", "diameter.3gpp.spare_bits",
- FT_UINT32, BASE_HEX, NULL, 0x0,
- NULL, HFILL }
- },
- { &hf_diameter_3gpp_feature_list_flags,
- { "Feature-List Flags", "diameter.3gpp.feature_list_flags",
- FT_UINT32, BASE_HEX, NULL, 0x0,
- NULL, HFILL }
- },
- { &hf_diameter_3gpp_feature_list_flags_bit0,
- { "Shared IFC Sets", "diameter.3gpp.feature_list_flags_bit0",
- FT_BOOLEAN, BASE_NONE, TFS(&tfs_supported_not_supported), 0x0,
- NULL, HFILL }
- },
- { &hf_diameter_3gpp_feature_list_flags_bit1,
- { "Alias Indication", "diameter.3gpp.feature_list_flags_bit1",
- FT_BOOLEAN, BASE_NONE, TFS(&tfs_supported_not_supported), 0x0,
- NULL, HFILL }
- },
- { &hf_diameter_3gpp_feature_list_flags_bit2,
- { "IMS Restoration Indication", "diameter.3gpp.feature_list_flags_bit2",
- FT_BOOLEAN, BASE_NONE, TFS(&tfs_supported_not_supported), 0x0,
- NULL, HFILL }
- },
- { &hf_diameter_3gpp_ulr_flags,
- { "ULR Flags", "diameter.3gpp.ulr_flags",
- FT_UINT32, BASE_HEX, NULL, 0x0,
- NULL, HFILL }
- },
- { &hf_diameter_3gpp_ulr_flags_bit0,
- { "Single-Registration-Indication", "diameter.3gpp.ulr_flags_bit0",
- FT_BOOLEAN, BASE_NONE, TFS(&tfs_set_notset), 0x0,
- NULL, HFILL }
- },
- { &hf_diameter_3gpp_ulr_flags_bit1,
- { "S6a/S6d-Indicator", "diameter.3gpp.ulr_flags_bit1",
- FT_BOOLEAN, BASE_NONE, TFS(&tfs_set_notset), 0x0,
- NULL, HFILL }
- },
- { &hf_diameter_3gpp_ulr_flags_bit2,
- { "Skip-Subscriber-Data", "diameter.3gpp.ulr_flags_bit2",
- FT_BOOLEAN, BASE_NONE, TFS(&tfs_set_notset), 0x0,
- NULL, HFILL }
- },
- { &hf_diameter_3gpp_ulr_flags_bit3,
- { "GPRS-Subscription-Data-Indicator", "diameter.3gpp.ulr_flags_bit3",
- FT_BOOLEAN, BASE_NONE, TFS(&tfs_set_notset), 0x0,
- NULL, HFILL }
- },
- { &hf_diameter_3gpp_ulr_flags_bit4,
- { "Node-Type-Indicator", "diameter.3gpp.ulr_flags_bit4",
- FT_BOOLEAN, BASE_NONE, TFS(&tfs_set_notset), 0x0,
- NULL, HFILL }
- },
- { &hf_diameter_3gpp_ulr_flags_bit5,
- { "Initial-Attach-Indicator", "diameter.3gpp.ulr_flags_bit5",
- FT_BOOLEAN, BASE_NONE, TFS(&tfs_set_notset), 0x0,
- NULL, HFILL }
- },
- { &hf_diameter_3gpp_ulr_flags_bit6,
- { "PS-LCS-Not-Supported-By-UE", "diameter.3gpp.ulr_flags_bit6",
- FT_BOOLEAN, BASE_NONE, TFS(&tfs_set_notset), 0x0,
- NULL, HFILL }
- },
- { &hf_diameter_3gpp_ula_flags,
- { "ULA Flags", "diameter.3gpp.ula_flags",
- FT_UINT32, BASE_HEX, NULL, 0x0,
- NULL, HFILL }
- },
- { &hf_diameter_3gpp_ula_flags_bit0,
- { "Separation Indication", "diameter.3gpp.ula_flags_bit0",
- FT_BOOLEAN, BASE_NONE, TFS(&tfs_set_notset), 0x0,
- NULL, HFILL }
- },
- { &hf_diameter_3gpp_dsr_flags,
- { "DSR Flags", "diameter.3gpp.dsr_flags",
- FT_UINT32, BASE_HEX, NULL, 0x0,
- NULL, HFILL }
- },
- { &hf_diameter_3gpp_dsr_flags_bit0,
- { "Regional Subscription Withdrawal", "diameter.3gpp.dsr_flags_bit0",
- FT_BOOLEAN, BASE_NONE, TFS(&tfs_set_notset), 0x0,
- NULL, HFILL }
- },
- { &hf_diameter_3gpp_dsr_flags_bit1,
- { "Complete APN Configuration Profile Withdrawal", "diameter.3gpp.dsr_flags_bit1",
- FT_BOOLEAN, BASE_NONE, TFS(&tfs_set_notset), 0x0,
- NULL, HFILL }
- },
- { &hf_diameter_3gpp_dsr_flags_bit2,
- { "Subscribed Charging Characteristics Withdrawal", "diameter.3gpp.dsr_flags_bit2",
- FT_BOOLEAN, BASE_NONE, TFS(&tfs_set_notset), 0x0,
- NULL, HFILL }
- },
- { &hf_diameter_3gpp_dsr_flags_bit3,
- { "PDN subscription contexts Withdrawal", "diameter.3gpp.dsr_flags_bit3",
- FT_BOOLEAN, BASE_NONE, TFS(&tfs_set_notset), 0x0,
- NULL, HFILL }
- },
- { &hf_diameter_3gpp_dsr_flags_bit4,
- { "STN-SR", "diameter.3gpp.dsr_flags_bit4",
- FT_BOOLEAN, BASE_NONE, TFS(&tfs_set_notset), 0x0,
- NULL, HFILL }
- },
- { &hf_diameter_3gpp_dsr_flags_bit5,
- { "Complete PDP context list Withdrawal", "diameter.3gpp.dsr_flags_bit5",
- FT_BOOLEAN, BASE_NONE, TFS(&tfs_set_notset), 0x0,
- NULL, HFILL }
- },
- { &hf_diameter_3gpp_dsr_flags_bit6,
- { "PDP contexts Withdrawal", "diameter.3gpp.dsr_flags_bit6",
- FT_BOOLEAN, BASE_NONE, TFS(&tfs_set_notset), 0x0,
- NULL, HFILL }
- },
- { &hf_diameter_3gpp_dsr_flags_bit7,
- { "Roaming Restricted due to unsupported feature", "diameter.3gpp.dsr_flags_bit7",
- FT_BOOLEAN, BASE_NONE, TFS(&tfs_set_notset), 0x0,
- NULL, HFILL }
- },
- { &hf_diameter_3gpp_dsr_flags_bit8,
- { "Trace Data Withdrawal", "diameter.3gpp.dsr_flags_bit8",
- FT_BOOLEAN, BASE_NONE, TFS(&tfs_set_notset), 0x0,
- NULL, HFILL }
- },
- { &hf_diameter_3gpp_dsr_flags_bit9,
- { "CSG Deleted", "diameter.3gpp.dsr_flags_bit9",
- FT_BOOLEAN, BASE_NONE, TFS(&tfs_set_notset), 0x0,
- NULL, HFILL }
- },
- { &hf_diameter_3gpp_dsr_flags_bit10,
- { "APN-OI-Replacement", "diameter.3gpp.dsr_flags_bit10",
- FT_BOOLEAN, BASE_NONE, TFS(&tfs_set_notset), 0x0,
- NULL, HFILL }
- },
- { &hf_diameter_3gpp_dsr_flags_bit11,
- { "GMLC List Withdrawal", "diameter.3gpp.dsr_flags_bit11",
- FT_BOOLEAN, BASE_NONE, TFS(&tfs_set_notset), 0x0,
- NULL, HFILL }
- },
- { &hf_diameter_3gpp_dsr_flags_bit12,
- { "LCS Withdrawal", "diameter.3gpp.dsr_flags_bit12",
- FT_BOOLEAN, BASE_NONE, TFS(&tfs_set_notset), 0x0,
- NULL, HFILL }
- },
- { &hf_diameter_3gpp_dsr_flags_bit13,
- { "SMS Withdrawal", "diameter.3gpp.dsr_flags_bit13",
- FT_BOOLEAN, BASE_NONE, TFS(&tfs_set_notset), 0x0,
- NULL, HFILL }
- },
- { &hf_diameter_3gpp_dsa_flags,
- { "DSA Flags", "diameter.3gpp.dsa_flags",
- FT_UINT32, BASE_HEX, NULL, 0x0,
- NULL, HFILL }
- },
- { &hf_diameter_3gpp_dsa_flags_bit0,
- { "Network Node area restricted", "diameter.3gpp.dsa_flags_bit0",
- FT_BOOLEAN, BASE_NONE, TFS(&tfs_set_notset), 0x0,
- NULL, HFILL }
- },
- { &hf_diameter_3gpp_ida_flags,
- { "IDA Flags", "diameter.3gpp.ida_flags",
- FT_UINT32, BASE_HEX, NULL, 0x0,
- NULL, HFILL }
- },
- { &hf_diameter_3gpp_ida_flags_bit0,
- { "Network Node area restricted", "diameter.3gpp.ida_flags_bit0",
- FT_BOOLEAN, BASE_NONE, TFS(&tfs_set_notset), 0x0,
- NULL, HFILL }
- },
- { &hf_diameter_3gpp_pua_flags,
- { "PUA Flags", "diameter.3gpp.pua_flags",
- FT_UINT32, BASE_HEX, NULL, 0x0,
- NULL, HFILL }
- },
- { &hf_diameter_3gpp_pua_flags_bit0,
- { "Freeze M-TMSI", "diameter.3gpp.pua_flags_bit0",
- FT_BOOLEAN, BASE_NONE, TFS(&tfs_set_notset), 0x0,
- NULL, HFILL }
- },
- { &hf_diameter_3gpp_pua_flags_bit1,
- { "Freeze P-TMSI", "diameter.3gpp.pua_flags_bit1",
- FT_BOOLEAN, BASE_NONE, TFS(&tfs_set_notset), 0x0,
- NULL, HFILL }
- },
- { &hf_diameter_3gpp_nor_flags,
- { "NOR Flags", "diameter.3gpp.nor_flags",
- FT_UINT32, BASE_HEX, NULL, 0x0,
- NULL, HFILL }
- },
- { &hf_diameter_3gpp_nor_flags_bit0,
- { "Single-Registration-Indication", "diameter.3gpp.nor_flags_bit0",
- FT_BOOLEAN, BASE_NONE, TFS(&tfs_set_notset), 0x0,
- NULL, HFILL }
- },
- { &hf_diameter_3gpp_nor_flags_bit1,
- { "SGSN area restricted", "diameter.3gpp.nor_flags_bit1",
- FT_BOOLEAN, BASE_NONE, TFS(&tfs_set_notset), 0x0,
- NULL, HFILL }
- },
- { &hf_diameter_3gpp_nor_flags_bit2,
- { "Ready for SM", "diameter.3gpp.nor_flags_bit2",
- FT_BOOLEAN, BASE_NONE, TFS(&tfs_set_notset), 0x0,
- NULL, HFILL }
- },
- { &hf_diameter_3gpp_nor_flags_bit3,
- { "UE Reachable", "diameter.3gpp.nor_flags_bit3",
- FT_BOOLEAN, BASE_NONE, TFS(&tfs_set_notset), 0x0,
- NULL, HFILL }
- },
- { &hf_diameter_3gpp_nor_flags_bit4,
- { "Delete all APN and PDN GW identity pairs", "diameter.3gpp.nor_flags_bit4",
- FT_BOOLEAN, BASE_NONE, TFS(&tfs_set_notset), 0x0,
- NULL, HFILL }
- },
- { &hf_diameter_3gpp_idr_flags,
- { "IDR Flags", "diameter.3gpp.idr_flags",
- FT_UINT32, BASE_HEX, NULL, 0x0,
- NULL, HFILL }
- },
- { &hf_diameter_3gpp_idr_flags_bit0,
- { "UE Reachability Request", "diameter.3gpp.idr_flags_bit0",
- FT_BOOLEAN, BASE_NONE, TFS(&tfs_set_notset), 0x0,
- NULL, HFILL }
- },
- { &hf_diameter_3gpp_idr_flags_bit1,
- { "T-ADS Data Request", "diameter.3gpp.idr_flags_bit1",
- FT_BOOLEAN, BASE_NONE, TFS(&tfs_set_notset), 0x0,
- NULL, HFILL }
- },
- { &hf_diameter_3gpp_idr_flags_bit2,
- { "EPS User State Request", "diameter.3gpp.idr_flags_bit2",
- FT_BOOLEAN, BASE_NONE, TFS(&tfs_set_notset), 0x0,
- NULL, HFILL }
- },
- { &hf_diameter_3gpp_idr_flags_bit3,
- { "EPS Location Information Request", "diameter.3gpp.idr_flags_bit3",
- FT_BOOLEAN, BASE_NONE, TFS(&tfs_set_notset), 0x0,
- NULL, HFILL }
- },
- { &hf_diameter_3gpp_idr_flags_bit4,
- { "Current Location Request", "diameter.3gpp.idr_flags_bit4",
- FT_BOOLEAN, BASE_NONE, TFS(&tfs_set_notset), 0x0,
- NULL, HFILL }
- },
- { &hf_diameter_3gpp_sgsn_ipv6_addr,
- { "SGSN IPv6 Address", "diameter.3gpp.sgsn_ipv6_addr",
- FT_IPv6, BASE_NONE, NULL, 0x0,
- NULL, HFILL }
- },
- { &hf_diameter_3gpp_mbms_abs_time_ofmbms_data_tfer,
- { "Absolute Time of MBMS Data Transfer", "diameter.3gpp.mbms_abs_time_ofmbms_data_tfer",
- FT_STRING, BASE_NONE, NULL, 0x0,
- NULL, HFILL }
- },
- };
-
- /* Setup protocol subtree array */
- static gint *ett[] = {
- &diameter_3gpp_path_ett,
- &diameter_3gpp_msisdn_ett,
- &diameter_3gpp_feature_list_ett,
- &diameter_3gpp_tmgi_ett,
- &diameter_3gpp_ulr_flags_ett,
- &diameter_3gpp_ula_flags_ett,
- &diameter_3gpp_dsr_flags_ett,
- &diameter_3gpp_dsa_flags_ett,
- &diameter_3gpp_ida_flags_ett,
- &diameter_3gpp_pua_flags_ett,
- &diameter_3gpp_nor_flags_ett,
- &diameter_3gpp_idr_flags_ett,
- };
-
- /* Required function calls to register the header fields and subtrees used */
- proto_diameter_3gpp = proto_register_protocol("Diameter 3GPP","Diameter3GPP", "diameter3gpp");
- proto_register_field_array(proto_diameter_3gpp, hf, array_length(hf));
- proto_register_subtree_array(ett, array_length(ett));
+ static hf_register_info hf[] = {
+ { &hf_diameter_3gpp_path,
+ { "Path", "diameter.3gpp.path",
+ FT_STRING, BASE_NONE, NULL, 0x0,
+ NULL, HFILL }
+ },
+ { &hf_diameter_3gpp_contact,
+ { "Contact", "diameter.3gpp.contact",
+ FT_STRING, BASE_NONE, NULL, 0x0,
+ NULL, HFILL }
+ },
+ { &hf_diameter_3gpp_visited_nw_id,
+ { "Visited-Network-Identifier", "diameter.3gpp.visited_nw_id",
+ FT_STRING, BASE_NONE, NULL, 0x0,
+ NULL, HFILL }
+ },
+ { &hf_diameter_3gpp_msisdn,
+ { "MSISDN", "diameter.3gpp.msisdn",
+ FT_BYTES, BASE_NONE, NULL, 0x0,
+ NULL, HFILL }
+ },
+ { &hf_diameter_3gpp_user_data,
+ { "User data", "diameter.3gpp.user_data",
+ FT_STRING, BASE_NONE, NULL, 0x0,
+ NULL, HFILL }
+ },
+ { &hf_diameter_3gpp_ipaddr,
+ { "IPv4 Address", "diameter.3gpp.ipaddr",
+ FT_IPv4, BASE_NONE, NULL, 0x0,
+ NULL, HFILL }
+ },
+ { &hf_diameter_3gpp_mbms_required_qos_prio,
+ { "Allocation/Retention Priority", "diameter.3gpp.mbms_required_qos_prio",
+ FT_UINT8, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }
+ },
+ { &hf_diameter_3gpp_tmgi,
+ { "TMGI", "diameter.3gpp.tmgi",
+ FT_BYTES, BASE_NONE, NULL, 0x0,
+ NULL, HFILL }
+ },
+ { &hf_diameter_3gpp_service_ind,
+ { "Service-Indication", "diameter.3gpp.service_ind",
+ FT_STRING, BASE_NONE, NULL, 0x0,
+ NULL, HFILL }
+ },
+ { &hf_diameter_mbms_service_id,
+ { "MBMS Service ID", "diameter.3gpp.mbms_service_id",
+ FT_UINT24, BASE_HEX, NULL, 0x0,
+ NULL, HFILL }
+ },
+ { &hf_diameter_address_digits,
+ { "Address digits", "diameter.3gpp.address_digits",
+ FT_STRING, BASE_NONE, NULL, 0x0,
+ NULL, HFILL }
+ },
+ { &hf_diameter_3gpp_spare_bits,
+ { "Spare bit(s)", "diameter.3gpp.spare_bits",
+ FT_UINT32, BASE_HEX, NULL, 0x0,
+ NULL, HFILL }
+ },
+ { &hf_diameter_3gpp_feature_list_flags,
+ { "Feature-List Flags", "diameter.3gpp.feature_list_flags",
+ FT_UINT32, BASE_HEX, NULL, 0x0,
+ NULL, HFILL }
+ },
+ { &hf_diameter_3gpp_feature_list_flags_bit0,
+ { "Shared IFC Sets", "diameter.3gpp.feature_list_flags_bit0",
+ FT_BOOLEAN, BASE_NONE, TFS(&tfs_supported_not_supported), 0x0,
+ NULL, HFILL }
+ },
+ { &hf_diameter_3gpp_feature_list_flags_bit1,
+ { "Alias Indication", "diameter.3gpp.feature_list_flags_bit1",
+ FT_BOOLEAN, BASE_NONE, TFS(&tfs_supported_not_supported), 0x0,
+ NULL, HFILL }
+ },
+ { &hf_diameter_3gpp_feature_list_flags_bit2,
+ { "IMS Restoration Indication", "diameter.3gpp.feature_list_flags_bit2",
+ FT_BOOLEAN, BASE_NONE, TFS(&tfs_supported_not_supported), 0x0,
+ NULL, HFILL }
+ },
+ { &hf_diameter_3gpp_ulr_flags,
+ { "ULR Flags", "diameter.3gpp.ulr_flags",
+ FT_UINT32, BASE_HEX, NULL, 0x0,
+ NULL, HFILL }
+ },
+ { &hf_diameter_3gpp_ulr_flags_bit0,
+ { "Single-Registration-Indication", "diameter.3gpp.ulr_flags_bit0",
+ FT_BOOLEAN, BASE_NONE, TFS(&tfs_set_notset), 0x0,
+ NULL, HFILL }
+ },
+ { &hf_diameter_3gpp_ulr_flags_bit1,
+ { "S6a/S6d-Indicator", "diameter.3gpp.ulr_flags_bit1",
+ FT_BOOLEAN, BASE_NONE, TFS(&tfs_set_notset), 0x0,
+ NULL, HFILL }
+ },
+ { &hf_diameter_3gpp_ulr_flags_bit2,
+ { "Skip-Subscriber-Data", "diameter.3gpp.ulr_flags_bit2",
+ FT_BOOLEAN, BASE_NONE, TFS(&tfs_set_notset), 0x0,
+ NULL, HFILL }
+ },
+ { &hf_diameter_3gpp_ulr_flags_bit3,
+ { "GPRS-Subscription-Data-Indicator", "diameter.3gpp.ulr_flags_bit3",
+ FT_BOOLEAN, BASE_NONE, TFS(&tfs_set_notset), 0x0,
+ NULL, HFILL }
+ },
+ { &hf_diameter_3gpp_ulr_flags_bit4,
+ { "Node-Type-Indicator", "diameter.3gpp.ulr_flags_bit4",
+ FT_BOOLEAN, BASE_NONE, TFS(&tfs_set_notset), 0x0,
+ NULL, HFILL }
+ },
+ { &hf_diameter_3gpp_ulr_flags_bit5,
+ { "Initial-Attach-Indicator", "diameter.3gpp.ulr_flags_bit5",
+ FT_BOOLEAN, BASE_NONE, TFS(&tfs_set_notset), 0x0,
+ NULL, HFILL }
+ },
+ { &hf_diameter_3gpp_ulr_flags_bit6,
+ { "PS-LCS-Not-Supported-By-UE", "diameter.3gpp.ulr_flags_bit6",
+ FT_BOOLEAN, BASE_NONE, TFS(&tfs_set_notset), 0x0,
+ NULL, HFILL }
+ },
+ { &hf_diameter_3gpp_ula_flags,
+ { "ULA Flags", "diameter.3gpp.ula_flags",
+ FT_UINT32, BASE_HEX, NULL, 0x0,
+ NULL, HFILL }
+ },
+ { &hf_diameter_3gpp_ula_flags_bit0,
+ { "Separation Indication", "diameter.3gpp.ula_flags_bit0",
+ FT_BOOLEAN, BASE_NONE, TFS(&tfs_set_notset), 0x0,
+ NULL, HFILL }
+ },
+ { &hf_diameter_3gpp_dsr_flags,
+ { "DSR Flags", "diameter.3gpp.dsr_flags",
+ FT_UINT32, BASE_HEX, NULL, 0x0,
+ NULL, HFILL }
+ },
+ { &hf_diameter_3gpp_dsr_flags_bit0,
+ { "Regional Subscription Withdrawal", "diameter.3gpp.dsr_flags_bit0",
+ FT_BOOLEAN, BASE_NONE, TFS(&tfs_set_notset), 0x0,
+ NULL, HFILL }
+ },
+ { &hf_diameter_3gpp_dsr_flags_bit1,
+ { "Complete APN Configuration Profile Withdrawal", "diameter.3gpp.dsr_flags_bit1",
+ FT_BOOLEAN, BASE_NONE, TFS(&tfs_set_notset), 0x0,
+ NULL, HFILL }
+ },
+ { &hf_diameter_3gpp_dsr_flags_bit2,
+ { "Subscribed Charging Characteristics Withdrawal", "diameter.3gpp.dsr_flags_bit2",
+ FT_BOOLEAN, BASE_NONE, TFS(&tfs_set_notset), 0x0,
+ NULL, HFILL }
+ },
+ { &hf_diameter_3gpp_dsr_flags_bit3,
+ { "PDN subscription contexts Withdrawal", "diameter.3gpp.dsr_flags_bit3",
+ FT_BOOLEAN, BASE_NONE, TFS(&tfs_set_notset), 0x0,
+ NULL, HFILL }
+ },
+ { &hf_diameter_3gpp_dsr_flags_bit4,
+ { "STN-SR", "diameter.3gpp.dsr_flags_bit4",
+ FT_BOOLEAN, BASE_NONE, TFS(&tfs_set_notset), 0x0,
+ NULL, HFILL }
+ },
+ { &hf_diameter_3gpp_dsr_flags_bit5,
+ { "Complete PDP context list Withdrawal", "diameter.3gpp.dsr_flags_bit5",
+ FT_BOOLEAN, BASE_NONE, TFS(&tfs_set_notset), 0x0,
+ NULL, HFILL }
+ },
+ { &hf_diameter_3gpp_dsr_flags_bit6,
+ { "PDP contexts Withdrawal", "diameter.3gpp.dsr_flags_bit6",
+ FT_BOOLEAN, BASE_NONE, TFS(&tfs_set_notset), 0x0,
+ NULL, HFILL }
+ },
+ { &hf_diameter_3gpp_dsr_flags_bit7,
+ { "Roaming Restricted due to unsupported feature", "diameter.3gpp.dsr_flags_bit7",
+ FT_BOOLEAN, BASE_NONE, TFS(&tfs_set_notset), 0x0,
+ NULL, HFILL }
+ },
+ { &hf_diameter_3gpp_dsr_flags_bit8,
+ { "Trace Data Withdrawal", "diameter.3gpp.dsr_flags_bit8",
+ FT_BOOLEAN, BASE_NONE, TFS(&tfs_set_notset), 0x0,
+ NULL, HFILL }
+ },
+ { &hf_diameter_3gpp_dsr_flags_bit9,
+ { "CSG Deleted", "diameter.3gpp.dsr_flags_bit9",
+ FT_BOOLEAN, BASE_NONE, TFS(&tfs_set_notset), 0x0,
+ NULL, HFILL }
+ },
+ { &hf_diameter_3gpp_dsr_flags_bit10,
+ { "APN-OI-Replacement", "diameter.3gpp.dsr_flags_bit10",
+ FT_BOOLEAN, BASE_NONE, TFS(&tfs_set_notset), 0x0,
+ NULL, HFILL }
+ },
+ { &hf_diameter_3gpp_dsr_flags_bit11,
+ { "GMLC List Withdrawal", "diameter.3gpp.dsr_flags_bit11",
+ FT_BOOLEAN, BASE_NONE, TFS(&tfs_set_notset), 0x0,
+ NULL, HFILL }
+ },
+ { &hf_diameter_3gpp_dsr_flags_bit12,
+ { "LCS Withdrawal", "diameter.3gpp.dsr_flags_bit12",
+ FT_BOOLEAN, BASE_NONE, TFS(&tfs_set_notset), 0x0,
+ NULL, HFILL }
+ },
+ { &hf_diameter_3gpp_dsr_flags_bit13,
+ { "SMS Withdrawal", "diameter.3gpp.dsr_flags_bit13",
+ FT_BOOLEAN, BASE_NONE, TFS(&tfs_set_notset), 0x0,
+ NULL, HFILL }
+ },
+ { &hf_diameter_3gpp_dsa_flags,
+ { "DSA Flags", "diameter.3gpp.dsa_flags",
+ FT_UINT32, BASE_HEX, NULL, 0x0,
+ NULL, HFILL }
+ },
+ { &hf_diameter_3gpp_dsa_flags_bit0,
+ { "Network Node area restricted", "diameter.3gpp.dsa_flags_bit0",
+ FT_BOOLEAN, BASE_NONE, TFS(&tfs_set_notset), 0x0,
+ NULL, HFILL }
+ },
+ { &hf_diameter_3gpp_ida_flags,
+ { "IDA Flags", "diameter.3gpp.ida_flags",
+ FT_UINT32, BASE_HEX, NULL, 0x0,
+ NULL, HFILL }
+ },
+ { &hf_diameter_3gpp_ida_flags_bit0,
+ { "Network Node area restricted", "diameter.3gpp.ida_flags_bit0",
+ FT_BOOLEAN, BASE_NONE, TFS(&tfs_set_notset), 0x0,
+ NULL, HFILL }
+ },
+ { &hf_diameter_3gpp_pua_flags,
+ { "PUA Flags", "diameter.3gpp.pua_flags",
+ FT_UINT32, BASE_HEX, NULL, 0x0,
+ NULL, HFILL }
+ },
+ { &hf_diameter_3gpp_pua_flags_bit0,
+ { "Freeze M-TMSI", "diameter.3gpp.pua_flags_bit0",
+ FT_BOOLEAN, BASE_NONE, TFS(&tfs_set_notset), 0x0,
+ NULL, HFILL }
+ },
+ { &hf_diameter_3gpp_pua_flags_bit1,
+ { "Freeze P-TMSI", "diameter.3gpp.pua_flags_bit1",
+ FT_BOOLEAN, BASE_NONE, TFS(&tfs_set_notset), 0x0,
+ NULL, HFILL }
+ },
+ { &hf_diameter_3gpp_nor_flags,
+ { "NOR Flags", "diameter.3gpp.nor_flags",
+ FT_UINT32, BASE_HEX, NULL, 0x0,
+ NULL, HFILL }
+ },
+ { &hf_diameter_3gpp_nor_flags_bit0,
+ { "Single-Registration-Indication", "diameter.3gpp.nor_flags_bit0",
+ FT_BOOLEAN, BASE_NONE, TFS(&tfs_set_notset), 0x0,
+ NULL, HFILL }
+ },
+ { &hf_diameter_3gpp_nor_flags_bit1,
+ { "SGSN area restricted", "diameter.3gpp.nor_flags_bit1",
+ FT_BOOLEAN, BASE_NONE, TFS(&tfs_set_notset), 0x0,
+ NULL, HFILL }
+ },
+ { &hf_diameter_3gpp_nor_flags_bit2,
+ { "Ready for SM", "diameter.3gpp.nor_flags_bit2",
+ FT_BOOLEAN, BASE_NONE, TFS(&tfs_set_notset), 0x0,
+ NULL, HFILL }
+ },
+ { &hf_diameter_3gpp_nor_flags_bit3,
+ { "UE Reachable", "diameter.3gpp.nor_flags_bit3",
+ FT_BOOLEAN, BASE_NONE, TFS(&tfs_set_notset), 0x0,
+ NULL, HFILL }
+ },
+ { &hf_diameter_3gpp_nor_flags_bit4,
+ { "Delete all APN and PDN GW identity pairs", "diameter.3gpp.nor_flags_bit4",
+ FT_BOOLEAN, BASE_NONE, TFS(&tfs_set_notset), 0x0,
+ NULL, HFILL }
+ },
+ { &hf_diameter_3gpp_idr_flags,
+ { "IDR Flags", "diameter.3gpp.idr_flags",
+ FT_UINT32, BASE_HEX, NULL, 0x0,
+ NULL, HFILL }
+ },
+ { &hf_diameter_3gpp_idr_flags_bit0,
+ { "UE Reachability Request", "diameter.3gpp.idr_flags_bit0",
+ FT_BOOLEAN, BASE_NONE, TFS(&tfs_set_notset), 0x0,
+ NULL, HFILL }
+ },
+ { &hf_diameter_3gpp_idr_flags_bit1,
+ { "T-ADS Data Request", "diameter.3gpp.idr_flags_bit1",
+ FT_BOOLEAN, BASE_NONE, TFS(&tfs_set_notset), 0x0,
+ NULL, HFILL }
+ },
+ { &hf_diameter_3gpp_idr_flags_bit2,
+ { "EPS User State Request", "diameter.3gpp.idr_flags_bit2",
+ FT_BOOLEAN, BASE_NONE, TFS(&tfs_set_notset), 0x0,
+ NULL, HFILL }
+ },
+ { &hf_diameter_3gpp_idr_flags_bit3,
+ { "EPS Location Information Request", "diameter.3gpp.idr_flags_bit3",
+ FT_BOOLEAN, BASE_NONE, TFS(&tfs_set_notset), 0x0,
+ NULL, HFILL }
+ },
+ { &hf_diameter_3gpp_idr_flags_bit4,
+ { "Current Location Request", "diameter.3gpp.idr_flags_bit4",
+ FT_BOOLEAN, BASE_NONE, TFS(&tfs_set_notset), 0x0,
+ NULL, HFILL }
+ },
+ { &hf_diameter_3gpp_ipv6addr,
+ { "IPv6 Address", "diameter.3gpp.ipv6addr",
+ FT_IPv6, BASE_NONE, NULL, 0x0,
+ NULL, HFILL }
+ },
+ { &hf_diameter_3gpp_mbms_abs_time_ofmbms_data_tfer,
+ { "Absolute Time of MBMS Data Transfer", "diameter.3gpp.mbms_abs_time_ofmbms_data_tfer",
+ FT_STRING, BASE_NONE, NULL, 0x0,
+ NULL, HFILL }
+ },
+ { &hf_diameter_3gpp_udp_port ,
+ { "UDP Port", "diameter.3gpp.udp_port",
+ FT_UINT8, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }
+ },
+ };
+
+ /* Setup protocol subtree array */
+ static gint *ett[] = {
+ &diameter_3gpp_path_ett,
+ &diameter_3gpp_msisdn_ett,
+ &diameter_3gpp_feature_list_ett,
+ &diameter_3gpp_tmgi_ett,
+ &diameter_3gpp_ulr_flags_ett,
+ &diameter_3gpp_ula_flags_ett,
+ &diameter_3gpp_dsr_flags_ett,
+ &diameter_3gpp_dsa_flags_ett,
+ &diameter_3gpp_ida_flags_ett,
+ &diameter_3gpp_pua_flags_ett,
+ &diameter_3gpp_nor_flags_ett,
+ &diameter_3gpp_idr_flags_ett,
+ };
+
+ /* Required function calls to register the header fields and subtrees used */
+ proto_diameter_3gpp = proto_register_protocol("Diameter 3GPP","Diameter3GPP", "diameter3gpp");
+ proto_register_field_array(proto_diameter_3gpp, hf, array_length(hf));
+ proto_register_subtree_array(ett, array_length(ett));
}
diff --git a/epan/dissectors/packet-gtpv2.c b/epan/dissectors/packet-gtpv2.c
index 59e85d5e5c..0fff57c217 100644
--- a/epan/dissectors/packet-gtpv2.c
+++ b/epan/dissectors/packet-gtpv2.c
@@ -371,6 +371,9 @@ static int hf_gtpv2_abs_time_mbms_data = -1;
static int hf_gtpv2_mbms_session_duration_days = -1;
static int hf_gtpv2_mbms_session_duration_secs = -1;
static int hf_gtpv2_time_to_data_xfer = -1;
+static int hf_gtpv2_arp_pvi = -1;
+static int hf_gtpv2_arp_pl = -1;
+static int hf_gtpv2_arp_pci = -1;
static gint ett_gtpv2 = -1;
static gint ett_gtpv2_flags = -1;
@@ -4316,6 +4319,7 @@ dissect_gtpv2_mbms_session_duration(tvbuff_t *tvb, packet_info *pinfo _U_, proto
int bit_offset = 0;
guint32 days;
guint32 hours;
+ guint32 minutes;
guint32 seconds;
/* From 3GPP TS 29.061 17.7.7 MBMS-Session-Duration AVP */
@@ -4337,12 +4341,13 @@ dissect_gtpv2_mbms_session_duration(tvbuff_t *tvb, packet_info *pinfo _U_, proto
proto_tree_add_item(tree, hf_gtpv2_mbms_session_duration_secs, tvb, offset, 3, ENC_BIG_ENDIAN);
proto_item_append_text(item, "Indefinite (always-on)");
} else {
- hours = seconds / 60;
- seconds = seconds % 60;
+ hours = seconds / 3600;
+ minutes = (seconds % 3600) / 60;
+ seconds = (seconds % 3600) % 60;
proto_tree_add_item(tree, hf_gtpv2_mbms_session_duration_days, tvb, offset, 3, ENC_BIG_ENDIAN);
proto_tree_add_item(tree, hf_gtpv2_mbms_session_duration_secs, tvb, offset, 3, ENC_BIG_ENDIAN);
- proto_item_append_text(item, "%d day(s), %d hour(s), %d second(s)", days, hours, seconds);
+ proto_item_append_text(item, "%d days %02d:%02d:%02d (DD days HH:MM:SS)", days, hours, minutes, seconds);
}
offset += 3;
@@ -4619,14 +4624,18 @@ dissect_gtpv2_throttling(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree
}
/* 8.86 Allocation/Retention Priority (ARP) */
-static void
+void
dissect_gtpv2_arp(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length _U_, guint8 message_type _U_, guint8 instance _U_)
{
- proto_item *expert_item;
+ int offset = 0;
- expert_item = proto_tree_add_text(tree, tvb, 0, length, "IE data not dissected yet");
- expert_add_info_format(pinfo, expert_item, PI_PROTOCOL, PI_NOTE, "IE data not dissected yet");
- PROTO_ITEM_SET_GENERATED(expert_item);
+ proto_tree_add_item(tree, hf_gtpv2_arp_pvi, tvb, offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_gtpv2_arp_pl, tvb, offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_gtpv2_arp_pci, tvb, offset, 1, ENC_BIG_ENDIAN);
+
+ offset += 1;
+ if(length > 1)
+ proto_tree_add_text(tree, tvb, offset, length-1, "Spare: %s", tvb_bytes_to_str(tvb, offset, length-1));
}
/* 8.87 EPC Timer */
@@ -6531,6 +6540,21 @@ void proto_register_gtpv2(void)
FT_STRING, BASE_NONE, NULL, 0,
NULL, HFILL}
},
+ { &hf_gtpv2_arp_pvi,
+ {"Pre-emption Vulnerability (PVI)", "gtpv2.arp_pvi",
+ FT_BOOLEAN, 8, NULL, 0x01,
+ NULL, HFILL}
+ },
+ { &hf_gtpv2_arp_pl,
+ {"Priority Level", "gtpv2.arp_pl",
+ FT_UINT8, BASE_DEC, NULL, 0x3c,
+ NULL, HFILL}
+ },
+ { &hf_gtpv2_arp_pci,
+ {"Pre-emption Capability (PCI)", "gtpv2.arp_pci",
+ FT_BOOLEAN, 8, NULL, 0x40,
+ NULL, HFILL}
+ },
};
static gint *ett_gtpv2_array[] = {
diff --git a/epan/dissectors/packet-gtpv2.h b/epan/dissectors/packet-gtpv2.h
index 293f2a5c38..319df06d40 100644
--- a/epan/dissectors/packet-gtpv2.h
+++ b/epan/dissectors/packet-gtpv2.h
@@ -24,3 +24,4 @@
extern void dissect_gtpv2_mbms_service_area(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length _U_, guint8 message_type _U_, guint8 instance _U_);
extern void dissect_gtpv2_mbms_session_duration(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length _U_, guint8 message_type _U_, guint8 instance _U_);
extern void dissect_gtpv2_mbms_time_to_data_xfer(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length _U_, guint8 message_type _U_, guint8 instance _U_);
+extern void dissect_gtpv2_arp(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length _U_, guint8 message_type _U_, guint8 instance _U_);