X-Git-Url: http://git.samba.org/?p=metze%2Fwireshark%2Fwip.git;a=blobdiff_plain;f=epan%2Fdissectors%2Fpacket-gtpv2.c;h=129a755be008e1e43808f9d38f6c464940823efd;hp=9bd96872492bc522f9b42bc545d8721f758504e9;hb=c8b96ef1a9b34faf5bb869b40a4c1e2c71590cd7;hpb=65b9d561cd69839f741e8137934b8a8f5a28f6b5 diff --git a/epan/dissectors/packet-gtpv2.c b/epan/dissectors/packet-gtpv2.c index 9bd9687249..129a755be0 100644 --- a/epan/dissectors/packet-gtpv2.c +++ b/epan/dissectors/packet-gtpv2.c @@ -1,7 +1,7 @@ /* packet-gtpv2.c * * Routines for GTPv2 dissection - * Copyright 2009 - 2015, Anders Broman + * Copyright 2009 - 2016, Anders Broman * * Wireshark - Network traffic analyzer * By Gerald Combs @@ -138,9 +138,24 @@ static int hf_gtpv2_ppsi = -1; static int hf_gtpv2_csfbi = -1; static int hf_gtpv2_clii = -1; static int hf_gtpv2_cpsr = -1; +static int hf_gtpv2_nsi = -1; +static int hf_gtpv2_uasi = -1; +static int hf_gtpv2_dtci = -1; +static int hf_gtpv2_bdwi = -1; +static int hf_gtpv2_psci = -1; static int hf_gtpv2_pcri = -1; static int hf_gtpv2_aosi = -1; static int hf_gtpv2_aopi = -1; +static int hf_gtpv2_roaai = -1; +static int hf_gtpv2_epcosi = -1; +static int hf_gtpv2_cpopci = -1; +static int hf_gtpv2_pmtsmi = -1; +static int hf_gtpv2_s11tf = -1; +static int hf_gtpv2_pnsi = -1; +static int hf_gtpv2_unaccsi = -1; +static int hf_gtpv2_wpmsi = -1; +static int hf_gtpv2_enbcrsi = -1; +static int hf_gtpv2_tspcmi = -1; static int hf_gtpv2_pdn_type = -1; @@ -279,9 +294,9 @@ static int hf_gtpv2_tra_info_lenb_uu = -1; static int hf_gtpv2_ti = -1; -static int hf_gtpv2_bearer_qos_pvi= -1; -static int hf_gtpv2_bearer_qos_pl= -1; static int hf_gtpv2_bearer_qos_pci= -1; +static int hf_gtpv2_bearer_qos_pl= -1; +static int hf_gtpv2_bearer_qos_pvi= -1; static int hf_gtpv2_bearer_qos_label_qci = -1; static int hf_gtpv2_bearer_qos_mbr_up = -1; static int hf_gtpv2_bearer_qos_mbr_down = -1; @@ -431,6 +446,11 @@ static int hf_gtpv2_action_indication_val = -1; static int hf_gtpv2_uli_timestamp = -1; static int hf_gtpv2_mbms_session_duration_days = -1; static int hf_gtpv2_mbms_session_duration_secs = -1; +static int hf_gtpv2_csg_id = -1; +static int hf_gtpv2_cmi = -1; +static int hf_gtpv2_service_indicator = -1; +static int hf_gtpv2_detach_type = -1; +static int hf_gtpv2_ldn = -1; static int hf_gtpv2_node_features_prn = -1; static int hf_gtpv2_node_features_mabr =-1; static int hf_gtpv2_node_features_ntsr = -1; @@ -539,6 +559,7 @@ static int hf_gtpv2_twan_relay_id_ipv4 = -1; static int hf_gtpv2_twan_relay_id_ipv6 = -1; static int hf_gtpv2_twan_circuit_id_len = -1; static int hf_gtpv2_twan_circuit_id = -1; +static int hf_gtpv2_integer_number_val = -1; static gint ett_gtpv2 = -1; static gint ett_gtpv2_flags = -1; @@ -605,6 +626,7 @@ static expert_field ei_gtpv2_fq_csid_type_bad = EI_INIT; static expert_field ei_gtpv2_mbms_session_duration_days = EI_INIT; static expert_field ei_gtpv2_mbms_session_duration_secs = EI_INIT; static expert_field ei_gtpv2_ie = EI_INIT; +static expert_field ei_gtpv2_int_size_not_handled = EI_INIT; /* Definition of User Location Info (AVP 22) masks */ @@ -618,6 +640,7 @@ static expert_field ei_gtpv2_ie = EI_INIT; #define GTPV2_PPI_VAL_MASK 0x3F #define GTPV2_SRVCC_PS_TO_CS_REQUEST 25 +#define GTPV2_SRVCC_PS_TO_CS_RESPONSE 26 #define GTPV2_CREATE_SESSION_REQUEST 32 #define GTPV2_CREATE_SESSION_RESPONSE 33 #define GTPV2_MODIFY_BEARER_REQUEST 34 @@ -672,10 +695,13 @@ static const value_string gtpv2_message_type_vals[] = { { 35, "Modify Bearer Response"}, { 36, "Delete Session Request"}, { 37, "Delete Session Response"}, - /* SGSN to PGW (S4, S5/S8) */ + /* SGSN/MME to PGW (S4/S11, S5/S8) */ { 38, "Change Notification Request"}, { 39, "Change Notification Response"}, - /* 40-63 For future use */ + /* MME to PGW (S11, S5/S8) */ + { 40, "Remote UE Report Notification" }, + { 41, "Remote UE Report Acknowledge" }, + /* 42-63 For future use */ /* Messages without explicit response */ { 64, "Modify Bearer Command"}, /* (MME/SGSN to PGW -S11/S4, S5/S8) */ { 65, "Modify Bearer Failure Indication"}, /*(PGW to MME/SGSN -S5/S8, S11/S4) */ @@ -688,7 +714,7 @@ static const value_string gtpv2_message_type_vals[] = { { 72, "Trace Session Deactivation"}, { 73, "Stop Paging Indication"}, /* 74-94 For future use */ - /* PDN-GW to SGSN/MME (S5/S8, S4/S11) */ + /* PGW to SGSN/MME/ TWAN/ePDG (S5/S8, S4/S11, S2a, S2b) */ { 95, "Create Bearer Request"}, { 96, "Create Bearer Response"}, { 97, "Update Bearer Request"}, @@ -698,7 +724,10 @@ static const value_string gtpv2_message_type_vals[] = { /* PGW to MME, MME to PGW, SGW to PGW, SGW to MME (S5/S8, S11) */ {101, "Delete PDN Connection Set Request"}, {102, "Delete PDN Connection Set Response"}, - /* 103-127 For future use */ + /* PGW to SGSN/MME(S5, S4/S11) */ + {103, "PGW Downlink Triggering Notification" }, + {104, "PGW Downlink Triggering Acknowledge" }, + /* 105-127 For future use */ /* MME to MME, SGSN to MME, MME to SGSN, SGSN to SGSN (S3/10/S16) */ {128, "Identification Request"}, {129, "Identification Response"}, @@ -723,8 +752,10 @@ static const value_string gtpv2_message_type_vals[] = { {153, "Alert MME Notification"}, {154, "Alert MME Acknowledge"}, {155, "UE Activity Notification"}, - {156, "UE Activity Acknowledge"}, - /* 157 to 159 For future use */ + {156, "UE Activity Acknowledge" }, + {157, "ISR Status Indication" }, + {158, "UE Registration Query Request" }, + {159, "UE Registration Query Response" }, /* MME to SGW (S11) */ {160, "Create Forwarding Tunnel Request"}, {161, "Create Forwarding Tunnel Response"}, @@ -762,6 +793,7 @@ static const value_string gtpv2_message_type_vals[] = { {235, "MBMS Session Stop Request"}, {236, "MBMS Session Stop Response"}, /* 237 to 239 For future use */ + /* Reserved for Sv interface (see also types 25 to 31) TS 29.280 */ {240, "SRVCC CS to PS Response"}, /* 5.2.9 3GPP TS 29.280 V11.5.0 (2013-09) */ {241, "SRVCC CS to PS Complete Notification"}, /* 5.2.10 3GPP TS 29.280 V11.5.0 (2013-09) */ {242, "SRVCC CS to PS Complete Acknowledge"}, /* 5.2.11 3GPP TS 29.280 V11.5.0 (2013-09) */ @@ -898,8 +930,8 @@ static value_string_ext gtpv2_message_type_vals_ext = VALUE_STRING_EXT_INIT(gtpv #define GTPV2_IE_TRUST_WLAN_MODE_IND 174 #define GTPV2_IE_NODE_NUMBER 175 #define GTPV2_IE_NODE_IDENTIFIER 176 -#define GTPV2_IE_PRES_REP_AREA_ACT 177 -#define GTPV2_IE_PRES_REP_AREA_INF 178 +#define GTPV2_IE_PRES_REP_AREA_ACT 177 +#define GTPV2_IE_PRES_REP_AREA_INF 178 #define GTPV2_IE_TWAN_ID_TS 179 #define GTPV2_IE_OVERLOAD_CONTROL_INF 180 #define GTPV2_IE_LOAD_CONTROL_INF 181 @@ -908,7 +940,26 @@ static value_string_ext gtpv2_message_type_vals_ext = VALUE_STRING_EXT_INIT(gtpv #define GTPV2_IE_APN_AND_REL_CAP 184 /* 185: WLAN Offloadability Indication*/ #define GTPV2_IE_PAGING_AND_SERVICE_INF 186 +#define GTPV2_IE_INTEGER_NUMBER 187 +/* +188 Millisecond Time Stamp +189 Monitoring Event Information +190 ECGI List +191 Remote UE Context +192 Remote User ID +193 Remote UE IP information +194 CIoT Optimizations Support Indication +195 SCEF PDN Connection +196 Header Compression Configuration +197 Extended Protocol Configuration Options (ePCO) +198 Serving PLMN Rate Control +199 Counter +200 to 253 Spare. For future use. +254 Special IE type for IE Type Extension +255 Private Extension +256 to 65535 Spare. For future use. +*/ /* 169 to 254 reserved for future use */ #define GTPV2_IE_PRIVATE_EXT 255 @@ -928,7 +979,6 @@ static const value_string gtpv2_element_type_vals[] = { { 1, "International Mobile Subscriber Identity (IMSI)"}, /* Variable Length / 8.3 */ { 2, "Cause"}, /* Variable Length / 8.4 */ { 3, "Recovery (Restart Counter)"}, /* Variable Length / 8.5 */ - /* 4-34 Reserved for S101 interface Extendable / See 3GPP TS 29.276 [14] */ /* 4-34 Reserved for S101 interface Extendable / See 3GPP TS 29.276 [14] */ /* 35-50 / See 3GPP TS 29.276 */ /*Start SRVCC Messages ETSI TS 129 280 V10.1.0 (2011-06) 6.1*/ @@ -1074,8 +1124,8 @@ static const value_string gtpv2_element_type_vals[] = { {196, "Header Compression Configuration"}, /* Extendable / 8.127 */ {197, "Extended Protocol Configuration Options(ePCO)"}, /* Variable Length / 8.128 */ {198, "Serving PLMN Rate Control"}, /* Extendable / 8.129 */ - /* 199 to 254 Spare. For future use. */ - + {199, "Counter" }, /* Extendable / 8.130 */ + /* 1200 to 254 Spare. For future use. */ {255, "Private Extension"}, /* Variable Length / 8.67 */ {0, NULL} }; @@ -1430,25 +1480,32 @@ dissect_gtpv2_src_tgt_trans_con(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tre * dissect_ranap_SourceRNC_ToTargetRNC_TransparentContainer_PDU */ if (message_type == GTPV2_SRVCC_PS_TO_CS_REQUEST) { - sub_tree = proto_tree_add_subtree(tree, tvb, offset, length, ett_gtpv2_utran_con, NULL, "Source RNC to Target RNC Transparent Container"); + sub_tree = proto_tree_add_subtree(tree, tvb, offset, length-1, ett_gtpv2_utran_con, NULL, "Source RNC to Target RNC Transparent Container"); new_tvb = tvb_new_subset_remaining(tvb, offset); dissect_ranap_SourceRNC_ToTargetRNC_TransparentContainer_PDU(new_tvb, pinfo, sub_tree, NULL); - } } /* 6.4 Target to Source Transparent Container */ static void -dissect_gtpv2_tgt_src_trans_con(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length, guint8 message_type _U_, guint8 instance _U_, session_args_t * args _U_) +dissect_gtpv2_tgt_src_trans_con(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length, guint8 message_type, guint8 instance _U_, session_args_t * args _U_) { + tvbuff_t *new_tvb; + proto_tree *sub_tree; int offset = 0; + proto_tree_add_item(tree, hf_gtpv2_len_trans_con, tvb, offset, 1, ENC_BIG_ENDIAN); offset += 1; /* Transparent Container */ proto_tree_add_item(tree, hf_gtpv2_transparent_container, tvb, offset, length-1, ENC_NA); + if (message_type == GTPV2_SRVCC_PS_TO_CS_RESPONSE) { + sub_tree = proto_tree_add_subtree(tree, tvb, offset, length-1, ett_gtpv2_utran_con, NULL, "Target RNC to Source RNC Transparent Container"); + new_tvb = tvb_new_subset_remaining(tvb, offset); + dissect_ranap_TargetRNC_ToSourceRNC_TransparentContainer_PDU(new_tvb, pinfo, sub_tree, NULL); + } } @@ -1976,7 +2033,12 @@ dissect_gtpv2_ind(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_ite return; } - /* Octet 9 Spare Spare Spare Spare Spare PCRI AOSI AOPI */ + /* Octet 9 NSI UASI DTCI BDWI PSCI PCRI AOSI AOPI */ + proto_tree_add_item(tree, hf_gtpv2_nsi, tvb, offset, 1, ENC_BIG_ENDIAN); + proto_tree_add_item(tree, hf_gtpv2_uasi, tvb, offset, 1, ENC_BIG_ENDIAN); + proto_tree_add_item(tree, hf_gtpv2_dtci, tvb, offset, 1, ENC_BIG_ENDIAN); + proto_tree_add_item(tree, hf_gtpv2_bdwi, tvb, offset, 1, ENC_BIG_ENDIAN); + proto_tree_add_item(tree, hf_gtpv2_psci, tvb, offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(tree, hf_gtpv2_pcri, tvb, offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(tree, hf_gtpv2_aosi, tvb, offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(tree, hf_gtpv2_aopi, tvb, offset, 1, ENC_BIG_ENDIAN); @@ -1986,6 +2048,30 @@ dissect_gtpv2_ind(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_ite return; } + /* Octet 10 ROAAI EPCOSI CPOPCI PMTSMI S11TF PNSI UNACCSI WPMSI */ + proto_tree_add_item(tree, hf_gtpv2_roaai, tvb, offset, 1, ENC_BIG_ENDIAN); + proto_tree_add_item(tree, hf_gtpv2_epcosi, tvb, offset, 1, ENC_BIG_ENDIAN); + proto_tree_add_item(tree, hf_gtpv2_cpopci, tvb, offset, 1, ENC_BIG_ENDIAN); + proto_tree_add_item(tree, hf_gtpv2_pmtsmi, tvb, offset, 1, ENC_BIG_ENDIAN); + proto_tree_add_item(tree, hf_gtpv2_s11tf, tvb, offset, 1, ENC_BIG_ENDIAN); + proto_tree_add_item(tree, hf_gtpv2_pnsi, tvb, offset, 1, ENC_BIG_ENDIAN); + proto_tree_add_item(tree, hf_gtpv2_unaccsi, tvb, offset, 1, ENC_BIG_ENDIAN); + proto_tree_add_item(tree, hf_gtpv2_wpmsi, tvb, offset, 1, ENC_BIG_ENDIAN); + offset += 1; + + if (length == 6){ + return; + } + + /*Octet 11 Spare Spare Spare Spare Spare Spare ENBCRSI TSPCMI */ + proto_tree_add_item(tree, hf_gtpv2_enbcrsi, tvb, offset, 1, ENC_BIG_ENDIAN); + proto_tree_add_item(tree, hf_gtpv2_tspcmi, tvb, offset, 1, ENC_BIG_ENDIAN); + offset += 1; + + if (length == 7){ + return; + } + proto_tree_add_expert_format(tree, pinfo, &ei_gtpv2_ie_data_not_dissected, tvb, offset, -1, "The rest of the IE not dissected yet"); @@ -2034,6 +2120,7 @@ static const value_string gtpv2_pdn_type_vals[] = { {1, "IPv4"}, {2, "IPv6"}, {3, "IPv4/IPv6"}, + {4, "Non-IP"}, {0, NULL} }; @@ -2091,9 +2178,9 @@ static void dissect_gtpv2_bearer_qos(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length _U_, guint8 message_type _U_, guint8 instance _U_, session_args_t * args _U_) { int offset = 0; - proto_tree_add_item(tree, hf_gtpv2_bearer_qos_pvi, tvb, offset, 1, ENC_BIG_ENDIAN); - proto_tree_add_item(tree, hf_gtpv2_bearer_qos_pl, tvb, offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(tree, hf_gtpv2_bearer_qos_pci, tvb, offset, 1, ENC_BIG_ENDIAN); + proto_tree_add_item(tree, hf_gtpv2_bearer_qos_pl, tvb, offset, 1, ENC_BIG_ENDIAN); + proto_tree_add_item(tree, hf_gtpv2_bearer_qos_pvi, tvb, offset, 1, ENC_BIG_ENDIAN); offset += 1; proto_tree_add_item(tree, hf_gtpv2_bearer_qos_label_qci, tvb, offset, 1, ENC_BIG_ENDIAN); offset += 1; @@ -2137,6 +2224,7 @@ static const value_string gtpv2_rat_type_vals[] = { {5, "HSPA Evolution"}, {6, "EUTRAN"}, {7, "Virtual"}, + {8, "EUTRAN-NB-IoT"}, {0, NULL} }; static value_string_ext gtpv2_rat_type_vals_ext = VALUE_STRING_EXT_INIT(gtpv2_rat_type_vals); @@ -2204,14 +2292,14 @@ dissect_gtpv2_tad(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_ite * It can be found in 3GPP TS 36.413 v8.3.0, but it is expected that it will be moved * to 23.003 in a future version. */ -static gchar* +gchar* dissect_gtpv2_tai(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int *offset) { gchar *str = NULL; gchar *mcc_mnc_str; guint16 tac; - mcc_mnc_str = dissect_e212_mcc_mnc_wmem_packet_str(tvb, pinfo, tree, *offset, E212_NONE, TRUE); + mcc_mnc_str = dissect_e212_mcc_mnc_wmem_packet_str(tvb, pinfo, tree, *offset, E212_TAI, TRUE); *offset += 3; tac = tvb_get_ntohs(tvb, *offset); proto_tree_add_item(tree, hf_gtpv2_tai_tac, tvb, *offset, 2, ENC_BIG_ENDIAN); @@ -2238,7 +2326,7 @@ dissect_gtpv2_ecgi(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int *off NULL }; - mcc_mnc_str = dissect_e212_mcc_mnc_wmem_packet_str(tvb, pinfo, tree, *offset, E212_NONE, TRUE); + mcc_mnc_str = dissect_e212_mcc_mnc_wmem_packet_str(tvb, pinfo, tree, *offset, E212_ECGI, TRUE); *offset += 3; /* The bits 8 through 5, of octet e+3 (Fig 8.21.5-1 in TS 29.274 V8.2.0) are spare * and hence they would not make any difference to the hex string following it, @@ -2316,7 +2404,7 @@ dissect_gtpv2_cgi(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int *offs gchar *mcc_mnc_str; guint16 lac, ci; - mcc_mnc_str = dissect_e212_mcc_mnc_wmem_packet_str(tvb, pinfo, tree, *offset, E212_NONE, TRUE); + mcc_mnc_str = dissect_e212_mcc_mnc_wmem_packet_str(tvb, pinfo, tree, *offset, E212_CGI, TRUE); *offset += 3; lac = tvb_get_ntohs(tvb, *offset); proto_tree_add_item(tree, hf_gtpv2_uli_cgi_lac, tvb, *offset, 2, ENC_BIG_ENDIAN); @@ -2578,6 +2666,8 @@ static const value_string gtpv2_f_teid_interface_type_vals[] = { {35, "S2a TWAN GTP-C interface"}, {36, "S2a PGW GTP-C interface"}, {37, "S2a PGW GTP-U interface"}, + {38, "S11 MME GTP-U interface"}, + {39, "S11 SGW GTP-U interface"}, {0, NULL} }; static value_string_ext gtpv2_f_teid_interface_type_vals_ext = VALUE_STRING_EXT_INIT(gtpv2_f_teid_interface_type_vals); @@ -3273,7 +3363,7 @@ dissect_gtpv2_authentication_quintuplets(tvbuff_t *tvb, proto_tree *tree, int of { proto_tree *auth_qui_tree; int i; - guint8 xres_len, autn_len; + guint32 tmp; for (i = 0; i < nr_qui; i++) { auth_qui_tree = proto_tree_add_subtree_format(tree, tvb, offset, 0, @@ -3290,20 +3380,18 @@ dissect_gtpv2_authentication_quintuplets(tvbuff_t *tvb, proto_tree *tree, int of */ proto_tree_add_item(auth_qui_tree, hf_gtpv2_mm_context_rand, tvb, offset, 16, ENC_NA); offset += 16; - xres_len = tvb_get_guint8(tvb, offset); - proto_tree_add_item(auth_qui_tree, hf_gtpv2_mm_context_xres_len, tvb, offset, 1, ENC_BIG_ENDIAN); + proto_tree_add_item_ret_uint(auth_qui_tree, hf_gtpv2_mm_context_xres_len, tvb, offset, 1, ENC_NA, &tmp); offset += 1; - proto_tree_add_item(auth_qui_tree, hf_gtpv2_mm_context_xres, tvb, offset, xres_len, ENC_NA); - offset += xres_len; + proto_tree_add_item(auth_qui_tree, hf_gtpv2_mm_context_xres, tvb, offset, tmp, ENC_NA); + offset += tmp; proto_tree_add_item(auth_qui_tree, hf_gtpv2_ck, tvb, offset, 16, ENC_NA); offset += 16; proto_tree_add_item(auth_qui_tree, hf_gtpv2_ik, tvb, offset, 16, ENC_NA); offset += 16; - autn_len = tvb_get_guint8(tvb, offset); - proto_tree_add_item(auth_qui_tree, hf_gtpv2_mm_context_autn_len, tvb, offset, 1, ENC_BIG_ENDIAN); + proto_tree_add_item_ret_uint(auth_qui_tree, hf_gtpv2_mm_context_autn_len, tvb, offset, 1, ENC_NA, &tmp); offset += 1; - proto_tree_add_item(auth_qui_tree, hf_gtpv2_mm_context_autn, tvb, offset, autn_len, ENC_NA); - offset += autn_len; + proto_tree_add_item(auth_qui_tree, hf_gtpv2_mm_context_autn, tvb, offset, tmp, ENC_NA); + offset += tmp; } return offset; @@ -3314,22 +3402,24 @@ static int dissect_gtpv2_authentication_quadruplets(tvbuff_t *tvb, proto_tree *tree, int offset, guint8 nr_qui) { proto_tree *auth_qua_tree; - guint8 tmp; + guint32 tmp; int i; for (i = 0; i < nr_qui; i++) { - auth_qua_tree = proto_tree_add_subtree(tree, tvb, offset, 0, - ett_gtpv2_mm_context_auth_qua, NULL, "Authentication Quadruplet"); + auth_qua_tree = proto_tree_add_subtree_format(tree, tvb, offset, 0, + ett_gtpv2_mm_context_auth_qua, NULL, "Authentication Quadruplet %u",i+1); proto_tree_add_item(auth_qua_tree, hf_gtpv2_mm_context_rand, tvb, offset, 16, ENC_NA); offset += 16; - tmp = tvb_get_guint8(tvb, offset++); + proto_tree_add_item_ret_uint(auth_qua_tree, hf_gtpv2_mm_context_xres_len, tvb, offset, 1, ENC_NA, &tmp); + offset++; proto_tree_add_item(auth_qua_tree, hf_gtpv2_mm_context_xres, tvb, offset, tmp, ENC_NA); offset += tmp; - tmp = tvb_get_guint8(tvb, offset++); + proto_tree_add_item_ret_uint(auth_qua_tree, hf_gtpv2_mm_context_autn_len, tvb, offset, 1, ENC_NA, &tmp); + offset++; proto_tree_add_item(auth_qua_tree, hf_gtpv2_mm_context_autn, tvb, offset, tmp, ENC_NA); offset += tmp; @@ -3352,7 +3442,6 @@ dissect_gtpv2_mm_context_common_data(tvbuff_t *tvb, packet_info *pinfo, proto_tr { proto_tree *net_cap_tree, *msnt_cap_tree; guint8 ue_net_cap_len, ms_net_cap_len, mei_len; - guint32 tmp; /* * If SAMBRI (Subscribed UE AMBR Indicator), bit 1 of octet 6, is set to "1", @@ -3360,13 +3449,11 @@ dissect_gtpv2_mm_context_common_data(tvbuff_t *tvb, packet_info *pinfo, proto_tr */ if (samb_ri) { /* j to (j+3) Uplink Subscribed UE AMBR */ - tmp = tvb_get_ntohl(tvb, offset); - proto_tree_add_uint_format_value(tree, hf_gtpv2_uplink_subscribed_ue_ambr, tvb, offset, 4, tmp, "%d Kbps", tmp); + proto_tree_add_item(tree, hf_gtpv2_uplink_subscribed_ue_ambr, tvb, offset, 4, ENC_BIG_ENDIAN); offset += 4; /* (j+4) to (j+7) Downlink Subscribed UE AMBR */ - tmp = tvb_get_ntohl(tvb, offset); - proto_tree_add_uint_format_value(tree, hf_gtpv2_downlink_subscribed_ue_ambr, tvb, offset, 4, tmp, "%d Kbps", tmp); + proto_tree_add_item(tree, hf_gtpv2_downlink_subscribed_ue_ambr, tvb, offset, 4, ENC_BIG_ENDIAN); offset += 4; } @@ -3376,13 +3463,11 @@ dissect_gtpv2_mm_context_common_data(tvbuff_t *tvb, packet_info *pinfo, proto_tr */ if (uamb_ri) { /* i to (i+3) Uplink Used UE AMBR */ - tmp = tvb_get_ntohl(tvb, offset); - proto_tree_add_uint_format_value(tree, hf_gtpv2_uplink_used_ue_ambr, tvb, offset, 4, tmp, "%d Kbps", tmp); + proto_tree_add_item(tree, hf_gtpv2_uplink_used_ue_ambr, tvb, offset, 4, ENC_BIG_ENDIAN); offset += 4; /* (i+4) to (i+7) Downlink Used UE AMBR */ - tmp = tvb_get_ntohl(tvb, offset); - proto_tree_add_uint_format_value(tree, hf_gtpv2_downlink_used_ue_ambr, tvb, offset, 4, tmp, "%d Kbps", tmp); + proto_tree_add_item(tree, hf_gtpv2_downlink_used_ue_ambr, tvb, offset, 4, ENC_BIG_ENDIAN); offset += 4; } @@ -3846,7 +3931,6 @@ dissect_gtpv2_mm_context_eps_qq(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tre * Hop Chaining Count) are both present, otherwise their octets are not present. */ tmp = tvb_get_guint8(tvb, offset); - osci = tmp & 1; nhi = (tmp & 0x10) >> 4; drxi = (tmp & 0x08) >> 3; proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_drxi, tvb, offset, 1, ENC_BIG_ENDIAN); @@ -3864,6 +3948,7 @@ dissect_gtpv2_mm_context_eps_qq(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tre nr_qua = tmp & 0x1c; nr_qua >>= 2; uamb_ri = (tmp & 0x2) >> 1; + osci = tmp & 1; proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_nr_qui, tvb, offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_nr_qua, tvb, offset, 1, ENC_BIG_ENDIAN); @@ -3964,7 +4049,7 @@ dissect_gtpv2_mm_context_eps_qq(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tre proto_tree_add_item(tree, hf_gtpv2_mm_context_old_kasme, tvb, offset, 32, ENC_NA); offset += 32; /* (s+33) to (s+64) old NH */ - if ((dword & 1) == 1) { + if (dword) { proto_tree_add_item(tree, hf_gtpv2_mm_context_old_nh, tvb, offset, 32, ENC_NA); offset += 32; } @@ -3994,11 +4079,11 @@ dissect_gtpv2_mm_context_eps_qq(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tre if (paging_len) { proto_tree_add_item(tree, hf_gtpv2_ue_radio_capability_for_paging_information, tvb, offset, paging_len, ENC_NA); - offset = +paging_len; + offset +=paging_len; } if (offset < (gint)length){ - proto_tree_add_expert_format(flag_tree, pinfo, &ei_gtpv2_ie_data_not_dissected, tvb, offset, -1, "The rest of the IE not dissected yet"); + proto_tree_add_expert_format(tree, pinfo, &ei_gtpv2_ie_data_not_dissected, tvb, offset, length - offset, "The rest of the IE not dissected yet"); } } @@ -5326,37 +5411,57 @@ dissect_gtpv2_rfsp_index(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree /* 8.78 CSG ID */ static void -dissect_gtpv2_csg_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, guint16 length, guint8 message_type _U_, guint8 instance _U_, session_args_t * args _U_) +dissect_gtpv2_csg_id(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length, guint8 message_type _U_, guint8 instance _U_, session_args_t * args _U_) { - proto_tree_add_expert(tree, pinfo, &ei_gtpv2_ie_data_not_dissected, tvb, 0, length); + proto_tree_add_bits_item(tree, hf_gtpv2_spare_bits, tvb, 0, 5, ENC_BIG_ENDIAN); + proto_tree_add_item(tree, hf_gtpv2_csg_id, tvb, 0, 4, ENC_BIG_ENDIAN); + if (length > 1) { + proto_tree_add_item(tree, hf_gtpv2_spare_bytes, tvb, 1, length-1, ENC_NA); + } } /* 8.79 CSG Membership Indication (CMI) */ static void -dissect_gtpv2_cmi(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, guint16 length, guint8 message_type _U_, guint8 instance _U_, session_args_t * args _U_) +dissect_gtpv2_cmi(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length, guint8 message_type _U_, guint8 instance _U_, session_args_t * args _U_) { - proto_tree_add_expert(tree, pinfo, &ei_gtpv2_ie_data_not_dissected, tvb, 0, length); + proto_tree_add_bits_item(tree, hf_gtpv2_spare_bits, tvb, 0, 7, ENC_BIG_ENDIAN); + proto_tree_add_item(tree, hf_gtpv2_cmi, tvb, 0, 1, ENC_BIG_ENDIAN); + if (length > 1) { + proto_tree_add_item(tree, hf_gtpv2_spare_bytes, tvb, 1, length-1, ENC_NA); + } } /* 8.80 Service indicator */ +static const value_string gtpv2_service_indicator_vals[] = { + { 1, "CS call indicator" }, + { 2, "SMS indicator" }, + { 0, NULL } +}; + static void -dissect_gtpv2_service_indicator(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, guint16 length, guint8 message_type _U_, guint8 instance _U_, session_args_t * args _U_) +dissect_gtpv2_service_indicator(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length _U_, guint8 message_type _U_, guint8 instance _U_, session_args_t * args _U_) { - proto_tree_add_expert(tree, pinfo, &ei_gtpv2_ie_data_not_dissected, tvb, 0, length); + proto_tree_add_item(tree, hf_gtpv2_service_indicator, tvb, 0, 1, ENC_BIG_ENDIAN); } /* 8.81 Detach Type */ +static const value_string gtpv2_detach_type_vals[] = { + { 1, "PS Detach" }, + { 2, "Combined PS/CS Detach" }, + { 0, NULL } +}; + static void -dissect_gtpv2_detach_type(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, guint16 length, guint8 message_type _U_, guint8 instance _U_, session_args_t * args _U_) +dissect_gtpv2_detach_type(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length _U_, guint8 message_type _U_, guint8 instance _U_, session_args_t * args _U_) { - proto_tree_add_expert(tree, pinfo, &ei_gtpv2_ie_data_not_dissected, tvb, 0, length); + proto_tree_add_item(tree, hf_gtpv2_detach_type, tvb, 0, 1, ENC_BIG_ENDIAN); } /* 8.82 Local Distinguished Name (LDN) */ static void -dissect_gtpv2_ldn(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, guint16 length, guint8 message_type _U_, guint8 instance _U_, session_args_t * args _U_) +dissect_gtpv2_ldn(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length, guint8 message_type _U_, guint8 instance _U_, session_args_t * args _U_) { - proto_tree_add_expert(tree, pinfo, &ei_gtpv2_ie_data_not_dissected, tvb, 0, length); + proto_tree_add_item(tree, hf_gtpv2_ldn, tvb, 0, length, ENC_ASCII|ENC_NA); } /* 8.83 Node Features */ @@ -6226,6 +6331,28 @@ dissect_gtpv2_paging_and_service_inf(tvbuff_t *tvb, packet_info *pinfo _U_, prot proto_tree_add_item(tree, hf_gtpv2_ppi_value, tvb, offset, 1, ENC_BIG_ENDIAN); } } +/* + * 8.118 Integer Number + */ +static void +dissect_gtpv2_integer_number(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length, guint8 message_type _U_, guint8 instance _U_, session_args_t * args _U_) +{ + int offset = 0; + /* The Integer Number value shall be encoded as further described below for the following information elements: + * Maximum Wait Time IE: the length shall be set to 2, i.e. the integer number value shall be encoded as a 16 bit unsigned integer. + * DL Buffering Suggested Packet Count IE: the length shall be set to 1 or 2; + * UE Usage Type IE: the length shall be set to 1, i.e. the integer number value shall be encoded as a 8 bit unsigned integer as specified in subclause 7.3.202 of 3GPP TS 29.272 [70]. + */ + if (length <= 4) { + /* Only handle up to 32 bits for now */ + proto_tree_add_item(tree, hf_gtpv2_integer_number_val, tvb, offset, length, ENC_BIG_ENDIAN); + } else { + /* value not handled, yet*/ + proto_tree_add_expert(tree, pinfo, &ei_gtpv2_int_size_not_handled, tvb, offset, length); + + } + +} typedef struct _gtpv2_ie { int ie_type; @@ -6368,7 +6495,7 @@ static const gtpv2_ie_t gtpv2_ies[] = { /* 185, 8.116 WLAN Offloadability Indication */ {GTPV2_IE_PAGING_AND_SERVICE_INF, dissect_gtpv2_paging_and_service_inf}, /* 186, 8.117 Paging and Service Information */ - /* 187, 8.118 Integer Number */ + { GTPV2_IE_INTEGER_NUMBER, dissect_gtpv2_integer_number }, /* 187, 8.118 Integer Number */ /* 188, 8.119 Millisecond Time Stamp */ /* 189, 8.120 Monitoring Event Information */ /* 190, 8.121 ECGI List */ @@ -7194,9 +7321,29 @@ void proto_register_gtpv2(void) FT_BOOLEAN, 8, NULL, 0x02, NULL, HFILL} }, {&hf_gtpv2_cpsr, - {"CPSR (CS to PS SRVCC indication)", "gtpv2.cpsr", + {"CPSR (CS to PS SRVCC Indication)", "gtpv2.cpsr", FT_BOOLEAN, 8, NULL, 0x01, NULL, HFILL} }, + {&hf_gtpv2_nsi, + {"NSI (NBIFOM Support Indication)", "gtpv2.nsi", + FT_BOOLEAN, 8, NULL, 0x80, NULL, HFILL} + }, + {&hf_gtpv2_uasi, + {"UASI (UE Available for Signalling Indication)", "gtpv2.uasi", + FT_BOOLEAN, 8, NULL, 0x40, NULL, HFILL} + }, + {&hf_gtpv2_dtci, + {"DTCI (Delay Tolerant Connection Indication)", "gtpv2.dtci", + FT_BOOLEAN, 8, NULL, 0x20, NULL, HFILL} + }, + {&hf_gtpv2_bdwi, + {"BDWI (Buffered DL Data Waiting Indication)", "gtpv2.bdwi", + FT_BOOLEAN, 8, NULL, 0x10, NULL, HFILL} + }, + {&hf_gtpv2_psci, + {"PSCI (Pending Subscription Change Indication)", "gtpv2.psci", + FT_BOOLEAN, 8, NULL, 0x08, NULL, HFILL} + }, {&hf_gtpv2_pcri, {"PCRI (P-CSCF Restoration Indication)", "gtpv2.pcri", FT_BOOLEAN, 8, NULL, 0x04, NULL, HFILL} @@ -7209,6 +7356,46 @@ void proto_register_gtpv2(void) {"AOPI (Associate OCI with PGW node's Identity)", "gtpv2.aopi", FT_BOOLEAN, 8, NULL, 0x01, NULL, HFILL} }, + {&hf_gtpv2_roaai, + {"ROAAI (Release Over Any Access Indication)", "gtpv2.roaai", + FT_BOOLEAN, 8, NULL, 0x80, NULL, HFILL} + }, + {&hf_gtpv2_epcosi, + {"EPCOSI (Extended PCO Support Indication)", "gtpv2.epcosi", + FT_BOOLEAN, 8, NULL, 0x40, NULL, HFILL} + }, + {&hf_gtpv2_cpopci, + {"CPOPCI (Control Plane Only PDN Connection Indication)", "gtpv2.cpopci", + FT_BOOLEAN, 8, NULL, 0x20, NULL, HFILL} + }, + {&hf_gtpv2_pmtsmi, + {"PMTSMI (Pending MT Short Message Indication)", "gtpv2.pmtsmi", + FT_BOOLEAN, 8, NULL, 0x10, NULL, HFILL} + }, + {&hf_gtpv2_s11tf, + {"S11TF (S11-U Tunnel Flag)", "gtpv2.s11tf", + FT_BOOLEAN, 8, NULL, 0x08, NULL, HFILL} + }, + {&hf_gtpv2_pnsi, + {"PNSI (Pending Network Initiated PDN Connection Signalling Indication)", "gtpv2.pnsi", + FT_BOOLEAN, 8, NULL, 0x04, NULL, HFILL} + }, + {&hf_gtpv2_unaccsi, + {"UNACCSI (UE Not Authorized Cause Code Support Indication)", "gtpv2.unaccsi", + FT_BOOLEAN, 8, NULL, 0x02, NULL, HFILL} + }, + {&hf_gtpv2_wpmsi, + {"WPMSI (WLCP PDN Connection Modification Support Indication)", "gtpv2.wpmsi", + FT_BOOLEAN, 8, NULL, 0x01, NULL, HFILL} + }, + {&hf_gtpv2_enbcrsi, + {"ENBCRSI (eNB Change Reporting Support Indication)", "gtpv2.enbcrsi", + FT_BOOLEAN, 8, NULL, 0x02, NULL, HFILL} + }, + {&hf_gtpv2_tspcmi, + {"TSPCMI (Triggering SGSN Initiated PDP Context Creation/Modification Indication)", "gtpv2.tspcmi", + FT_BOOLEAN, 8, NULL, 0x01, NULL, HFILL} + }, { &hf_gtpv2_pdn_type, {"PDN Type", "gtpv2.pdn_type", FT_UINT8, BASE_DEC, VALS(gtpv2_pdn_type_vals), 0x07, @@ -7666,16 +7853,16 @@ void proto_register_gtpv2(void) FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL} }, - /* Bit 1 - PVI (Pre-emption Vulnerability): See 3GPP TS 29.212[29], - * clause 5.3.47 Pre-emption-Vulnerability AVP. - * 5.3.47 Pre-emption-Vulnerability AVP + /* Bit 7 - PCI (Pre-emption Capability): See 3GPP TS 29.212[29], clause 5.3.46 Pre-emption-Capability AVP. + * clause 5.3.46 Pre-emption-Capability AVP. + * 5.3.46 Pre-emption-Capability AVP * The following values are defined: - * PRE-EMPTION_VULNERABILITY_ENABLED (0) - * PRE-EMPTION_VULNERABILITY_DISABLED (1) + * PRE-EMPTION_CAPABILITY_ENABLED (0) + * PRE-EMPTION_CAPABILITY_DISABLED (1) */ - {&hf_gtpv2_bearer_qos_pvi, - {"PVI (Pre-emption Vulnerability)", "gtpv2.bearer_qos_pvi", - FT_BOOLEAN, 8, TFS(&tfs_disabled_enabled), 0x01, + {&hf_gtpv2_bearer_qos_pci, + {"PCI (Pre-emption Capability)", "gtpv2.bearer_qos_pci", + FT_BOOLEAN, 8, TFS(&tfs_disabled_enabled), 0x40, NULL, HFILL} }, {&hf_gtpv2_bearer_qos_pl, @@ -7683,16 +7870,16 @@ void proto_register_gtpv2(void) FT_UINT8, BASE_DEC, NULL, 0x3c, NULL, HFILL} }, - /* Bit 7 - PCI (Pre-emption Capability): See 3GPP TS 29.212[29], clause 5.3.46 Pre-emption-Capability AVP. - * clause 5.3.46 Pre-emption-Capability AVP. - * 5.3.46 Pre-emption-Capability AVP + /* Bit 1 - PVI (Pre-emption Vulnerability): See 3GPP TS 29.212[29], + * clause 5.3.47 Pre-emption-Vulnerability AVP. + * 5.3.47 Pre-emption-Vulnerability AVP * The following values are defined: - * PRE-EMPTION_CAPABILITY_ENABLED (0) - * PRE-EMPTION_CAPABILITY_DISABLED (1) + * PRE-EMPTION_VULNERABILITY_ENABLED (0) + * PRE-EMPTION_VULNERABILITY_DISABLED (1) */ - {&hf_gtpv2_bearer_qos_pci, - {"PCI (Pre-emption Capability)", "gtpv2.bearer_qos_pci", - FT_BOOLEAN, 8, TFS(&tfs_disabled_enabled), 0x40, + {&hf_gtpv2_bearer_qos_pvi, + {"PVI (Pre-emption Vulnerability)", "gtpv2.bearer_qos_pvi", + FT_BOOLEAN, 8, TFS(&tfs_disabled_enabled), 0x01, NULL, HFILL} }, {&hf_gtpv2_bearer_qos_label_qci, @@ -8197,8 +8384,8 @@ void proto_register_gtpv2(void) }, { &hf_gtpv2_mm_context_osci, {"OSCI", "gtpv2.mm_context_osci", - FT_BOOLEAN, 8, NULL, 0x02, - NULL, HFILL} + FT_BOOLEAN, 8, NULL, 0x01, + "Old Security Context Indicator", HFILL} }, { &hf_gtpv2_mm_context_samb_ri, {"SAMB RI", "gtpv2.mm_context_samb_ri", @@ -8550,6 +8737,31 @@ void proto_register_gtpv2(void) FT_UINT24, BASE_DEC, NULL, 0xFFFF80, NULL, HFILL} }, + { &hf_gtpv2_csg_id, + {"CSG ID", "gtpv2.csg_id", + FT_UINT32, BASE_HEX, NULL, 0x07ffffff, + NULL, HFILL} + }, + { &hf_gtpv2_cmi, + {"CSG Membership Indication (CMI)", "gtpv2.cmi", + FT_BOOLEAN, 8, TFS(&tfs_no_yes), 0x01, + NULL, HFILL} + }, + { &hf_gtpv2_service_indicator, + {"Service Indicator", "gtpv2.service_indicator", + FT_UINT8, BASE_DEC, VALS(gtpv2_service_indicator_vals), 0, + NULL, HFILL} + }, + { &hf_gtpv2_detach_type, + {"Detach Type", "gtpv2.detach_type", + FT_UINT8, BASE_DEC, VALS(gtpv2_detach_type_vals), 0, + NULL, HFILL} + }, + { &hf_gtpv2_ldn, + {"Local Distinguished Name (LDN)", "gtpv2.ldn", + FT_STRING, BASE_NONE, NULL, 0, + NULL, HFILL} + }, { &hf_gtpv2_node_features_prn, {"PGW Restart Notification (PRN)", "gtpv2.node_features_prn", FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x01, @@ -8752,10 +8964,10 @@ void proto_register_gtpv2(void) { &hf_gtpv2_drx_parameter, { "DRX parameter", "gtpv2.drx_parameter", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }}, { &hf_gtpv2_mm_context_sres, { "SRES'", "gtpv2.mm_context_sres", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }}, { &hf_gtpv2_mm_context_kc, { "Kc'", "gtpv2.mm_context_kc", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }}, - { &hf_gtpv2_uplink_subscribed_ue_ambr, { "Uplink Subscribed UE AMBR", "gtpv2.uplink_subscribed_ue_ambr", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }}, - { &hf_gtpv2_downlink_subscribed_ue_ambr, { "Downlink Subscribed UE AMBR", "gtpv2.downlink_subscribed_ue_ambr", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }}, - { &hf_gtpv2_uplink_used_ue_ambr, { "Uplink Used UE AMBR", "gtpv2.uplink_used_ue_ambr", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }}, - { &hf_gtpv2_downlink_used_ue_ambr, { "Downlink Used UE AMBR", "gtpv2.downlink_used_ue_ambr", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }}, + { &hf_gtpv2_uplink_subscribed_ue_ambr, { "Uplink Subscribed UE AMBR", "gtpv2.uplink_subscribed_ue_ambr", FT_UINT32, BASE_DEC|BASE_UNIT_STRING, &units_kbps, 0x0, NULL, HFILL }}, + { &hf_gtpv2_downlink_subscribed_ue_ambr, { "Downlink Subscribed UE AMBR", "gtpv2.downlink_subscribed_ue_ambr", FT_UINT32, BASE_DEC|BASE_UNIT_STRING, &units_kbps, 0x0, NULL, HFILL }}, + { &hf_gtpv2_uplink_used_ue_ambr, { "Uplink Used UE AMBR", "gtpv2.uplink_used_ue_ambr", FT_UINT32, BASE_DEC|BASE_UNIT_STRING, &units_kbps, 0x0, NULL, HFILL }}, + { &hf_gtpv2_downlink_used_ue_ambr, { "Downlink Used UE AMBR", "gtpv2.downlink_used_ue_ambr", FT_UINT32, BASE_DEC|BASE_UNIT_STRING, &units_kbps, 0x0, NULL, HFILL }}, { &hf_gtpv2_voice_domain_and_ue_usage_setting, { "Voice Domain Preference and UE's Usage Setting", "gtpv2.voice_domain_and_ue_usage_setting", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }}, { &hf_gtpv2_ue_radio_capability_for_paging_information,{ "UE Radio Capability for Paging information", "gtpv2.UE_Radio_Capability_for_Paging_information", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_gtpv2_authentication_quadruplets, { "Authentication Quadruplets", "gtpv2.authentication_quadruplets", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }}, @@ -8800,6 +9012,7 @@ void proto_register_gtpv2(void) { &hf_gtpv2_twan_relay_id_ipv6,{ "Relay Identity", "gtpv2.twan_id.relay_id_ipv6", FT_IPv6, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_gtpv2_twan_circuit_id_len,{ "Relay Identity Type Length", "gtpv2.twan_id.relay_id_type_len", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_gtpv2_twan_circuit_id,{ "Circuit-ID", "gtpv2.twan_id.circuit_id", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL } }, + { &hf_gtpv2_integer_number_val,{ "Value", "gtpv2.integer_number_val", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } }, }; static gint *ett_gtpv2_array[] = { @@ -8870,6 +9083,7 @@ void proto_register_gtpv2(void) { &ei_gtpv2_mbms_session_duration_days, { "gtpv2.mbms_session_duration_days.invalid", PI_PROTOCOL, PI_WARN, "Days out of allowed range", EXPFILL }}, { &ei_gtpv2_mbms_session_duration_secs, { "gtpv2.mbms_session_duration_secs.unknown", PI_PROTOCOL, PI_WARN, "Seconds out of allowed range", EXPFILL }}, { &ei_gtpv2_ie, { "gtpv2.ie_type.reserved", PI_PROTOCOL, PI_WARN, "IE type Zero is Reserved and should not be used", EXPFILL }}, + { &ei_gtpv2_int_size_not_handled,{ "gtpv2.ie_type.int_size_not_handled", PI_PROTOCOL, PI_WARN, "Integer size not handled yet", EXPFILL } }, }; expert_module_t* expert_gtpv2; @@ -8888,7 +9102,7 @@ void proto_register_gtpv2(void) register_dissector("gtpv2", dissect_gtpv2, proto_gtpv2); /* Dissector table for private extensions */ - gtpv2_priv_ext_dissector_table = register_dissector_table("gtpv2.priv_ext", "GTPv2 PRIVATE EXT", proto_gtpv2, FT_UINT16, BASE_DEC, DISSECTOR_TABLE_NOT_ALLOW_DUPLICATE); + gtpv2_priv_ext_dissector_table = register_dissector_table("gtpv2.priv_ext", "GTPv2 PRIVATE EXT", proto_gtpv2, FT_UINT16, BASE_DEC); } void