Dissect more GTPV2 IE's

svn path=/trunk/; revision=33351
This commit is contained in:
Anders Broman 2010-06-28 15:31:41 +00:00
parent 1d8014fab4
commit 7ba4ce1983
8 changed files with 388 additions and 100 deletions

View File

@ -10,12 +10,14 @@ ALIGNED
#.EXPORTS
TargetRNC-ID
TargetRNC-ID_PDU
Service-Handover
IntegrityProtectionInformation
EncryptionInformation
SourceRNC-ToTargetRNC-TransparentContainer_PDU
#.PDU_NEW
TargetRNC-ID
RANAP-PDU
SourceRNC-ToTargetRNC-TransparentContainer

View File

@ -23,8 +23,10 @@
PROTOCOL_NAME = s1ap
DISSECTOR_FILES = \
packet-$(PROTOCOL_NAME).c
packet-$(PROTOCOL_NAME).c \
packet-$(PROTOCOL_NAME).h
EXPORT_FILES = $(PROTOCOL_NAME)-exp.cnf
EXT_ASN_FILE_LIST =
@ -40,6 +42,7 @@ EXTRA_DIST = \
Makefile.nmake \
$(ASN_FILE_LIST) \
packet-$(PROTOCOL_NAME)-template.c \
packet-$(PROTOCOL_NAME)-template.h \
$(PROTOCOL_NAME).cnf
SRC_FILES = \

View File

@ -8,7 +8,12 @@ PER
ALIGNED
#.END
#.EXPORTS
#.EXPORTS ONLY_VALS WS_VAR
CauseRadioNetwork
CauseTransport
CauseNas
CauseProtocol
CauseMisc
#.PDU_NEW
S1AP-PDU

View File

@ -1232,6 +1232,7 @@ DISSECTOR_INCLUDES = \
packet-rtse.h \
packet-rwall.h \
packet-rx.h \
packet-s1ap.h \
packet-s4406.h \
packet-sccp.h \
packet-scsi.h \

View File

@ -42,6 +42,8 @@
#include "packet-gsm_map.h"
#include "packet-e164.h"
#include "packet-e212.h"
#include "packet-s1ap.h"
#include "packet-ranap.h"
/*GTPv2 Message->GTP Header(SB)*/
static int proto_gtpv2 = -1;
@ -94,6 +96,7 @@ static gint ett_gtpv2 = -1;
static gint ett_gtpv2_flags = -1;
static gint ett_gtpv2_ie = -1;
static gint ett_gtpv2_bearer_ctx = -1;
static gint ett_gtpv2_PDN_conn = -1;
static int hf_gtpv2_selec_mode= -1;
@ -111,6 +114,7 @@ static int hf_gtpv2_ip_address_ipv4= -1;
static int hf_gtpv2_ip_address_ipv6= -1;
static int hf_gtpv2_mei= -1;
static int hf_gtpv2_address_digits = -1;
static int hf_gtpv2_ti = -1;
static int hf_gtpv2_bearer_qos_pvi= -1;
static int hf_gtpv2_bearer_qos_pl= -1;
@ -132,6 +136,14 @@ static int hf_gtpv2_charging_characteristic= -1;
static int hf_gtpv2_bearer_flag= -1;
static int hf_gtpv2_ue_time_zone= -1;
static int hf_gtpv2_ue_time_zone_dst= -1;
static int hf_gtpv2_container_type = -1;
static int hf_gtpv2_cause_type = -1;
static int hf_gtpv2_CauseRadioNetwork = -1;
static int hf_gtpv2_CauseTransport = -1;
static int hf_gtpv2_CauseNas = -1;
static int hf_gtpv2_CauseProtocol = -1;
static int hf_gtpv2_CauseMisc = -1;
static int hf_gtpv2_target_type = -1;
static int hf_gtpv2_node_type= -1;
static int hf_gtpv2_enterprise_id = -1;
@ -155,7 +167,8 @@ static int hf_gtpv2_bearer_control_mode= -1;
#define GTPv2_ULI_TAI_MASK 0x08
#define GTPv2_ULI_ECGI_MASK 0x10
static void dissect_gtpv2_ie_common(tvbuff_t * tvb, packet_info * pinfo _U_, proto_tree * tree, gint offset);
#define GTPV2_FORWARD_RELOCATION_REQ 133
static void dissect_gtpv2_ie_common(tvbuff_t * tvb, packet_info * pinfo _U_, proto_tree * tree, gint offset, guint8 message_type);
/*Message Types for GTPv2 (Refer Pg19 29.274) (SB)*/
static const value_string gtpv2_message_type_vals[] = {
@ -220,7 +233,11 @@ static const value_string gtpv2_message_type_vals[] = {
{150, "Detach Acknowledge"},
{151, "CS Paging Indication"},
{152, "RAN Information Relay"},
/* 153-159 For future use */
{153, "Alert MME Notification"},
{154, "Alert MME Acknowledge"},
{155, "UE Activity Notification"},
{156, "UE Activity Acknowledge"},
/* 157 to 159 For future use */
/* MME to SGW (S11) */
{160, "Create Forwarding Tunnel Request"},
{161, "Create Forwarding Tunnel Response"},
@ -253,7 +270,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 */
/* 245-255 Reserved for GTP-U TS 29.281 [13] */
/* 240-255 Reserved for GTP-U TS 29.281 [13] */
{0, NULL}
};
@ -286,13 +303,18 @@ static const value_string gtpv2_message_type_vals[] = {
#define GTPV2_BEARER_FLAG 97
#define GTPV2_PDN_TYPE 99
#define GTPV2_PTI 100
#define GTPV2_PDN_CONN 109
#define GTPV2_UE_TIME_ZONE 114
#define GTPV2_F_CONTAINER 118
#define GTPV2_F_CAUSE 119
#define GTPV2_TARGET_ID 121
#define GTPV2_APN_RESTRICTION 127
#define GTPV2_SELEC_MODE 128
#define GTPV2_BEARER_CONTROL_MODE 130
#define GTPV2_CNG_REP_ACT 131
#define GTPV2_NODE_TYPE 135
#define GTPV2_FQDN 136
#define GTPV2_TI 137
#define GTPV2_PRIVATE_EXT 255
#define SPARE 0X0
@ -399,7 +421,7 @@ static const value_string gtpv2_element_type_vals[] = {
/* Code to dissect IE's */
static void
dissect_gtpv2_unknown(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length _U_, guint8 instance _U_)
dissect_gtpv2_unknown(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_tree_add_text(tree, tvb, 0, length, "IE data not dissected yet");
@ -434,7 +456,7 @@ static gchar *imsi_to_str(const guint8 * ad)
}
static void
dissect_gtpv2_imsi(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length _U_, guint8 instance _U_)
dissect_gtpv2_imsi(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length _U_,guint8 message_type _U_, guint8 instance _U_)
{
int offset= 0;
guint8 imsi_val[8];
@ -514,7 +536,7 @@ static const value_string gtpv2_cause_vals[] = {
*/
static void
dissect_gtpv2_cause(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length _U_, guint8 instance _U_)
dissect_gtpv2_cause(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length _U_,guint8 message_type _U_, guint8 instance _U_)
{
int offset = 0;
/* Cause value octet 5 */
@ -527,7 +549,7 @@ dissect_gtpv2_cause(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, pro
* 8.5 Recovery (Restart Counter)
*/
static void
dissect_gtpv2_recovery(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length _U_, guint8 instance _U_)
dissect_gtpv2_recovery(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length _U_,guint8 message_type _U_, guint8 instance _U_)
{
int offset = 0;
proto_tree_add_item(tree, hf_gtpv2_rec, tvb, offset, 1, FALSE);
@ -537,7 +559,7 @@ dissect_gtpv2_recovery(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree,
* 8.6 Access Point Name (APN)
*/
static void
dissect_gtpv2_apn(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length _U_, guint8 instance _U_)
dissect_gtpv2_apn(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length _U_,guint8 message_type _U_, guint8 instance _U_)
{
int offset = 0;
guint8 *apn = NULL;
@ -567,7 +589,7 @@ dissect_gtpv2_apn(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto
* 8.7 Aggregate Maximum Bit Rate (AMBR) */
static void
dissect_gtpv2_ambr(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length _U_, guint8 instance _U_)
dissect_gtpv2_ambr(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length _U_,guint8 message_type _U_, guint8 instance _U_)
{
int offset = 0;
proto_tree_add_item(tree, hf_gtpv2_ambr_up, tvb, offset, 4, FALSE);
@ -579,7 +601,7 @@ dissect_gtpv2_ambr(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, prot
* 8.8 EPS Bearer ID (EBI)
*/
static void
dissect_gtpv2_ebi(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length _U_, guint8 instance _U_)
dissect_gtpv2_ebi(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length _U_,guint8 message_type _U_, guint8 instance _U_)
{
int offset = 0;
@ -590,7 +612,7 @@ dissect_gtpv2_ebi(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto
}
/* 8.9 IP Address */
static void
dissect_gtpv2_ip_address(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length _U_, guint8 instance _U_)
dissect_gtpv2_ip_address(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length _U_,guint8 message_type _U_, guint8 instance _U_)
{
int offset = 0;
if (length==4)
@ -619,7 +641,7 @@ static gchar *mei_to_str(const guint8 * ad)
}
static void
dissect_gtpv2_mei(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length _U_, guint8 instance _U_)
dissect_gtpv2_mei(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length _U_,guint8 message_type _U_, guint8 instance _U_)
{
int offset= 0;
guint8 mei_val[8];
@ -636,7 +658,7 @@ dissect_gtpv2_mei(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto
* Editor's note: MSISDN coding will be defined in TS 24.301.
*/
static void
dissect_gtpv2_msisdn(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length _U_, guint8 instance _U_)
dissect_gtpv2_msisdn(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length _U_,guint8 message_type _U_, guint8 instance _U_)
{
const char *digit_str;
@ -649,7 +671,7 @@ dissect_gtpv2_msisdn(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, pr
* 8.12 Indication
*/
static void
dissect_gtpv2_ind(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length _U_, guint8 instance _U_)
dissect_gtpv2_ind(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length _U_,guint8 message_type _U_, guint8 instance _U_)
{
int offset = 0;
proto_tree_add_item(tree, hf_gtpv2_daf, tvb, offset, 1, FALSE);
@ -678,7 +700,7 @@ dissect_gtpv2_ind(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto
* Dissected in packet-gsm_a_gm.c
*/
static void
dissect_gtpv2_pco(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length _U_, guint8 instance _U_)
dissect_gtpv2_pco(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length _U_,guint8 message_type _U_, guint8 instance _U_)
{
/* pinfo needed */
gsm_a_dtap_pinfo = pinfo;
@ -697,7 +719,7 @@ static const value_string gtpv2_pdn_type_vals[] = {
};
static void
dissect_gtpv2_paa(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length _U_, guint8 instance _U_)
dissect_gtpv2_paa(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length _U_,guint8 message_type _U_, guint8 instance _U_)
{
int offset = 0;
guint8 pdn_type;
@ -736,7 +758,7 @@ dissect_gtpv2_paa(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto
*/
static void
dissect_gtpv2_bearer_qos(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length _U_, guint8 instance _U_)
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_)
{
int offset = 0;
proto_tree_add_item(tree, hf_gtpv2_bearer_qos_pvi, tvb, offset, 1, FALSE);
@ -760,7 +782,7 @@ dissect_gtpv2_bearer_qos(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree
*/
static void
dissect_gtpv2_flow_qos(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length _U_, guint8 instance _U_)
dissect_gtpv2_flow_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_)
{
int offset = 0;
proto_tree_add_item(tree, hf_gtpv2_flow_qos_label_qci, tvb, offset, 1, FALSE);
@ -790,7 +812,7 @@ static const value_string gtpv2_rat_type_vals[] = {
};
static void
dissect_gtpv2_rat_type(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length _U_, guint8 instance _U_)
dissect_gtpv2_rat_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_)
{
proto_tree_add_item(tree, hf_gtpv2_rat_type, tvb, 0, 1, FALSE);
}
@ -799,7 +821,7 @@ dissect_gtpv2_rat_type(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree,
* 8.18 Serving Network
*/
static void
dissect_gtpv2_serv_net(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length _U_, guint8 instance _U_)
dissect_gtpv2_serv_net(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length _U_,guint8 message_type _U_, guint8 instance _U_)
{
dissect_e212_mcc_mnc(tvb, pinfo, tree, 0, TRUE);
}
@ -809,7 +831,7 @@ dissect_gtpv2_serv_net(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree,
*/
static void
dissect_gtpv2_bearer_tft(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length _U_, guint8 instance _U_)
dissect_gtpv2_bearer_tft(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length _U_,guint8 message_type _U_, guint8 instance _U_)
{
/* The detailed coding of Traffic Aggregate
* Description is specified in 3GPP TS 24.008 [5] ,
@ -822,7 +844,7 @@ dissect_gtpv2_bearer_tft(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree
/* 8.20 Traffic Aggregate Description (TAD)
*/
static void
dissect_gtpv2_tad(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length _U_, guint8 instance _U_)
dissect_gtpv2_tad(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length _U_,guint8 message_type _U_, guint8 instance _U_)
{
/* The detailed coding of Traffic Aggregate
* Description is specified in 3GPP TS 24.008 [5] ,
@ -922,7 +944,7 @@ decode_gtpv2_uli(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_
}
static void
dissect_gtpv2_uli(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length _U_, guint8 instance _U_)
dissect_gtpv2_uli(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length _U_,guint8 message_type _U_, guint8 instance _U_)
{
int offset = 0;
guint flags;
@ -1026,7 +1048,7 @@ static const value_string gtpv2_f_teid_interface_type_vals[] = {
{0, NULL}
};
static void
dissect_gtpv2_f_teid(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length _U_, guint8 instance _U_)
dissect_gtpv2_f_teid(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length _U_,guint8 message_type _U_, guint8 instance _U_)
{
int offset = 0;
guint8 v4, v6;
@ -1059,7 +1081,7 @@ dissect_gtpv2_f_teid(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, pr
*/
static void
dissect_gtpv2_g_cn_id(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length _U_, guint8 instance _U_)
dissect_gtpv2_g_cn_id(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_tree_add_text(tree, tvb, 0, length, "IE data not dissected yet");
}
@ -1071,7 +1093,7 @@ dissect_gtpv2_g_cn_id(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, p
*/
static void
dissect_gtpv2_delay_value(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length _U_, guint8 instance _U_)
dissect_gtpv2_delay_value(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length _U_, guint8 message_type _U_, guint8 instance _U_)
{
int offset = 0;
@ -1083,19 +1105,19 @@ dissect_gtpv2_delay_value(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tre
/*8.28 Bearer Context (grouped IE) */
static void
dissect_gtpv2_bearer_ctx(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree _U_, proto_item *item _U_, guint16 length _U_, guint8 instance _U_)
dissect_gtpv2_bearer_ctx(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree _U_, proto_item *item _U_, guint16 length _U_, guint8 message_type _U_, guint8 instance _U_)
{
int offset= 0;
proto_tree *grouped_tree;
proto_item_append_text(item, "[Grouped IE]");
grouped_tree = proto_item_add_subtree(item, ett_gtpv2_bearer_ctx);
dissect_gtpv2_ie_common(tvb, pinfo, grouped_tree, offset);
dissect_gtpv2_ie_common(tvb, pinfo, grouped_tree, offset, message_type);
}
/* 8.29 Charging ID */
static void
dissect_gtpv2_charging_id(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length _U_, guint8 instance _U_)
dissect_gtpv2_charging_id(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length _U_, guint8 message_type _U_, guint8 instance _U_)
{
int offset = 0;
@ -1114,7 +1136,7 @@ dissect_gtpv2_charging_id(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tre
*/
static void
dissect_gtpv2_charging_characteristic(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length _U_, guint8 instance _U_)
dissect_gtpv2_charging_characteristic(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length _U_,guint8 message_type _U_, guint8 instance _U_)
{
int offset = 0;
@ -1129,7 +1151,7 @@ dissect_gtpv2_charging_characteristic(tvbuff_t *tvb, packet_info *pinfo _U_, pro
}
/* 8.30 Bearer Flag */
static void
dissect_gtpv2_bearer_flag(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length _U_, guint8 instance _U_)
dissect_gtpv2_bearer_flag(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length _U_,guint8 message_type _U_, guint8 instance _U_)
{
int offset = 0;
@ -1140,7 +1162,7 @@ dissect_gtpv2_bearer_flag(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tre
}
/* 8.34 PDN Type */
static void
dissect_gtpv2_pdn_type(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length _U_, guint8 instance _U_)
dissect_gtpv2_pdn_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_)
{
int offset = 0;
@ -1160,11 +1182,11 @@ dissect_gtpv2_pdn_type(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree,
/* 8.31 Trace Information
* 8.33 Paging Cause
*/
*/
/* 8.35 Procedure Transaction ID (PTI) */
static void
dissect_gtpv2_pti(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length _U_, guint8 instance _U_)
dissect_gtpv2_pti(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_tree_add_item(tree, hf_gtpv2_pti, tvb, 0, 1, FALSE);
}
@ -1172,7 +1194,21 @@ dissect_gtpv2_pti(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto
* 8.36 DRX Parameter
* 8.37 UE Network Capability
* 8.38 MM Context
*/
/*
* 8.39 PDN Connection (grouped IE)
*/
static void
dissect_gtpv2_PDN_conn(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length _U_,guint8 message_type _U_, guint8 instance _U_)
{
int offset= 0;
proto_tree *grouped_tree;
proto_item_append_text(item, "[Grouped IE]");
grouped_tree = proto_item_add_subtree(item, ett_gtpv2_PDN_conn);
dissect_gtpv2_ie_common(tvb, pinfo, grouped_tree, offset, message_type);
}
/*
* 8.40 PDU Numbers
* 8.41 Packet TMSI (P-TMSI)
* 8.42 P-TMSI Signature
@ -1189,7 +1225,7 @@ static const value_string gtpv2_ue_time_zone_dst_vals[] = {
{0, NULL}
};
static void
dissect_gtpv2_ue_time_zone(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length _U_, guint8 instance _U_)
dissect_gtpv2_ue_time_zone(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length _U_,guint8 message_type _U_, guint8 instance _U_)
{
int offset = 0;
@ -1201,13 +1237,179 @@ dissect_gtpv2_ue_time_zone(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tr
}
/* 8.45 Trace Reference
* 8.56 Complete Request Message
* 8.46 Complete Request Message
* 8.47 GUTI
*/
/*
* 8.48 Fully Qualified Container (F-Container)
*/
static const value_string gtpv2_container_type_vals[] = {
{1, "UTRAN transparent container"},
{2, "BSS container"},
{3, "E-UTRAN transparent container"},
{0, NULL}
};
static void
dissect_gtpv2_F_container(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length _U_,guint8 message_type _U_, guint8 instance _U_)
{
int offset = 0;
/* Octets 8 7 6 5 4 3 2 1
* 5 Spare | Container Type
*/
proto_tree_add_item(tree, hf_gtpv2_container_type, tvb, offset, 1, FALSE);
offset++;
proto_tree_add_text(tree, tvb, offset, length-1, "Not dissected yet");
}
/*
* 8.49 Fully Qualified Cause (F-Cause)
*/
static const value_string gtpv2_cause_type_vals[] = {
{0, "Radio Network Layer"},
{1, "Transport Layer"},
{2, "NAS"},
{3, "Protocol"},
{4, "Miscellaneous"},
{5, "<spare>"},
{6, "<spare>"},
{7, "<spare>"},
{8, "<spare>"},
{9, "<spare>"},
{10, "<spare>"},
{11, "<spare>"},
{12, "<spare>"},
{13, "<spare>"},
{14, "<spare>"},
{15, "<spare>"},
{0, NULL}
};
value_string_ext gtpv2_cause_type_vals_ext = VALUE_STRING_EXT_INIT(gtpv2_cause_type_vals);
static void
dissect_gtpv2_F_cause(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length _U_,guint8 message_type _U_, guint8 instance _U_)
{
int offset = 0;
guint8 cause_type;
/* The value of Instance field of the F-Cause IE in a GTPv2 message shall indicate
* whether the F-Cause field contains RANAP Cause, BSSGP Cause or RAN Cause.
* If the F-Cause field contains RAN Cause, the Cause Type field shall contain
* the RAN cause subcategory as specified in 3GPP TS 36.413 [10] and it shall be
* encoded as in Table 8.49-1.
* If the F-Cause field contains BSSGP Cause or RANAP Cause,
* the Cause Type field shall be ignored by the receiver.
*/
if(message_type == GTPV2_FORWARD_RELOCATION_REQ){
switch(instance){
case 0:
proto_item_append_text(item, "[RAN Cause]");
proto_tree_add_item(tree, hf_gtpv2_cause_type, tvb, offset, 1, FALSE);
cause_type = tvb_get_guint8(tvb,offset);
offset++;
switch(cause_type){
case 0:
/* CauseRadioNetwork */
proto_tree_add_item(tree, hf_gtpv2_CauseRadioNetwork, tvb, offset, 1, FALSE);
break;
case 1:
/* CauseTransport */
proto_tree_add_item(tree, hf_gtpv2_CauseTransport, tvb, offset, 1, FALSE);
break;
case 2:
/* CauseNas */
proto_tree_add_item(tree, hf_gtpv2_CauseNas, tvb, offset, 1, FALSE);
break;
case 3:
/* CauseProtocol */
proto_tree_add_item(tree, hf_gtpv2_CauseProtocol, tvb, offset, 1, FALSE);
break;
case 4:
/* CauseMisc */
proto_tree_add_item(tree, hf_gtpv2_CauseMisc, tvb, offset, 1, FALSE);
break;
default:
break;
}
return;
break;
case 1:
proto_item_append_text(item, "[RANAP Cause]");
break;
case 2:
proto_item_append_text(item, "[BSSGP Cause]");
break;
default:
break;
}
}
proto_tree_add_text(tree, tvb, offset, length-offset, "Not dissected yet");
}
/*
* 8.50 Selected PLMN ID
*/
/*
* 8.51 Target Identification
* 8.52 NSAPI
*/
static const value_string gtpv2_target_type_vals[] = {
{0, "RNC ID"},
{1, "Macro eNodeB ID"},
{2, "Cell Identifier"},
{3, "Home eNodeB ID"},
{0, NULL}
};
value_string_ext gtpv2_target_type_vals_ext = VALUE_STRING_EXT_INIT(gtpv2_target_type_vals);
static void
dissect_gtpv2_target_id(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length _U_,guint8 message_type _U_, guint8 instance _U_)
{
tvbuff_t *tvb_new;
int offset = 0;
guint8 target_type;
proto_tree_add_item(tree, hf_gtpv2_target_type, tvb, 0, 1, FALSE);
target_type = tvb_get_guint8(tvb,offset);
offset++;
switch(target_type){
case 0:
/*RNC ID*/
tvb_new = tvb_new_subset(tvb, offset, length-1, length-1);
dissect_ranap_TargetRNC_ID_PDU(tvb_new, pinfo, tree);
return;
break;
case 1:
/*Macro eNodeB ID*/
tvb_new = tvb_new_subset(tvb, offset, length-1, length-1);
dissect_e212_mcc_mnc(tvb_new, pinfo, tree, 0, TRUE);
offset+=3;
/* The Macro eNodeB ID consists of 20 bits.
* Bit 4 of Octet 4 is the most significant bit and bit 1 of Octet 6 is the least significant bit.
*/
proto_tree_add_text(tree, tvb, offset, length-offset, "Not dissected yet");
return;
case 2:
/* Cell Identifier */
case 3:
/* Home eNodeB ID */
default:
break;
}
proto_tree_add_text(tree, tvb, offset, length-offset, "Not dissected yet");
}
/*
* 8.52 Void
* 8.53 Packet Flow ID
* 8.54 RAB Context
* 8.55 Source RNC PDCP context info
@ -1216,7 +1418,7 @@ dissect_gtpv2_ue_time_zone(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tr
/*8.57 APN Restriction */
static void
dissect_gtpv2_apn_rest(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length _U_, guint8 instance _U_)
dissect_gtpv2_apn_rest(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_tree_add_item(tree, hf_gtpv2_apn_rest, tvb, 0, 1, FALSE);
}
@ -1231,7 +1433,7 @@ static const value_string gtpv2_selec_mode_vals[] = {
};
static void
dissect_gtpv2_selec_mode(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length _U_, guint8 instance _U_)
dissect_gtpv2_selec_mode(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length _U_,guint8 message_type _U_, guint8 instance _U_)
{
int offset=0;
@ -1250,7 +1452,7 @@ dissect_gtpv2_selec_mode(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree
};
static void
dissect_gtpv2_bearer_control_mode(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length _U_, guint8 instance _U_)
dissect_gtpv2_bearer_control_mode(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_tree_add_item(tree, hf_gtpv2_bearer_control_mode, tvb, 0, 1, FALSE);
}
@ -1265,7 +1467,7 @@ static const value_string gtpv2_cng_rep_act_vals[] = {
};
static void
dissect_gtpv2_cng_rep_act(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length _U_, guint8 instance _U_)
dissect_gtpv2_cng_rep_act(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_tree_add_item(tree, hf_gtpv2_cng_rep_act, tvb, 0, 1, FALSE);
@ -1284,7 +1486,7 @@ static const value_string gtpv2_node_type_vals[] = {
};
static void
dissect_gtpv2_node_type(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length _U_, guint8 instance _U_)
dissect_gtpv2_node_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_)
{
proto_tree_add_item(tree, hf_gtpv2_node_type, tvb, 0, 1, FALSE);
@ -1294,7 +1496,7 @@ dissect_gtpv2_node_type(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree,
* 8.66 Fully Qualified Domain Name (FQDN)
*/
static void
dissect_gtpv2_fqdn(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length _U_, guint8 instance _U_)
dissect_gtpv2_fqdn(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length _U_,guint8 message_type _U_, guint8 instance _U_)
{
/* The FQDN field encoding shall be identical to the encoding of
* a FQDN within a DNS message of section 3.1 of IETF
@ -1307,7 +1509,7 @@ dissect_gtpv2_fqdn(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, prot
* 8.67 Private Extension
*/
static void
dissect_private_ext(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length _U_, guint8 instance _U_)
dissect_gtpv2_private_ext(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length _U_,guint8 message_type _U_, guint8 instance _U_)
{
int offset = 0;
@ -1317,11 +1519,21 @@ dissect_private_ext(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, pro
proto_tree_add_text(tree, tvb, offset, length-2, "Proprietary value");
}
/*
* 8.68 Transaction Identifier (TI)
*/
static void
dissect_gtpv2_ti(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length, guint8 message_type _U_, guint8 instance _U_)
{
/* 5 to (n+4) Transaction Identifier */
proto_tree_add_item(tree, hf_gtpv2_ti, tvb, 0, length, FALSE);
}
typedef struct _gtpv2_ie {
int ie_type;
void (*decode) (tvbuff_t *, packet_info *, proto_tree *, proto_item *, guint16, guint8);
void (*decode) (tvbuff_t *, packet_info *, proto_tree *, proto_item *, guint16, guint8, guint8);
} gtpv2_ie_t;
static const gtpv2_ie_t gtpv2_ies[] = {
@ -1355,17 +1567,22 @@ static const gtpv2_ie_t gtpv2_ies[] = {
dissect_gtpv2_charging_characteristic},
{GTPV2_BEARER_FLAG, dissect_gtpv2_bearer_flag}, /* 97, Bearer Flag */
{GTPV2_PDN_TYPE, dissect_gtpv2_pdn_type}, /* 99, PDN Type */
{GTPV2_PTI, dissect_gtpv2_pti}, /* 100 Procedure Transaction Id */
{GTPV2_PTI, dissect_gtpv2_pti}, /* 100, Procedure Transaction Id */
{GTPV2_PDN_CONN, dissect_gtpv2_PDN_conn}, /* 109, PDN Connection */
{GTPV2_UE_TIME_ZONE, dissect_gtpv2_ue_time_zone}, /* 114, UE Time Zone */
{GTPV2_APN_RESTRICTION, /* 127, APN Restriction */
dissect_gtpv2_apn_rest},
{GTPV2_F_CONTAINER, dissect_gtpv2_F_container}, /* 118, Fully Qualified Container (F-Container) */
{GTPV2_F_CAUSE, dissect_gtpv2_F_cause}, /* 119, Fully Qualified Cause (F-Cause) */
{GTPV2_TARGET_ID, dissect_gtpv2_target_id}, /* 121, Target Identification */
{GTPV2_APN_RESTRICTION, dissect_gtpv2_apn_rest}, /* 127, APN Restriction */
{GTPV2_SELEC_MODE,dissect_gtpv2_selec_mode}, /* 128 Selection Mode */
{GTPV2_BEARER_CONTROL_MODE,dissect_gtpv2_bearer_control_mode}, /* 130 Bearer Control Mode*/
{GTPV2_CNG_REP_ACT ,dissect_gtpv2_cng_rep_act}, /* 131 Change Reporting Action 8.61 */
{GTPV2_NODE_TYPE ,dissect_gtpv2_node_type}, /* 135 Node Type 8.65 */
{GTPV2_FQDN, dissect_gtpv2_fqdn}, /* 136 8.66 Fully Qualified Domain Name (FQDN) */
{GTPV2_TI, dissect_gtpv2_ti}, /* 137 8.68 Transaction Identifier (TI) */
/* 137-254 Spare. For future use. FFS */
{GTPV2_PRIVATE_EXT,dissect_private_ext},
{GTPV2_PRIVATE_EXT,dissect_gtpv2_private_ext},
{0, dissect_gtpv2_unknown}
@ -1374,7 +1591,7 @@ static const gtpv2_ie_t gtpv2_ies[] = {
static void
dissect_gtpv2_ie_common(tvbuff_t * tvb, packet_info * pinfo _U_, proto_tree * tree, gint offset)
dissect_gtpv2_ie_common(tvbuff_t * tvb, packet_info * pinfo _U_, proto_tree * tree, gint offset, guint8 message_type)
{
proto_tree *ie_tree;
proto_item *ti;
@ -1422,7 +1639,7 @@ dissect_gtpv2_ie_common(tvbuff_t * tvb, packet_info * pinfo _U_, proto_tree * tr
}
/* Just give the IE dissector the IE */
ie_tvb = tvb_new_subset(tvb, offset, length, length);
(*gtpv2_ies[i].decode) (ie_tvb, pinfo , ie_tree, ti, length, instance);
(*gtpv2_ies[i].decode) (ie_tvb, pinfo , ie_tree, ti, length, message_type, instance);
}
offset = offset + length;
@ -1497,7 +1714,7 @@ dissect_gtpv2(tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree)
proto_tree_add_item(gtpv2_tree, hf_gtpv2_spare, tvb, offset, 2, FALSE);
offset+=2;
dissect_gtpv2_ie_common(tvb, pinfo, gtpv2_tree, offset);
dissect_gtpv2_ie_common(tvb, pinfo, gtpv2_tree, offset, message_type);
}
@ -1894,6 +2111,46 @@ void proto_register_gtpv2(void)
{"Daylight Saving Time","gtpv2.ue_time_zone_dst",
FT_UINT8, BASE_DEC, VALS(gtpv2_ue_time_zone_dst_vals),0x03,
NULL, HFILL}
},
{ &hf_gtpv2_container_type,
{"Container Type","gtpv2.container_type",
FT_UINT8, BASE_DEC, VALS(gtpv2_container_type_vals),0x0f,
NULL, HFILL}
},
{ &hf_gtpv2_cause_type,
{"Cause Type","gtpv2.cause_type",
FT_UINT8, BASE_DEC|BASE_EXT_STRING, VALS(&gtpv2_cause_type_vals_ext),0x0f,
NULL, HFILL}
},
{ &hf_gtpv2_CauseRadioNetwork,
{"Radio Network Layer Cause","gtpv2.CauseRadioNetwork",
FT_UINT8, BASE_DEC, VALS(&s1ap_CauseRadioNetwork_vals),0x0,
NULL, HFILL}
},
{ &hf_gtpv2_CauseTransport,
{"Transport Layer Cause","gtpv2.CauseTransport",
FT_UINT8, BASE_DEC, VALS(&s1ap_CauseTransport_vals),0x0,
NULL, HFILL}
},
{ &hf_gtpv2_CauseNas,
{"NAS Cause","gtpv2.CauseNas",
FT_UINT8, BASE_DEC, VALS(&s1ap_CauseNas_vals),0x0,
NULL, HFILL}
},
{ &hf_gtpv2_CauseMisc,
{"Miscellaneous Cause","gtpv2.CauseMisc",
FT_UINT8, BASE_DEC, VALS(&s1ap_CauseMisc_vals),0x0,
NULL, HFILL}
},
{ &hf_gtpv2_target_type,
{"Target Type","gtpv2.target_type",
FT_UINT8, BASE_DEC|BASE_EXT_STRING, VALS(&gtpv2_target_type_vals_ext),0x0,
NULL, HFILL}
},
{ &hf_gtpv2_CauseProtocol,
{"Protocol Cause","gtpv2.CauseProtocol",
FT_UINT8, BASE_DEC, VALS(&s1ap_CauseProtocol_vals),0x0,
NULL, HFILL}
},
{&hf_gtpv2_apn_rest,
{"APN Restriction", "gtpv2.apn_rest",
@ -1929,6 +2186,11 @@ void proto_register_gtpv2(void)
{ "Address digits", "gtpv2.address_digits",
FT_STRING, BASE_NONE, NULL, 0,
NULL, HFILL }
},
{ &hf_gtpv2_ti,
{"Transaction Identifier", "gtpv2.ti",
FT_BYTES, BASE_NONE, NULL, 0x0,
NULL, HFILL}
},
};
@ -1938,6 +2200,7 @@ void proto_register_gtpv2(void)
&ett_gtpv2_flags,
&ett_gtpv2_ie,
&ett_gtpv2_bearer_ctx,
&ett_gtpv2_PDN_conn,
};
proto_gtpv2 = proto_register_protocol("GPRS Tunneling Protocol V2", "GTPv2", "gtpv2");

View File

@ -525,6 +525,7 @@ static int hf_ranap_SRVCC_Operation_Possible_PDU = -1; /* SRVCC_Operation_Possi
static int hf_ranap_Target_ToSource_TransparentContainer_PDU = -1; /* Target_ToSource_TransparentContainer */
static int hf_ranap_TargetBSS_ToSourceBSS_TransparentContainer_PDU = -1; /* TargetBSS_ToSourceBSS_TransparentContainer */
static int hf_ranap_TargetID_PDU = -1; /* TargetID */
static int hf_ranap_ranap_TargetRNC_ID_PDU = -1; /* TargetRNC_ID */
static int hf_ranap_TargetRNC_ToSourceRNC_TransparentContainer_PDU = -1; /* TargetRNC_ToSourceRNC_TransparentContainer */
static int hf_ranap_TemporaryUE_ID_PDU = -1; /* TemporaryUE_ID */
static int hf_ranap_TimeToMBMSDataTransfer_PDU = -1; /* TimeToMBMSDataTransfer */
@ -1520,7 +1521,7 @@ dissect_ranap_ProcedureCode(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx
offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
0U, 255U, &ProcedureCode, FALSE);
#line 82 "ranap.cnf"
#line 84 "ranap.cnf"
col_add_fstr(actx->pinfo->cinfo, COL_INFO, "%s ",
val_to_str(ProcedureCode, ranap_ProcedureCode_vals,
"unknown message"));
@ -1778,7 +1779,7 @@ dissect_ranap_ProtocolIE_ID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx
offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
0U, 65535U, &ProtocolIE_ID, FALSE);
#line 66 "ranap.cnf"
#line 68 "ranap.cnf"
if (tree) {
proto_item_append_text(proto_item_get_parent_nth(actx->created_item, 2), ": %s", val_to_str(ProtocolIE_ID, VALS(ranap_ProtocolIE_ID_vals), "unknown (%d)"));
}
@ -1900,7 +1901,7 @@ static const per_sequence_t ProtocolIE_ContainerList_sequence_of[1] = {
static int
dissect_ranap_ProtocolIE_ContainerList(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 106 "ranap.cnf"
#line 108 "ranap.cnf"
static const asn1_par_def_t ProtocolIE_ContainerList_pars[] = {
{ "lowerBound", ASN1_PAR_INTEGER },
{ "upperBound", ASN1_PAR_INTEGER },
@ -1922,7 +1923,7 @@ static const per_sequence_t ProtocolIE_ContainerPairList_sequence_of[1] = {
static int
dissect_ranap_ProtocolIE_ContainerPairList(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 122 "ranap.cnf"
#line 124 "ranap.cnf"
static const asn1_par_def_t ProtocolIE_ContainerPairList_pars[] = {
{ "lowerBound", ASN1_PAR_INTEGER },
{ "upperBound", ASN1_PAR_INTEGER },
@ -2491,7 +2492,7 @@ dissect_ranap_APN(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto
static int
dissect_ranap_PLMNidentity(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 262 "ranap.cnf"
#line 264 "ranap.cnf"
tvbuff_t *parameter_tvb=NULL;
offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
@ -4251,7 +4252,7 @@ dissect_ranap_GlobalRNC_ID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _
static int
dissect_ranap_GTP_TEI(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 303 "ranap.cnf"
#line 305 "ranap.cnf"
tvbuff_t *parameter_tvb=NULL;
int saved_hf;
@ -4284,7 +4285,7 @@ dissect_ranap_HS_DSCH_MAC_d_Flow_ID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_
static int
dissect_ranap_IMSI(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 179 "ranap.cnf"
#line 181 "ranap.cnf"
tvbuff_t* imsi_tvb;
const char *digit_str;
@ -4993,7 +4994,7 @@ dissect_ranap_LocationRelatedDataRequestTypeSpecificToGERANIuMode(tvbuff_t *tvb
static int
dissect_ranap_L3_Information(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 250 "ranap.cnf"
#line 252 "ranap.cnf"
tvbuff_t *l3_info_tvb=NULL;
offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
@ -5165,7 +5166,7 @@ dissect_ranap_MBMSSessionRepetitionNumber(tvbuff_t *tvb _U_, int offset _U_, asn
static int
dissect_ranap_NAS_PDU(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 202 "ranap.cnf"
#line 204 "ranap.cnf"
tvbuff_t *nas_pdu_tvb=NULL;
offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
@ -5203,7 +5204,7 @@ dissect_ranap_NAS_SynchronisationIndicator(tvbuff_t *tvb _U_, int offset _U_, as
static int
dissect_ranap_NewBSS_To_OldBSS_Information(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 242 "ranap.cnf"
#line 244 "ranap.cnf"
tvbuff_t *bss_info_tvb=NULL;
offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
@ -5256,7 +5257,7 @@ dissect_ranap_NumberOfSteps(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx
static int
dissect_ranap_OldBSS_ToNewBSS_Information(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 234 "ranap.cnf"
#line 236 "ranap.cnf"
tvbuff_t *bss_info_tvb=NULL;
offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
@ -6242,7 +6243,7 @@ dissect_ranap_ResponseTime(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _
static int
dissect_ranap_RRC_Container(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 211 "ranap.cnf"
#line 213 "ranap.cnf"
tvbuff_t *rrc_message_tvb=NULL;
offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
@ -6347,7 +6348,7 @@ dissect_ranap_Service_Handover(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *ac
static int
dissect_ranap_Source_ToTarget_TransparentContainer(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 329 "ranap.cnf"
#line 331 "ranap.cnf"
dissect_ranap_SourceRNC_ToTargetRNC_TransparentContainer(tvb , offset, actx ,tree , hf_ranap_ranap_SourceRNC_ToTargetRNC_TransparentContainer_PDU );
@ -6424,7 +6425,7 @@ static const per_sequence_t SourceRNC_ToTargetRNC_TransparentContainer_sequence[
static int
dissect_ranap_SourceRNC_ToTargetRNC_TransparentContainer(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 315 "ranap.cnf"
#line 317 "ranap.cnf"
/* If SourceRNC-ToTargetRNC-TransparentContainer is called trough
dissect_ranap_SourceRNC_ToTargetRNC_TransparentContainer_PDU
ProtocolIE_ID may be unset
@ -6550,7 +6551,7 @@ dissect_ranap_SRVCC_Operation_Possible(tvbuff_t *tvb _U_, int offset _U_, asn1_c
static int
dissect_ranap_Target_ToSource_TransparentContainer(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 339 "ranap.cnf"
#line 341 "ranap.cnf"
dissect_ranap_TargetRNC_ToSourceRNC_TransparentContainer(tvb , offset, actx ,tree , hf_ranap_TargetRNC_ToSourceRNC_TransparentContainer_PDU );
@ -6735,7 +6736,7 @@ dissect_ranap_UnsuccessfullyTransmittedDataVolume(tvbuff_t *tvb _U_, int offset
static int
dissect_ranap_TransportLayerAddress(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 281 "ranap.cnf"
#line 283 "ranap.cnf"
tvbuff_t *parameter_tvb=NULL;
proto_tree *subtree;
gint tvb_len;
@ -7120,7 +7121,7 @@ dissect_ranap_VerticalAccuracyCode(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t
static int
dissect_ranap_RAB_IE_ContainerList(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 132 "ranap.cnf"
#line 134 "ranap.cnf"
asn1_stack_frame_push(actx, "ProtocolIE-ContainerList");
asn1_param_push_integer(actx, 1);
asn1_param_push_integer(actx, maxNrOfRABs);
@ -7136,7 +7137,7 @@ dissect_ranap_RAB_IE_ContainerList(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t
static int
dissect_ranap_RAB_IE_ContainerPairList(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 140 "ranap.cnf"
#line 142 "ranap.cnf"
asn1_stack_frame_push(actx, "ProtocolIE-ContainerPairList");
asn1_param_push_integer(actx, 1);
asn1_param_push_integer(actx, maxNrOfRABs);
@ -7152,7 +7153,7 @@ dissect_ranap_RAB_IE_ContainerPairList(tvbuff_t *tvb _U_, int offset _U_, asn1_c
static int
dissect_ranap_IuSigConId_IE_ContainerList(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 157 "ranap.cnf"
#line 159 "ranap.cnf"
asn1_stack_frame_push(actx, "ProtocolIE-ContainerList");
asn1_param_push_integer(actx, 1);
asn1_param_push_integer(actx, maxNrOfIuSigConIds);
@ -7168,7 +7169,7 @@ dissect_ranap_IuSigConId_IE_ContainerList(tvbuff_t *tvb _U_, int offset _U_, asn
static int
dissect_ranap_DirectTransfer_IE_ContainerList(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 165 "ranap.cnf"
#line 167 "ranap.cnf"
asn1_stack_frame_push(actx, "ProtocolIE-ContainerList");
asn1_param_push_integer(actx, 1);
asn1_param_push_integer(actx, maxNrOfDTs);
@ -10514,6 +10515,14 @@ static int dissect_TargetID_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto
offset += 7; offset >>= 3;
return offset;
}
int dissect_ranap_TargetRNC_ID_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
int offset = 0;
asn1_ctx_t asn1_ctx;
asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo);
offset = dissect_ranap_TargetRNC_ID(tvb, offset, &asn1_ctx, tree, hf_ranap_ranap_TargetRNC_ID_PDU);
offset += 7; offset >>= 3;
return offset;
}
static int dissect_TargetRNC_ToSourceRNC_TransparentContainer_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
int offset = 0;
asn1_ctx_t asn1_ctx;
@ -12493,6 +12502,10 @@ void proto_register_ranap(void) {
{ "TargetID", "ranap.TargetID",
FT_UINT32, BASE_DEC, VALS(ranap_TargetID_vals), 0,
NULL, HFILL }},
{ &hf_ranap_ranap_TargetRNC_ID_PDU,
{ "TargetRNC-ID", "ranap.TargetRNC_ID",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_ranap_TargetRNC_ToSourceRNC_TransparentContainer_PDU,
{ "TargetRNC-ToSourceRNC-TransparentContainer", "ranap.TargetRNC_ToSourceRNC_TransparentContainer",
FT_NONE, BASE_NONE, NULL, 0,

View File

@ -40,6 +40,7 @@ int dissect_ranap_IntegrityProtectionInformation(tvbuff_t *tvb _U_, int offset _
int dissect_ranap_Service_Handover(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_);
int dissect_ranap_TargetRNC_ID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_);
int dissect_ranap_SourceRNC_ToTargetRNC_TransparentContainer_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_);
int dissect_ranap_TargetRNC_ID_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_);
/*--- End of included file: packet-ranap-exp.h ---*/
#line 27 "packet-ranap-template.h"

View File

@ -1077,7 +1077,7 @@ dissect_s1ap_ProcedureCode(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _
offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
0U, 255U, &ProcedureCode, FALSE);
#line 80 "s1ap.cnf"
#line 85 "s1ap.cnf"
col_add_fstr(actx->pinfo->cinfo, COL_INFO, "%s ",
val_to_str(ProcedureCode, s1ap_ProcedureCode_vals,
"unknown message"));
@ -1239,7 +1239,7 @@ dissect_s1ap_ProtocolIE_ID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _
offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
0U, 65535U, &ProtocolIE_ID, FALSE);
#line 63 "s1ap.cnf"
#line 68 "s1ap.cnf"
if (tree) {
proto_item_append_text(proto_item_get_parent_nth(actx->created_item, 2), ": %s", val_to_str(ProtocolIE_ID, VALS(s1ap_ProtocolIE_ID_vals), "unknown (%d)"));
}
@ -1319,7 +1319,7 @@ static const per_sequence_t ProtocolIE_ContainerList_sequence_of[1] = {
static int
dissect_s1ap_ProtocolIE_ContainerList(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 105 "s1ap.cnf"
#line 110 "s1ap.cnf"
static const asn1_par_def_t ProtocolIE_ContainerList_pars[] = {
{ "lowerBound", ASN1_PAR_INTEGER },
{ "upperBound", ASN1_PAR_INTEGER },
@ -1582,7 +1582,7 @@ dissect_s1ap_BitRate(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, pr
static int
dissect_s1ap_PLMNidentity(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 167 "s1ap.cnf"
#line 172 "s1ap.cnf"
tvbuff_t *parameter_tvb=NULL;
offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
@ -2030,7 +2030,7 @@ dissect_s1ap_BroadcastCompletedAreaList(tvbuff_t *tvb _U_, int offset _U_, asn1_
}
static const value_string s1ap_CauseRadioNetwork_vals[] = {
const value_string s1ap_CauseRadioNetwork_vals[] = {
{ 0, "unspecified" },
{ 1, "tx2relocoverall-expiry" },
{ 2, "successful-handover" },
@ -2083,7 +2083,7 @@ dissect_s1ap_CauseRadioNetwork(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *ac
}
static const value_string s1ap_CauseTransport_vals[] = {
const value_string s1ap_CauseTransport_vals[] = {
{ 0, "transport-resource-unavailable" },
{ 1, "unspecified" },
{ 0, NULL }
@ -2099,7 +2099,7 @@ dissect_s1ap_CauseTransport(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx
}
static const value_string s1ap_CauseNas_vals[] = {
const value_string s1ap_CauseNas_vals[] = {
{ 0, "normal-release" },
{ 1, "authentication-failure" },
{ 2, "detach" },
@ -2118,7 +2118,7 @@ dissect_s1ap_CauseNas(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, p
}
static const value_string s1ap_CauseProtocol_vals[] = {
const value_string s1ap_CauseProtocol_vals[] = {
{ 0, "transfer-syntax-error" },
{ 1, "abstract-syntax-error-reject" },
{ 2, "abstract-syntax-error-ignore-and-notify" },
@ -2139,7 +2139,7 @@ dissect_s1ap_CauseProtocol(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _
}
static const value_string s1ap_CauseMisc_vals[] = {
const value_string s1ap_CauseMisc_vals[] = {
{ 0, "control-processing-overload" },
{ 1, "not-enough-user-plane-processing-resources" },
{ 2, "hardware-failure" },
@ -2786,7 +2786,7 @@ dissect_s1ap_ENBname(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, pr
static int
dissect_s1ap_TransportLayerAddress(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 189 "s1ap.cnf"
#line 194 "s1ap.cnf"
tvbuff_t *parameter_tvb=NULL;
proto_tree *subtree;
gint tvb_len;
@ -3188,7 +3188,7 @@ static const value_string s1ap_HandoverType_vals[] = {
static int
dissect_s1ap_HandoverType(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 224 "s1ap.cnf"
#line 229 "s1ap.cnf"
offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
5, &handover_type_value, TRUE, 0, NULL);
@ -3393,7 +3393,7 @@ dissect_s1ap_MSClassmark3(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U
static int
dissect_s1ap_NAS_PDU(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 180 "s1ap.cnf"
#line 185 "s1ap.cnf"
tvbuff_t *parameter_tvb=NULL;
@ -3625,7 +3625,7 @@ dissect_s1ap_RepetitionPeriod(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *act
static int
dissect_s1ap_RRC_Container(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 354 "s1ap.cnf"
#line 359 "s1ap.cnf"
gint32 start_offset;
@ -3858,7 +3858,7 @@ dissect_s1ap_SONConfigurationTransfer(tvbuff_t *tvb _U_, int offset _U_, asn1_ct
static int
dissect_s1ap_Source_ToTarget_TransparentContainer(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 243 "s1ap.cnf"
#line 248 "s1ap.cnf"
gint32 start_offset;
tvbuff_t *parameter_tvb;
proto_tree *subtree;
@ -4229,7 +4229,7 @@ dissect_s1ap_TargeteNB_ToSourceeNB_TransparentContainer(tvbuff_t *tvb _U_, int o
static int
dissect_s1ap_Target_ToSource_TransparentContainer(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 297 "s1ap.cnf"
#line 302 "s1ap.cnf"
gint32 start_offset;
tvbuff_t *parameter_tvb;
@ -4483,7 +4483,7 @@ dissect_s1ap_UEPagingID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_,
static int
dissect_s1ap_UERadioCapability(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 414 "s1ap.cnf"
#line 419 "s1ap.cnf"
gint32 start_offset;
tvbuff_t *parameter_tvb;
@ -4579,7 +4579,7 @@ dissect_s1ap_WarningMessageContents(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_
static int
dissect_s1ap_E_RAB_IE_ContainerList(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 132 "s1ap.cnf"
#line 137 "s1ap.cnf"
asn1_stack_frame_push(actx, "ProtocolIE-ContainerList");
asn1_param_push_integer(actx, 1);
asn1_param_push_integer(actx, maxNrOfE_RABs);
@ -4599,7 +4599,7 @@ static const per_sequence_t HandoverRequired_sequence[] = {
static int
dissect_s1ap_HandoverRequired(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 229 "s1ap.cnf"
#line 234 "s1ap.cnf"
handover_type_value = 0;
offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
@ -4616,7 +4616,7 @@ static const per_sequence_t HandoverCommand_sequence[] = {
static int
dissect_s1ap_HandoverCommand(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 231 "s1ap.cnf"
#line 236 "s1ap.cnf"
handover_type_value = 0;
offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
@ -4675,7 +4675,7 @@ static const per_sequence_t HandoverRequest_sequence[] = {
static int
dissect_s1ap_HandoverRequest(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 233 "s1ap.cnf"
#line 238 "s1ap.cnf"
handover_type_value = 0;
@ -5423,7 +5423,7 @@ static const per_sequence_t DownlinkNASTransport_sequence[] = {
static int
dissect_s1ap_DownlinkNASTransport(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 216 "s1ap.cnf"
#line 221 "s1ap.cnf"
/* Set the direction of the message */
actx->pinfo->link_dir=P2P_DIR_DL;
@ -5442,7 +5442,7 @@ static const per_sequence_t InitialUEMessage_sequence[] = {
static int
dissect_s1ap_InitialUEMessage(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 212 "s1ap.cnf"
#line 217 "s1ap.cnf"
/* Set the direction of the message */
actx->pinfo->link_dir=P2P_DIR_UL;
@ -5461,7 +5461,7 @@ static const per_sequence_t UplinkNASTransport_sequence[] = {
static int
dissect_s1ap_UplinkNASTransport(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 220 "s1ap.cnf"
#line 225 "s1ap.cnf"
/* Set the direction of the message */
actx->pinfo->link_dir=P2P_DIR_UL;
@ -6121,7 +6121,7 @@ dissect_s1ap_UplinkNonUEAssociatedLPPaTransport(tvbuff_t *tvb _U_, int offset _U
static int
dissect_s1ap_InitiatingMessage_value(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 87 "s1ap.cnf"
#line 92 "s1ap.cnf"
message_type = INITIATING_MESSAGE;
offset = dissect_per_open_type_pdu_new(tvb, offset, actx, tree, hf_index, dissect_InitiatingMessageValue);
@ -6149,7 +6149,7 @@ dissect_s1ap_InitiatingMessage(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *ac
static int
dissect_s1ap_SuccessfulOutcome_value(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 90 "s1ap.cnf"
#line 95 "s1ap.cnf"
message_type = SUCCESSFUL_OUTCOME;
offset = dissect_per_open_type_pdu_new(tvb, offset, actx, tree, hf_index, dissect_SuccessfulOutcomeValue);
@ -6177,7 +6177,7 @@ dissect_s1ap_SuccessfulOutcome(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *ac
static int
dissect_s1ap_UnsuccessfulOutcome_value(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 93 "s1ap.cnf"
#line 98 "s1ap.cnf"
message_type = UNSUCCESSFUL_OUTCOME;