parent
1d8014fab4
commit
7ba4ce1983
|
@ -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
|
||||
|
||||
|
|
|
@ -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 = \
|
||||
|
|
|
@ -8,7 +8,12 @@ PER
|
|||
ALIGNED
|
||||
#.END
|
||||
|
||||
#.EXPORTS
|
||||
#.EXPORTS ONLY_VALS WS_VAR
|
||||
CauseRadioNetwork
|
||||
CauseTransport
|
||||
CauseNas
|
||||
CauseProtocol
|
||||
CauseMisc
|
||||
|
||||
#.PDU_NEW
|
||||
S1AP-PDU
|
||||
|
|
|
@ -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 \
|
||||
|
|
|
@ -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;
|
||||
|
@ -1164,7 +1186,7 @@ dissect_gtpv2_pdn_type(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree,
|
|||
|
||||
/* 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(>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");
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue