From Pascal Quantin.

The attached patch adds the LPPa (LTE Positioning Protocol A) dissector as
specified in 3GPP 36.455 release 9.4.1.
(Part 2)
https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=6478

svn path=/trunk/; revision=39516
This commit is contained in:
Anders Broman 2011-10-23 18:05:07 +00:00
parent 4dcd0ff1e3
commit a18ab9b870
11 changed files with 130 additions and 34 deletions

View File

@ -67,6 +67,7 @@ SUBDIRS = \
ldap \ ldap \
logotypecertextn \ logotypecertextn \
lpp \ lpp \
lppa \
lte-rrc \ lte-rrc \
mms \ mms \
mpeg-audio \ mpeg-audio \

View File

@ -121,6 +121,7 @@ PER_LIST= \
hnbap \ hnbap \
lcsap \ lcsap \
lpp \ lpp \
lppa \
lte-rrc \ lte-rrc \
nbap \ nbap \
mpeg-audio \ mpeg-audio \

View File

@ -60,6 +60,34 @@ ProtocolIE-Field/value ie_field_value
#.FN_PARS ProtocolExtensionID VAL_PTR=&ProtocolExtensionID #.FN_PARS ProtocolExtensionID VAL_PTR=&ProtocolExtensionID
#.FN_PARS ProtocolExtensionField/extensionValue FN_VARIANT=_pdu_new TYPE_REF_FN=dissect_ProtocolExtensionFieldExtensionValue #.FN_PARS ProtocolExtensionField/extensionValue FN_VARIANT=_pdu_new TYPE_REF_FN=dissect_ProtocolExtensionFieldExtensionValue
#.FN_PARS Payload-Type VAL_PTR=&PayloadType
#.FN_BODY APDU VAL_PTR = &parameter_tvb
tvbuff_t *parameter_tvb=NULL;
%(DEFAULT_BODY)s
if (parameter_tvb) {
switch (PayloadType) {
case 0:
/* LPP */
if (lpp_handle) {
call_dissector(lpp_handle, parameter_tvb, %(ACTX)s->pinfo, tree);
}
break;
case 1:
/* LPPa */
if (lppa_handle) {
call_dissector(lppa_handle, parameter_tvb, %(ACTX)s->pinfo, tree);
}
break;
default:
break;
}
}
PayloadType = -1;
#.FN_PARS ProcedureCode VAL_PTR = &ProcedureCode #.FN_PARS ProcedureCode VAL_PTR = &ProcedureCode
#.FN_FTR ProcedureCode #.FN_FTR ProcedureCode

View File

