diff --git a/asn1/ranap/ranap.cnf b/asn1/ranap/ranap.cnf index bcf64a3ecc..c5b10e27df 100644 --- a/asn1/ranap/ranap.cnf +++ b/asn1/ranap/ranap.cnf @@ -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 diff --git a/asn1/s1ap/Makefile.common b/asn1/s1ap/Makefile.common index 36d880ac6a..fb12af73d1 100644 --- a/asn1/s1ap/Makefile.common +++ b/asn1/s1ap/Makefile.common @@ -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 = \ diff --git a/asn1/s1ap/s1ap.cnf b/asn1/s1ap/s1ap.cnf index 32b96368d7..d93e58adaa 100644 --- a/asn1/s1ap/s1ap.cnf +++ b/asn1/s1ap/s1ap.cnf @@ -8,7 +8,12 @@ PER ALIGNED #.END -#.EXPORTS +#.EXPORTS ONLY_VALS WS_VAR +CauseRadioNetwork +CauseTransport +CauseNas +CauseProtocol +CauseMisc #.PDU_NEW S1AP-PDU diff --git a/epan/dissectors/Makefile.common b/epan/dissectors/Makefile.common index dd385b726c..7510108f4d 100644 --- a/epan/dissectors/Makefile.common +++ b/epan/dissectors/Makefile.common @@ -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 \ diff --git a/epan/dissectors/packet-gtpv2.c b/epan/dissectors/packet-gtpv2.c index 9584c2291b..a2efe58ace 100644 --- a/epan/dissectors/packet-gtpv2.c +++ b/epan/dissectors/packet-gtpv2.c @@ -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, ""}, + {6, ""}, + {7, ""}, + {8, ""}, + {9, ""}, + {10, ""}, + {11, ""}, + {12, ""}, + {13, ""}, + {14, ""}, + {15, ""}, + {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(>pv2_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(>pv2_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"); diff --git a/epan/dissectors/packet-ranap.c b/epan/dissectors/packet-ranap.c index 33b2283fee..62ff97b3e8 100644 --- a/epan/dissectors/packet-ranap.c +++ b/epan/dissectors/packet-ranap.c @@ -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, diff --git a/epan/dissectors/packet-ranap.h b/epan/dissectors/packet-ranap.h index 1f3e026d90..42d923cd86 100644 --- a/epan/dissectors/packet-ranap.h +++ b/epan/dissectors/packet-ranap.h @@ -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" diff --git a/epan/dissectors/packet-s1ap.c b/epan/dissectors/packet-s1ap.c index f16c795a02..1dc0739c53 100644 --- a/epan/dissectors/packet-s1ap.c +++ b/epan/dissectors/packet-s1ap.c @@ -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;