@ -55,6 +55,9 @@
#define PSNAME "LCSAP" #define PSNAME "LCSAP"
#define PFNAME "lcsap" #define PFNAME "lcsap"
static dissector_handle_t lpp_handle;
static dissector_handle_t lppa_handle;
#define SCTP_PORT_LCSAP 9082 #define SCTP_PORT_LCSAP 9082
#include "packet-lcsap-val.h" #include "packet-lcsap-val.h"
/* Strcture to hold ProcedureCode */ /* Strcture to hold ProcedureCode */
@ -75,6 +78,7 @@ static int ett_lcsap = -1;
static guint32 ProcedureCode; static guint32 ProcedureCode;
static guint32 ProtocolIE_ID; static guint32 ProtocolIE_ID;
static guint32 ProtocolExtensionID; static guint32 ProtocolExtensionID;
static guint32 PayloadType = -1;
static guint gbl_lcsapSctpPort=SCTP_PORT_LCSAP; static guint gbl_lcsapSctpPort=SCTP_PORT_LCSAP;
/* Dissector tables */ /* Dissector tables */
@ -148,7 +152,8 @@ proto_reg_handoff_lcsap(void)
if (!Initialized) { if (!Initialized) {
lcsap_handle = find_dissector("lcsap"); lcsap_handle = find_dissector("lcsap");
lpp_handle = find_dissector("lpp");
lppa_handle = find_dissector("lppa");
dissector_add_handle("sctp.port", lcsap_handle); /* for "decode-as" */ dissector_add_handle("sctp.port", lcsap_handle); /* for "decode-as" */
dissector_add_uint("sctp.ppi", LCS_AP_PAYLOAD_PROTOCOL_ID, lcsap_handle); dissector_add_uint("sctp.ppi", LCS_AP_PAYLOAD_PROTOCOL_ID, lcsap_handle);
Initialized=TRUE; Initialized=TRUE;

View File

@ -59,6 +59,7 @@
#define SCTP_PORT_S1AP 36412 #define SCTP_PORT_S1AP 36412
static dissector_handle_t nas_eps_handle; static dissector_handle_t nas_eps_handle;
static dissector_handle_t lppa_handle;
#include "packet-s1ap-val.h" #include "packet-s1ap-val.h"
@ -186,6 +187,7 @@ proto_reg_handoff_s1ap(void)
if (!Initialized) { if (!Initialized) {
nas_eps_handle = find_dissector("nas-eps"); nas_eps_handle = find_dissector("nas-eps");
lppa_handle = find_dissector("lppa");
dissector_add_handle("sctp.port", s1ap_handle); /* for "decode-as" */ dissector_add_handle("sctp.port", s1ap_handle); /* for "decode-as" */
dissector_add_uint("sctp.ppi", S1AP_PAYLOAD_PROTOCOL_ID, s1ap_handle); dissector_add_uint("sctp.ppi", S1AP_PAYLOAD_PROTOCOL_ID, s1ap_handle);
Initialized=TRUE; Initialized=TRUE;

View File

@ -237,6 +237,15 @@ MAX_VAL = asn1_param_get_integer(%(ACTX)s,"upperBound")
if ((tvb_length(parameter_tvb)>0)&&(nas_eps_handle)) if ((tvb_length(parameter_tvb)>0)&&(nas_eps_handle))
call_dissector(nas_eps_handle,parameter_tvb,%(ACTX)s->pinfo, tree); call_dissector(nas_eps_handle,parameter_tvb,%(ACTX)s->pinfo, tree);
#.FN_BODY LPPa-PDU VAL_PTR = &parameter_tvb
tvbuff_t *parameter_tvb=NULL;
%(DEFAULT_BODY)s
if ((tvb_length(parameter_tvb)>0)&&(lppa_handle))
call_dissector(lppa_handle, parameter_tvb, %(ACTX)s->pinfo, tree);
#.FN_BODY TransportLayerAddress VAL_PTR = &parameter_tvb #.FN_BODY TransportLayerAddress VAL_PTR = &parameter_tvb
tvbuff_t *parameter_tvb=NULL; tvbuff_t *parameter_tvb=NULL;
proto_tree *subtree; proto_tree *subtree;

View File

@ -1930,6 +1930,7 @@ AC_OUTPUT(
asn1/ldap/Makefile asn1/ldap/Makefile
asn1/logotypecertextn/Makefile asn1/logotypecertextn/Makefile
asn1/lpp/Makefile asn1/lpp/Makefile
asn1/lppa/Makefile
asn1/lte-rrc/Makefile asn1/lte-rrc/Makefile
asn1/mms/Makefile asn1/mms/Makefile
asn1/mpeg-audio/Makefile asn1/mpeg-audio/Makefile

View File

@ -211,6 +211,7 @@ set(ASN1_DISSECTOR_SRC
dissectors/packet-h460.c dissectors/packet-h460.c
dissectors/packet-h501.c dissectors/packet-h501.c
dissectors/packet-idmp.c dissectors/packet-idmp.c
dissectors/packet-lppa.c
dissectors/packet-logotypecertextn.c dissectors/packet-logotypecertextn.c
dissectors/packet-mms.c dissectors/packet-mms.c
dissectors/packet-mpeg-audio.c dissectors/packet-mpeg-audio.c
@ -261,6 +262,7 @@ set(DIRTY_ASN1_DISSECTOR_SRC
dissectors/packet-inap.c dissectors/packet-inap.c
dissectors/packet-lcsap.c dissectors/packet-lcsap.c
dissectors/packet-ldap.c dissectors/packet-ldap.c
dissectors/packet-lpp.c
dissectors/packet-lte-rrc.c dissectors/packet-lte-rrc.c
dissectors/packet-nbap.c dissectors/packet-nbap.c
dissectors/packet-p1.c dissectors/packet-p1.c
@ -413,6 +415,7 @@ set(DISSECTOR_SRC
dissectors/packet-cosine.c dissectors/packet-cosine.c
dissectors/packet-cpfi.c dissectors/packet-cpfi.c
dissectors/packet-cpha.c dissectors/packet-cpha.c
dissectors/packet-csg.c
dissectors/packet-csm-encaps.c dissectors/packet-csm-encaps.c
dissectors/packet-ctdb.c dissectors/packet-ctdb.c
dissectors/packet-cups.c dissectors/packet-cups.c

View File

@ -126,6 +126,7 @@ ASN1_DISSECTOR_SRC = \
packet-HI2Operations.c \ packet-HI2Operations.c \
packet-hnbap.c \ packet-hnbap.c \
packet-lcsap.c \ packet-lcsap.c \
packet-lppa.c \
packet-idmp.c \ packet-idmp.c \
packet-inap.c \ packet-inap.c \
packet-logotypecertextn.c \ packet-logotypecertextn.c \
@ -1047,7 +1048,7 @@ DISSECTOR_SRC = \
packet-zebra.c \ packet-zebra.c \
packet-zep.c \ packet-zep.c \
packet-ziop.c \ packet-ziop.c \
packet-zrtp.c packet-zrtp.c \
# #
# Headers for dissectors. # Headers for dissectors.
@ -1094,6 +1095,7 @@ DISSECTOR_INCLUDES = \
packet-cms.h \ packet-cms.h \
packet-credssp.h \ packet-credssp.h \
packet-crmf.h \ packet-crmf.h \
packet-csg.c \
packet-csn1.h \ packet-csn1.h \
packet-dap.h \ packet-dap.h \
packet-data.h \ packet-data.h \

View File

@ -63,6 +63,9 @@
#define PSNAME "LCSAP" #define PSNAME "LCSAP"
#define PFNAME "lcsap" #define PFNAME "lcsap"
static dissector_handle_t lpp_handle;
static dissector_handle_t lppa_handle;
#define SCTP_PORT_LCSAP 9082 #define SCTP_PORT_LCSAP 9082
/*--- Included file: packet-lcsap-val.h ---*/ /*--- Included file: packet-lcsap-val.h ---*/
@ -107,7 +110,7 @@ typedef enum _ProtocolIE_ID_enum {
} ProtocolIE_ID_enum; } ProtocolIE_ID_enum;
/*--- End of included file: packet-lcsap-val.h ---*/ /*--- End of included file: packet-lcsap-val.h ---*/
#line 60 "../../asn1/lcsap/packet-lcsap-template.c" #line 63 "../../asn1/lcsap/packet-lcsap-template.c"
/* Strcture to hold ProcedureCode */ /* Strcture to hold ProcedureCode */
struct pro_code { struct pro_code {
guint8 code; guint8 code;
@ -226,7 +229,7 @@ static int hf_lcsap_successfulOutcome_value = -1; /* SuccessfulOutcome_value */
static int hf_lcsap_unsuccessfulOutcome_value = -1; /* UnsuccessfulOutcome_value */ static int hf_lcsap_unsuccessfulOutcome_value = -1; /* UnsuccessfulOutcome_value */
/*--- End of included file: packet-lcsap-hf.c ---*/ /*--- End of included file: packet-lcsap-hf.c ---*/
#line 68 "../../asn1/lcsap/packet-lcsap-template.c" #line 71 "../../asn1/lcsap/packet-lcsap-template.c"
/* Initialize the subtree pointers */ /* Initialize the subtree pointers */
static int ett_lcsap = -1; static int ett_lcsap = -1;
@ -281,12 +284,13 @@ static gint ett_lcsap_SuccessfulOutcome = -1;
static gint ett_lcsap_UnsuccessfulOutcome = -1; static gint ett_lcsap_UnsuccessfulOutcome = -1;
/*--- End of included file: packet-lcsap-ett.c ---*/ /*--- End of included file: packet-lcsap-ett.c ---*/
#line 73 "../../asn1/lcsap/packet-lcsap-template.c" #line 76 "../../asn1/lcsap/packet-lcsap-template.c"
/* Global variables */ /* Global variables */
static guint32 ProcedureCode; static guint32 ProcedureCode;
static guint32 ProtocolIE_ID; static guint32 ProtocolIE_ID;
static guint32 ProtocolExtensionID; static guint32 ProtocolExtensionID;
static guint32 PayloadType = -1;
static guint gbl_lcsapSctpPort=SCTP_PORT_LCSAP; static guint gbl_lcsapSctpPort=SCTP_PORT_LCSAP;
/* Dissector tables */ /* Dissector tables */
@ -340,7 +344,7 @@ dissect_lcsap_ProcedureCode(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx
offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index, offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
0U, 255U, &ProcedureCode, FALSE); 0U, 255U, &ProcedureCode, FALSE);
#line 65 "../../asn1/lcsap/lcsap.cnf" #line 93 "../../asn1/lcsap/lcsap.cnf"
if (check_col(actx->pinfo->cinfo, COL_INFO)) if (check_col(actx->pinfo->cinfo, COL_INFO))
{ {
@ -508,8 +512,35 @@ dissect_lcsap_ProtocolExtensionContainer(tvbuff_t *tvb _U_, int offset _U_, asn1
static int static int
dissect_lcsap_APDU(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { dissect_lcsap_APDU(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 66 "../../asn1/lcsap/lcsap.cnf"
tvbuff_t *parameter_tvb=NULL;
offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index, offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
NO_BOUND, NO_BOUND, FALSE, NULL); NO_BOUND, NO_BOUND, FALSE, &parameter_tvb);
if (parameter_tvb) {
switch (PayloadType) {
case 0:
/* LPP */
if (lpp_handle) {
call_dissector(lpp_handle, parameter_tvb, actx->pinfo, tree);
}
break;
case 1:
/* LPPa */
if (lppa_handle) {
call_dissector(lppa_handle, parameter_tvb, actx->pinfo, tree);
}
break;
default:
break;
}
}
PayloadType = -1;
return offset; return offset;
} }
@ -646,7 +677,7 @@ dissect_lcsap_DegreesLongitude(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *ac
static int static int
dissect_lcsap_PLMN_ID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { dissect_lcsap_PLMN_ID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 136 "../../asn1/lcsap/lcsap.cnf" #line 164 "../../asn1/lcsap/lcsap.cnf"
tvbuff_t *parameter_tvb=NULL; tvbuff_t *parameter_tvb=NULL;
offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index, offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
3, 3, FALSE, &parameter_tvb); 3, 3, FALSE, &parameter_tvb);
@ -1448,7 +1479,7 @@ static const value_string lcsap_Payload_Type_vals[] = {
static int static int
dissect_lcsap_Payload_Type(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { dissect_lcsap_Payload_Type(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index, offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
2, NULL, TRUE, 0, NULL); 2, &PayloadType, TRUE, 0, NULL);
return offset; return offset;
} }
@ -2010,7 +2041,7 @@ static int dissect_LCS_AP_PDU_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, pro
/*--- End of included file: packet-lcsap-fn.c ---*/ /*--- End of included file: packet-lcsap-fn.c ---*/
#line 96 "../../asn1/lcsap/packet-lcsap-template.c" #line 100 "../../asn1/lcsap/packet-lcsap-template.c"
static int dissect_ProtocolIEFieldValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) static int dissect_ProtocolIEFieldValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
{ {
@ -2066,7 +2097,8 @@ proto_reg_handoff_lcsap(void)
if (!Initialized) { if (!Initialized) {
lcsap_handle = find_dissector("lcsap"); lcsap_handle = find_dissector("lcsap");
lpp_handle = find_dissector("lpp");
lppa_handle = find_dissector("lppa");
dissector_add_handle("sctp.port", lcsap_handle); /* for "decode-as" */ dissector_add_handle("sctp.port", lcsap_handle); /* for "decode-as" */
dissector_add_uint("sctp.ppi", LCS_AP_PAYLOAD_PROTOCOL_ID, lcsap_handle); dissector_add_uint("sctp.ppi", LCS_AP_PAYLOAD_PROTOCOL_ID, lcsap_handle);
Initialized=TRUE; Initialized=TRUE;
@ -2107,7 +2139,7 @@ proto_reg_handoff_lcsap(void)
/*--- End of included file: packet-lcsap-dis-tab.c ---*/ /*--- End of included file: packet-lcsap-dis-tab.c ---*/
#line 156 "../../asn1/lcsap/packet-lcsap-template.c" #line 161 "../../asn1/lcsap/packet-lcsap-template.c"
} else { } else {
if (SctpPort != 0) { if (SctpPort != 0) {
dissector_delete_uint("sctp.port", SctpPort, lcsap_handle); dissector_delete_uint("sctp.port", SctpPort, lcsap_handle);
@ -2554,7 +2586,7 @@ void proto_register_lcsap(void) {
"UnsuccessfulOutcome_value", HFILL }}, "UnsuccessfulOutcome_value", HFILL }},
/*--- End of included file: packet-lcsap-hfarr.c ---*/ /*--- End of included file: packet-lcsap-hfarr.c ---*/
#line 174 "../../asn1/lcsap/packet-lcsap-template.c" #line 179 "../../asn1/lcsap/packet-lcsap-template.c"
}; };
/* List of subtrees */ /* List of subtrees */
@ -2610,7 +2642,7 @@ void proto_register_lcsap(void) {
&ett_lcsap_UnsuccessfulOutcome, &ett_lcsap_UnsuccessfulOutcome,
/*--- End of included file: packet-lcsap-ettarr.c ---*/ /*--- End of included file: packet-lcsap-ettarr.c ---*/
#line 180 "../../asn1/lcsap/packet-lcsap-template.c" #line 185 "../../asn1/lcsap/packet-lcsap-template.c"
}; };
module_t *lcsap_module; module_t *lcsap_module;

View File

@ -67,6 +67,7 @@
#define SCTP_PORT_S1AP 36412 #define SCTP_PORT_S1AP 36412
static dissector_handle_t nas_eps_handle; static dissector_handle_t nas_eps_handle;
static dissector_handle_t lppa_handle;
/*--- Included file: packet-s1ap-val.h ---*/ /*--- Included file: packet-s1ap-val.h ---*/
@ -305,7 +306,7 @@ typedef enum _ProtocolIE_ID_enum {
} ProtocolIE_ID_enum; } ProtocolIE_ID_enum;
/*--- End of included file: packet-s1ap-val.h ---*/ /*--- End of included file: packet-s1ap-val.h ---*/
#line 64 "../../asn1/s1ap/packet-s1ap-template.c" #line 65 "../../asn1/s1ap/packet-s1ap-template.c"
/* Initialize the protocol and registered fields */ /* Initialize the protocol and registered fields */
static int proto_s1ap = -1; static int proto_s1ap = -1;
@ -748,7 +749,7 @@ static int hf_s1ap_candidateCellList = -1; /* CandidateCellList */
static int hf_s1ap_CandidateCellList_item = -1; /* IRAT_Cell_ID */ static int hf_s1ap_CandidateCellList_item = -1; /* IRAT_Cell_ID */
/*--- End of included file: packet-s1ap-hf.c ---*/ /*--- End of included file: packet-s1ap-hf.c ---*/
#line 71 "../../asn1/s1ap/packet-s1ap-template.c" #line 72 "../../asn1/s1ap/packet-s1ap-template.c"
/* Initialize the subtree pointers */ /* Initialize the subtree pointers */
static int ett_s1ap = -1; static int ett_s1ap = -1;
@ -986,7 +987,7 @@ static gint ett_s1ap_HOReport = -1;
static gint ett_s1ap_CandidateCellList = -1; static gint ett_s1ap_CandidateCellList = -1;
/*--- End of included file: packet-s1ap-ett.c ---*/ /*--- End of included file: packet-s1ap-ett.c ---*/
#line 81 "../../asn1/s1ap/packet-s1ap-template.c" #line 82 "../../asn1/s1ap/packet-s1ap-template.c"
enum{ enum{
INITIATING_MESSAGE, INITIATING_MESSAGE,
@ -2905,7 +2906,7 @@ dissect_s1ap_ENBname(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, pr
static int 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_) { dissect_s1ap_TransportLayerAddress(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 241 "../../asn1/s1ap/s1ap.cnf" #line 250 "../../asn1/s1ap/s1ap.cnf"
tvbuff_t *parameter_tvb=NULL; tvbuff_t *parameter_tvb=NULL;
proto_tree *subtree; proto_tree *subtree;
gint tvb_len; gint tvb_len;
@ -3309,7 +3310,7 @@ static const value_string s1ap_HandoverType_vals[] = {
static int 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_) { dissect_s1ap_HandoverType(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 276 "../../asn1/s1ap/s1ap.cnf" #line 285 "../../asn1/s1ap/s1ap.cnf"
offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index, offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
5, &handover_type_value, TRUE, 0, NULL); 5, &handover_type_value, TRUE, 0, NULL);
@ -3444,8 +3445,18 @@ dissect_s1ap_LastVisitedCell_Item(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t
static int static int
dissect_s1ap_LPPa_PDU(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { dissect_s1ap_LPPa_PDU(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 241 "../../asn1/s1ap/s1ap.cnf"
tvbuff_t *parameter_tvb=NULL;
offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index, offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
NO_BOUND, NO_BOUND, FALSE, NULL); NO_BOUND, NO_BOUND, FALSE, &parameter_tvb);
if ((tvb_length(parameter_tvb)>0)&&(lppa_handle))
call_dissector(lppa_handle, parameter_tvb, actx->pinfo, tree);
return offset; return offset;
} }
@ -3761,7 +3772,7 @@ dissect_s1ap_RepetitionPeriod(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *act
static int 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_) { 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 406 "../../asn1/s1ap/s1ap.cnf" #line 415 "../../asn1/s1ap/s1ap.cnf"
gint32 start_offset; gint32 start_offset;
@ -3994,7 +4005,7 @@ dissect_s1ap_SONConfigurationTransfer(tvbuff_t *tvb _U_, int offset _U_, asn1_ct
static int 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_) { 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 295 "../../asn1/s1ap/s1ap.cnf" #line 304 "../../asn1/s1ap/s1ap.cnf"
gint32 start_offset; gint32 start_offset;
tvbuff_t *parameter_tvb; tvbuff_t *parameter_tvb;
proto_tree *subtree; proto_tree *subtree;
@ -4365,7 +4376,7 @@ dissect_s1ap_TargeteNB_ToSourceeNB_TransparentContainer(tvbuff_t *tvb _U_, int o
static int 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_) { 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 349 "../../asn1/s1ap/s1ap.cnf" #line 358 "../../asn1/s1ap/s1ap.cnf"
gint32 start_offset; gint32 start_offset;
tvbuff_t *parameter_tvb; tvbuff_t *parameter_tvb;
@ -4619,7 +4630,7 @@ dissect_s1ap_UEPagingID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_,
static int 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_) { dissect_s1ap_UERadioCapability(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 466 "../../asn1/s1ap/s1ap.cnf" #line 475 "../../asn1/s1ap/s1ap.cnf"
gint32 start_offset; gint32 start_offset;
tvbuff_t *parameter_tvb; tvbuff_t *parameter_tvb;
@ -4735,7 +4746,7 @@ static const per_sequence_t HandoverRequired_sequence[] = {
static int 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_) { dissect_s1ap_HandoverRequired(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 281 "../../asn1/s1ap/s1ap.cnf" #line 290 "../../asn1/s1ap/s1ap.cnf"
handover_type_value = 0; handover_type_value = 0;
offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
@ -4752,7 +4763,7 @@ static const per_sequence_t HandoverCommand_sequence[] = {
static int 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_) { dissect_s1ap_HandoverCommand(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 283 "../../asn1/s1ap/s1ap.cnf" #line 292 "../../asn1/s1ap/s1ap.cnf"
handover_type_value = 0; handover_type_value = 0;
offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
@ -4811,7 +4822,7 @@ static const per_sequence_t HandoverRequest_sequence[] = {
static int 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_) { dissect_s1ap_HandoverRequest(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 285 "../../asn1/s1ap/s1ap.cnf" #line 294 "../../asn1/s1ap/s1ap.cnf"
handover_type_value = 0; handover_type_value = 0;
@ -5559,7 +5570,7 @@ static const per_sequence_t DownlinkNASTransport_sequence[] = {
static int 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_) { dissect_s1ap_DownlinkNASTransport(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 268 "../../asn1/s1ap/s1ap.cnf" #line 277 "../../asn1/s1ap/s1ap.cnf"
/* Set the direction of the message */ /* Set the direction of the message */
actx->pinfo->link_dir=P2P_DIR_DL; actx->pinfo->link_dir=P2P_DIR_DL;
@ -5578,7 +5589,7 @@ static const per_sequence_t InitialUEMessage_sequence[] = {
static int 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_) { dissect_s1ap_InitialUEMessage(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 264 "../../asn1/s1ap/s1ap.cnf" #line 273 "../../asn1/s1ap/s1ap.cnf"
/* Set the direction of the message */ /* Set the direction of the message */
actx->pinfo->link_dir=P2P_DIR_UL; actx->pinfo->link_dir=P2P_DIR_UL;
@ -5597,7 +5608,7 @@ static const per_sequence_t UplinkNASTransport_sequence[] = {
static int 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_) { dissect_s1ap_UplinkNASTransport(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 272 "../../asn1/s1ap/s1ap.cnf" #line 281 "../../asn1/s1ap/s1ap.cnf"
/* Set the direction of the message */ /* Set the direction of the message */
actx->pinfo->link_dir=P2P_DIR_UL; actx->pinfo->link_dir=P2P_DIR_UL;
@ -8354,7 +8365,7 @@ int dissect_s1ap_SONtransferCause_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_,
/*--- End of included file: packet-s1ap-fn.c ---*/ /*--- End of included file: packet-s1ap-fn.c ---*/
#line 123 "../../asn1/s1ap/packet-s1ap-template.c" #line 124 "../../asn1/s1ap/packet-s1ap-template.c"
static int dissect_ProtocolIEFieldValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) static int dissect_ProtocolIEFieldValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
{ {
@ -8421,6 +8432,7 @@ proto_reg_handoff_s1ap(void)
if (!Initialized) { if (!Initialized) {
nas_eps_handle = find_dissector("nas-eps"); nas_eps_handle = find_dissector("nas-eps");
lppa_handle = find_dissector("lppa");
dissector_add_handle("sctp.port", s1ap_handle); /* for "decode-as" */ dissector_add_handle("sctp.port", s1ap_handle); /* for "decode-as" */
dissector_add_uint("sctp.ppi", S1AP_PAYLOAD_PROTOCOL_ID, s1ap_handle); dissector_add_uint("sctp.ppi", S1AP_PAYLOAD_PROTOCOL_ID, s1ap_handle);
Initialized=TRUE; Initialized=TRUE;
@ -8628,7 +8640,7 @@ proto_reg_handoff_s1ap(void)
/*--- End of included file: packet-s1ap-dis-tab.c ---*/ /*--- End of included file: packet-s1ap-dis-tab.c ---*/
#line 193 "../../asn1/s1ap/packet-s1ap-template.c" #line 195 "../../asn1/s1ap/packet-s1ap-template.c"
} else { } else {
if (SctpPort != 0) { if (SctpPort != 0) {
dissector_delete_uint("sctp.port", SctpPort, s1ap_handle); dissector_delete_uint("sctp.port", SctpPort, s1ap_handle);
@ -10385,7 +10397,7 @@ void proto_register_s1ap(void) {
NULL, HFILL }}, NULL, HFILL }},
/*--- End of included file: packet-s1ap-hfarr.c ---*/ /*--- End of included file: packet-s1ap-hfarr.c ---*/
#line 221 "../../asn1/s1ap/packet-s1ap-template.c" #line 223 "../../asn1/s1ap/packet-s1ap-template.c"
}; };
/* List of subtrees */ /* List of subtrees */
@ -10624,7 +10636,7 @@ void proto_register_s1ap(void) {
&ett_s1ap_CandidateCellList, &ett_s1ap_CandidateCellList,
/*--- End of included file: packet-s1ap-ettarr.c ---*/ /*--- End of included file: packet-s1ap-ettarr.c ---*/
#line 232 "../../asn1/s1ap/packet-s1ap-template.c" #line 234 "../../asn1/s1ap/packet-s1ap-template.c"
}; };
module_t *s1ap_module; module_t *s1ap_module;