E1AP: add dissector based on v15.0.0

Change-Id: Ic939d5f614de9c3b1204c92007b2aa3ee1e45f8f
Reviewed-on: https://code.wireshark.org/review/28649
Petri-Dish: Pascal Quantin <pascal.quantin@gmail.com>
Tested-by: Petri Dish Buildbot
Reviewed-by: Pascal Quantin <pascal.quantin@gmail.com>
This commit is contained in:
Pascal Quantin 2018-07-06 14:37:48 +02:00
parent caa8efa0d2
commit fed08d380f
14 changed files with 10646 additions and 1 deletions

View File

@ -78,6 +78,7 @@ Exablaze trailers
Ubiquiti Discovery Protocol (UBDP)
Cisco Meraki Discovery Protocol (MDP)
XnAP (5G) protocol
E1AP (5G) protocol
--
=== Updated Protocol Support

View File

@ -92,7 +92,7 @@ set(CLEAN_ASN1_DISSECTOR_SRC
${CMAKE_CURRENT_SOURCE_DIR}/packet-disp.c
${CMAKE_CURRENT_SOURCE_DIR}/packet-dop.c
${CMAKE_CURRENT_SOURCE_DIR}/packet-dsp.c
${CMAKE_CURRENT_SOURCE_DIR}/packet-ecp.c
${CMAKE_CURRENT_SOURCE_DIR}/packet-e1ap.c
${CMAKE_CURRENT_SOURCE_DIR}/packet-ess.c
${CMAKE_CURRENT_SOURCE_DIR}/packet-f1ap.c
${CMAKE_CURRENT_SOURCE_DIR}/packet-ftam.c
@ -938,6 +938,7 @@ set(DISSECTOR_SRC
${CMAKE_CURRENT_SOURCE_DIR}/packet-eapol.c
${CMAKE_CURRENT_SOURCE_DIR}/packet-echo.c
${CMAKE_CURRENT_SOURCE_DIR}/packet-ecmp.c
${CMAKE_CURRENT_SOURCE_DIR}/packet-ecp.c
${CMAKE_CURRENT_SOURCE_DIR}/packet-ecp-oui.c
${CMAKE_CURRENT_SOURCE_DIR}/packet-edonkey.c
${CMAKE_CURRENT_SOURCE_DIR}/packet-egd.c

View File

@ -31,6 +31,7 @@ set(ASN1_SRC_DIRS
disp
dop
dsp
e1ap
ess
f1ap
ftam

View File

@ -0,0 +1,43 @@
# CMakeLists.txt
#
# Wireshark - Network traffic analyzer
# By Gerald Combs <gerald@wireshark.org>
# Copyright 1998 Gerald Combs
#
# SPDX-License-Identifier: GPL-2.0-or-later
#
set( PROTOCOL_NAME e1ap )
set( PROTO_OPT )
set( EXPORT_FILES
${PROTOCOL_NAME}-exp.cnf
)
set( EXT_ASN_FILE_LIST
)
set( ASN_FILE_LIST
E1AP-CommonDataTypes.asn
E1AP-Constants.asn
E1AP-Containers.asn
E1AP-IEs.asn
E1AP-PDU-Contents.asn
E1AP-PDU-Descriptions.asn
)
set( EXTRA_DIST
${ASN_FILE_LIST}
packet-${PROTOCOL_NAME}-template.c
${PROTOCOL_NAME}.cnf
)
set( SRC_FILES
${EXTRA_DIST}
${EXT_ASN_FILE_LIST}
)
set( A2W_FLAGS )
ASN2WRS()

View File

@ -0,0 +1,51 @@
-- 3GPP TS 38.463 V15.0.0 (2018-06)
-- **************************************************************
--
-- Common definitions
--
-- **************************************************************
E1AP-CommonDataTypes {
itu-t (0) identified-organization (4) etsi (0) mobileDomain (0)
ngran-access (22) modules (3) e1ap (5) version1 (1) e1ap-CommonDataTypes (3)}
DEFINITIONS AUTOMATIC TAGS ::=
BEGIN
-- **************************************************************
--
-- Extension constants
--
-- **************************************************************
maxPrivateIEs INTEGER ::= 65535
maxProtocolExtensions INTEGER ::= 65535
maxProtocolIEs INTEGER ::= 65535
-- **************************************************************
--
-- Common Data Types
--
-- **************************************************************
Criticality ::= ENUMERATED { reject, ignore, notify }
Presence ::= ENUMERATED { optional, conditional, mandatory }
PrivateIE-ID ::= CHOICE {
local INTEGER (0.. maxPrivateIEs),
global OBJECT IDENTIFIER
}
ProcedureCode ::= INTEGER (0..255)
ProtocolExtensionID ::= INTEGER (0..maxProtocolExtensions)
ProtocolIE-ID ::= INTEGER (0..maxProtocolIEs)
TriggeringMessage ::= ENUMERATED { initiating-message, successful-outcome, unsuccessful-outcome}
END

View File

@ -0,0 +1,102 @@
-- 3GPP TS 38.463 V15.0.0 (2018-06)
-- **************************************************************
--
-- Constant definitions
--
-- **************************************************************
E1AP-Constants {
itu-t (0) identified-organization (4) etsi (0) mobileDomain (0)
ngran-access (22) modules (3) e1ap (5) version1 (1) e1ap-Constants (4) }
DEFINITIONS AUTOMATIC TAGS ::=
BEGIN
IMPORTS
ProcedureCode,
ProtocolIE-ID
FROM E1AP-CommonDataTypes;
-- **************************************************************
--
-- Elementary Procedures
--
-- **************************************************************
id-reset ProcedureCode ::= 0
id-errorIndication ProcedureCode ::= 1
id-privateMessage ProcedureCode ::= 2
id-gNB-CU-UP-E1Setup ProcedureCode ::= 3
id-gNB-CU-CP-E1Setup ProcedureCode ::= 4
id-gNB-CU-UP-ConfigurationUpdate ProcedureCode ::= 5
id-gNB-CU-CP-ConfigurationUpdate ProcedureCode ::= 6
id-e1Release ProcedureCode ::= 7
id-bearerContextSetup ProcedureCode ::= 8
id-bearerContextModification ProcedureCode ::= 9
id-bearerContextModificationRequired ProcedureCode ::= 10
id-bearerContextRelease ProcedureCode ::= 11
id-bearerContextReleaseRequest ProcedureCode ::= 12
id-bearerContextInactivityNotification ProcedureCode ::= 13
id-dLDataNotification ProcedureCode ::= 14
id-dataUsageReport ProcedureCode ::= 15
-- **************************************************************
--
-- Lists
--
-- **************************************************************
maxnoofErrors INTEGER ::= 256
maxnoofSPLMNs INTEGER ::= 6
maxnoofSliceItems INTEGER ::= 1024
maxnoofIndividualE1ConnectionsToReset INTEGER ::= 65536
maxnoofEUTRANQOSParameters INTEGER ::= 256
maxnoofNGRANQOSParameters INTEGER ::= 256
maxnoofDRBs INTEGER ::= 32
maxnoofNRCGI INTEGER ::= 512
maxnoofPDUSessionResource INTEGER ::= 256
maxnoofQoSFlows INTEGER ::= 64
maxnoofUPParameters INTEGER ::= 4
maxnoofCellGroups INTEGER ::= 4
maxnooftimeperiods INTEGER ::= 2
-- **************************************************************
--
-- IEs
--
-- **************************************************************
id-Cause ProtocolIE-ID ::= 0
id-CriticalityDiagnostics ProtocolIE-ID ::= 1
id-gNB-CU-CP-UE-E1AP-ID ProtocolIE-ID ::= 2
id-gNB-CU-UP-UE-E1AP-ID ProtocolIE-ID ::= 3
id-ResetType ProtocolIE-ID ::= 4
id-UE-associatedLogicalE1-ConnectionItem ProtocolIE-ID ::= 5
id-UE-associatedLogicalE1-ConnectionListResAck ProtocolIE-ID ::= 6
id-gNB-CU-UP-ID ProtocolIE-ID ::= 7
id-gNB-CU-UP-Name ProtocolIE-ID ::= 8
id-gNB-CU-CP-Name ProtocolIE-ID ::= 9
id-CNSupport ProtocolIE-ID ::= 10
id-SupportedPLMNs ProtocolIE-ID ::= 11
id-SupportedPLMNs-Item ProtocolIE-ID ::= 12
id-TimeToWait ProtocolIE-ID ::= 13
id-SecurityInformation ProtocolIE-ID ::= 14
id-UEDLAggregateMaximumBitRate ProtocolIE-ID ::= 15
id-System-BearerContextSetupRequest ProtocolIE-ID ::= 16
id-System-BearerContextSetupResponse ProtocolIE-ID ::= 17
id-BearerContextStatusChange ProtocolIE-ID ::= 18
id-System-BearerContextModificationRequest ProtocolIE-ID ::= 19
id-System-BearerContextModificationResponse ProtocolIE-ID ::= 20
id-System-BearerContextModificationConfirm ProtocolIE-ID ::= 21
id-System-BearerContextModificationRequired ProtocolIE-ID ::= 22
id-DRB-Status-List ProtocolIE-ID ::= 23
id-DRB-Status-Item ProtocolIE-ID ::= 24
id-DRB-Activity-List ProtocolIE-ID ::= 25
id-DRB-Activity-Item ProtocolIE-ID ::= 26
id-Data-Usage-Report-List ProtocolIE-ID ::= 27
END

View File

@ -0,0 +1,152 @@
-- 3GPP TS 38.463 V15.0.0 (2018-06)
-- **************************************************************
--
-- Container definitions
--
-- **************************************************************
E1AP-Containers {
itu-t (0) identified-organization (4) etsi (0) mobileDomain (0)
ngran-access (22) modules (3) e1ap (5) version1 (1) e1ap-Containers (5) }
DEFINITIONS AUTOMATIC TAGS ::=
BEGIN
-- **************************************************************
--
-- IE parameter types from other modules.
--
-- **************************************************************
IMPORTS
maxPrivateIEs,
maxProtocolExtensions,
maxProtocolIEs,
Criticality,
Presence,
PrivateIE-ID,
ProtocolIE-ID
FROM E1AP-CommonDataTypes;
-- **************************************************************
--
-- Class Definition for Protocol IEs
--
-- **************************************************************
E1AP-PROTOCOL-IES ::= CLASS {
&id ProtocolIE-ID UNIQUE,
&criticality Criticality,
&Value,
&presence Presence
}
WITH SYNTAX {
ID &id
CRITICALITY &criticality
TYPE &Value
PRESENCE &presence
}
-- **************************************************************
--
-- Class Definition for Protocol Extensions
--
-- **************************************************************
E1AP-PROTOCOL-EXTENSION ::= CLASS {
&id ProtocolIE-ID UNIQUE,
&criticality Criticality,
&Extension,
&presence Presence
}
WITH SYNTAX {
ID &id
CRITICALITY &criticality
EXTENSION &Extension
PRESENCE &presence
}
-- **************************************************************
--
-- Class Definition for Private IEs
--
-- **************************************************************
E1AP-PRIVATE-IES ::= CLASS {
&id PrivateIE-ID,
&criticality Criticality,
&Value,
&presence Presence
}
WITH SYNTAX {
ID &id
CRITICALITY &criticality
TYPE &Value
PRESENCE &presence
}
-- **************************************************************
--
-- Container for Protocol IEs
--
-- **************************************************************
ProtocolIE-Container { E1AP-PROTOCOL-IES : IEsSetParam} ::=
SEQUENCE (SIZE (0..maxProtocolIEs)) OF
ProtocolIE-Field {{IEsSetParam}}
ProtocolIE-SingleContainer { E1AP-PROTOCOL-IES : IEsSetParam} ::=
ProtocolIE-Field {{IEsSetParam}}
ProtocolIE-Field { E1AP-PROTOCOL-IES : IEsSetParam} ::= SEQUENCE {
id E1AP-PROTOCOL-IES.&id ({IEsSetParam}),
criticality E1AP-PROTOCOL-IES.&criticality ({IEsSetParam}{@id}),
value E1AP-PROTOCOL-IES.&Value ({IEsSetParam}{@id})
}
-- **************************************************************
--
-- Container Lists for Protocol IE Containers
--
-- **************************************************************
ProtocolIE-ContainerList {INTEGER : lowerBound, INTEGER : upperBound, E1AP-PROTOCOL-IES : IEsSetParam} ::=
SEQUENCE (SIZE (lowerBound..upperBound)) OF
ProtocolIE-Container {{IEsSetParam}}
-- **************************************************************
--
-- Container for Protocol Extensions
--
-- **************************************************************
ProtocolExtensionContainer { E1AP-PROTOCOL-EXTENSION : ExtensionSetParam} ::=
SEQUENCE (SIZE (1..maxProtocolExtensions)) OF
ProtocolExtensionField {{ExtensionSetParam}}
ProtocolExtensionField { E1AP-PROTOCOL-EXTENSION : ExtensionSetParam} ::= SEQUENCE {
id E1AP-PROTOCOL-EXTENSION.&id ({ExtensionSetParam}),
criticality E1AP-PROTOCOL-EXTENSION.&criticality ({ExtensionSetParam}{@id}),
extensionValue E1AP-PROTOCOL-EXTENSION.&Extension ({ExtensionSetParam}{@id})
}
-- **************************************************************
--
-- Container for Private IEs
--
-- **************************************************************
PrivateIE-Container { E1AP-PRIVATE-IES : IEsSetParam} ::=
SEQUENCE (SIZE (1..maxPrivateIEs)) OF
PrivateIE-Field {{IEsSetParam}}
PrivateIE-Field { E1AP-PRIVATE-IES : IEsSetParam} ::= SEQUENCE {
id E1AP-PRIVATE-IES.&id ({IEsSetParam}),
criticality E1AP-PRIVATE-IES.&criticality ({IEsSetParam}{@id}),
value E1AP-PRIVATE-IES.&Value ({IEsSetParam}{@id})
}
END

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,290 @@
-- 3GPP TS 38.463 V15.0.0 (2018-06)
-- **************************************************************
--
-- Elementary Procedure definitions
--
-- **************************************************************
E1AP-PDU-Descriptions {
itu-t (0) identified-organization (4) etsi (0) mobileDomain (0)
ngran-access (22) modules (3) e1ap (5) version1 (1) e1ap-PDU-Descriptions (0) }
DEFINITIONS AUTOMATIC TAGS ::=
BEGIN
-- **************************************************************
--
-- IE parameter types from other modules
--
-- **************************************************************
IMPORTS
Criticality,
ProcedureCode
FROM E1AP-CommonDataTypes
Reset,
ResetAcknowledge,
ErrorIndication,
GNB-CU-UP-E1SetupRequest,
GNB-CU-UP-E1SetupResponse,
GNB-CU-UP-E1SetupFailure,
GNB-CU-CP-E1SetupRequest,
GNB-CU-CP-E1SetupResponse,
GNB-CU-CP-E1SetupFailure,
GNB-CU-UP-ConfigurationUpdate,
GNB-CU-UP-ConfigurationUpdateAcknowledge,
GNB-CU-UP-ConfigurationUpdateFailure,
GNB-CU-CP-ConfigurationUpdate,
GNB-CU-CP-ConfigurationUpdateAcknowledge,
GNB-CU-CP-ConfigurationUpdateFailure,
BearerContextSetupRequest,
BearerContextSetupResponse,
BearerContextSetupFailure,
BearerContextModificationRequest,
BearerContextModificationResponse,
BearerContextModificationFailure,
BearerContextModificationRequired,
BearerContextModificationConfirm,
BearerContextReleaseCommand,
BearerContextReleaseComplete,
BearerContextReleaseRequest,
BearerContextInactivityNotification,
DLDataNotification,
DataUsageReport,
E1ReleaseRequest,
E1ReleaseResponse,
PrivateMessage
FROM E1AP-PDU-Contents
id-reset,
id-errorIndication,
id-gNB-CU-UP-E1Setup,
id-gNB-CU-CP-E1Setup,
id-gNB-CU-UP-ConfigurationUpdate,
id-gNB-CU-CP-ConfigurationUpdate,
id-e1Release,
id-bearerContextSetup,
id-bearerContextModification,
id-bearerContextModificationRequired,
id-bearerContextRelease,
id-bearerContextReleaseRequest,
id-bearerContextInactivityNotification,
id-dLDataNotification,
id-dataUsageReport,
id-privateMessage
FROM E1AP-Constants;
-- **************************************************************
--
-- Interface Elementary Procedure Class
--
-- **************************************************************
E1AP-ELEMENTARY-PROCEDURE ::= CLASS {
&InitiatingMessage ,
&SuccessfulOutcome OPTIONAL,
&UnsuccessfulOutcome OPTIONAL,
&procedureCode ProcedureCode UNIQUE,
&criticality Criticality DEFAULT ignore
}
WITH SYNTAX {
INITIATING MESSAGE &InitiatingMessage
[SUCCESSFUL OUTCOME &SuccessfulOutcome]
[UNSUCCESSFUL OUTCOME &UnsuccessfulOutcome]
PROCEDURE CODE &procedureCode
[CRITICALITY &criticality]
}
-- **************************************************************
--
-- Interface PDU Definition
--
-- **************************************************************
E1AP-PDU ::= CHOICE {
initiatingMessage InitiatingMessage,
successfulOutcome SuccessfulOutcome,
unsuccessfulOutcome UnsuccessfulOutcome,
...
}
InitiatingMessage ::= SEQUENCE {
procedureCode E1AP-ELEMENTARY-PROCEDURE.&procedureCode ({E1AP-ELEMENTARY-PROCEDURES}),
criticality E1AP-ELEMENTARY-PROCEDURE.&criticality ({E1AP-ELEMENTARY-PROCEDURES}{@procedureCode}),
value E1AP-ELEMENTARY-PROCEDURE.&InitiatingMessage ({E1AP-ELEMENTARY-PROCEDURES}{@procedureCode})
}
SuccessfulOutcome ::= SEQUENCE {
procedureCode E1AP-ELEMENTARY-PROCEDURE.&procedureCode ({E1AP-ELEMENTARY-PROCEDURES}),
criticality E1AP-ELEMENTARY-PROCEDURE.&criticality ({E1AP-ELEMENTARY-PROCEDURES}{@procedureCode}),
value E1AP-ELEMENTARY-PROCEDURE.&SuccessfulOutcome ({E1AP-ELEMENTARY-PROCEDURES}{@procedureCode})
}
UnsuccessfulOutcome ::= SEQUENCE {
procedureCode E1AP-ELEMENTARY-PROCEDURE.&procedureCode ({E1AP-ELEMENTARY-PROCEDURES}),
criticality E1AP-ELEMENTARY-PROCEDURE.&criticality ({E1AP-ELEMENTARY-PROCEDURES}{@procedureCode}),
value E1AP-ELEMENTARY-PROCEDURE.&UnsuccessfulOutcome ({E1AP-ELEMENTARY-PROCEDURES}{@procedureCode})
}
-- **************************************************************
--
-- Interface Elementary Procedure List
--
-- **************************************************************
E1AP-ELEMENTARY-PROCEDURES E1AP-ELEMENTARY-PROCEDURE ::= {
E1AP-ELEMENTARY-PROCEDURES-CLASS-1 |
E1AP-ELEMENTARY-PROCEDURES-CLASS-2 ,
...
}
E1AP-ELEMENTARY-PROCEDURES-CLASS-1 E1AP-ELEMENTARY-PROCEDURE ::= {
reset |
gNB-CU-UP-E1Setup |
gNB-CU-CP-E1Setup |
gNB-CU-UP-ConfigurationUpdate |
gNB-CU-CP-ConfigurationUpdate |
e1Release |
bearerContextSetup |
bearerContextModification |
bearerContextModificationRequired |
bearerContextRelease ,
...
}
E1AP-ELEMENTARY-PROCEDURES-CLASS-2 E1AP-ELEMENTARY-PROCEDURE ::= {
errorIndication |
bearerContextReleaseRequest |
bearerContextInactivityNotification |
dLDataNotification |
dataUsageReport |
privateMessage ,
...
}
-- **************************************************************
--
-- Interface Elementary Procedures
--
-- **************************************************************
reset E1AP-ELEMENTARY-PROCEDURE ::= {
INITIATING MESSAGE Reset
SUCCESSFUL OUTCOME ResetAcknowledge
PROCEDURE CODE id-reset
CRITICALITY reject
}
errorIndication E1AP-ELEMENTARY-PROCEDURE ::= {
INITIATING MESSAGE ErrorIndication
PROCEDURE CODE id-errorIndication
CRITICALITY ignore
}
gNB-CU-UP-E1Setup E1AP-ELEMENTARY-PROCEDURE ::= {
INITIATING MESSAGE GNB-CU-UP-E1SetupRequest
SUCCESSFUL OUTCOME GNB-CU-UP-E1SetupResponse
UNSUCCESSFUL OUTCOME GNB-CU-UP-E1SetupFailure
PROCEDURE CODE id-gNB-CU-UP-E1Setup
CRITICALITY reject
}
gNB-CU-CP-E1Setup E1AP-ELEMENTARY-PROCEDURE ::= {
INITIATING MESSAGE GNB-CU-CP-E1SetupRequest
SUCCESSFUL OUTCOME GNB-CU-CP-E1SetupResponse
UNSUCCESSFUL OUTCOME GNB-CU-CP-E1SetupFailure
PROCEDURE CODE id-gNB-CU-CP-E1Setup
CRITICALITY reject
}
gNB-CU-UP-ConfigurationUpdate E1AP-ELEMENTARY-PROCEDURE ::= {
INITIATING MESSAGE GNB-CU-UP-ConfigurationUpdate
SUCCESSFUL OUTCOME GNB-CU-UP-ConfigurationUpdateAcknowledge
UNSUCCESSFUL OUTCOME GNB-CU-UP-ConfigurationUpdateFailure
PROCEDURE CODE id-gNB-CU-UP-ConfigurationUpdate
CRITICALITY reject
}
gNB-CU-CP-ConfigurationUpdate E1AP-ELEMENTARY-PROCEDURE ::= {
INITIATING MESSAGE GNB-CU-CP-ConfigurationUpdate
SUCCESSFUL OUTCOME GNB-CU-CP-ConfigurationUpdateAcknowledge
UNSUCCESSFUL OUTCOME GNB-CU-CP-ConfigurationUpdateFailure
PROCEDURE CODE id-gNB-CU-CP-ConfigurationUpdate
CRITICALITY reject
}
e1Release E1AP-ELEMENTARY-PROCEDURE ::= {
INITIATING MESSAGE E1ReleaseRequest
SUCCESSFUL OUTCOME E1ReleaseResponse
PROCEDURE CODE id-e1Release
CRITICALITY reject
}
bearerContextSetup E1AP-ELEMENTARY-PROCEDURE ::= {
INITIATING MESSAGE BearerContextSetupRequest
SUCCESSFUL OUTCOME BearerContextSetupResponse
UNSUCCESSFUL OUTCOME BearerContextSetupFailure
PROCEDURE CODE id-bearerContextSetup
CRITICALITY reject
}
bearerContextModification E1AP-ELEMENTARY-PROCEDURE ::= {
INITIATING MESSAGE BearerContextModificationRequest
SUCCESSFUL OUTCOME BearerContextModificationResponse
UNSUCCESSFUL OUTCOME BearerContextModificationFailure
PROCEDURE CODE id-bearerContextModification
CRITICALITY reject
}
bearerContextModificationRequired E1AP-ELEMENTARY-PROCEDURE ::= {
INITIATING MESSAGE BearerContextModificationRequired
SUCCESSFUL OUTCOME BearerContextModificationConfirm
PROCEDURE CODE id-bearerContextModificationRequired
CRITICALITY reject
}
bearerContextRelease E1AP-ELEMENTARY-PROCEDURE ::= {
INITIATING MESSAGE BearerContextReleaseCommand
SUCCESSFUL OUTCOME BearerContextReleaseComplete
PROCEDURE CODE id-bearerContextRelease
CRITICALITY reject
}
bearerContextReleaseRequest E1AP-ELEMENTARY-PROCEDURE ::= {
INITIATING MESSAGE BearerContextReleaseRequest
PROCEDURE CODE id-bearerContextReleaseRequest
CRITICALITY ignore
}
bearerContextInactivityNotification E1AP-ELEMENTARY-PROCEDURE ::= {
INITIATING MESSAGE BearerContextInactivityNotification
PROCEDURE CODE id-bearerContextInactivityNotification
CRITICALITY ignore
}
dLDataNotification E1AP-ELEMENTARY-PROCEDURE ::= {
INITIATING MESSAGE DLDataNotification
PROCEDURE CODE id-dLDataNotification
CRITICALITY ignore
}
dataUsageReport E1AP-ELEMENTARY-PROCEDURE ::= {
INITIATING MESSAGE DataUsageReport
PROCEDURE CODE id-dataUsageReport
CRITICALITY ignore
}
privateMessage E1AP-ELEMENTARY-PROCEDURE ::= {
INITIATING MESSAGE PrivateMessage
PROCEDURE CODE id-privateMessage
CRITICALITY ignore
}
END

View File

@ -0,0 +1,389 @@
# e1ap.cnf
# e1ap conformation file
#.OPT
PER
ALIGNED
#.END
#.USE_VALS_EXT
ProcedureCode
ProtocolIE-ID
#.EXPORTS
#.PDU
E1AP-PDU
#.MAKE_ENUM
ProcedureCode
ProtocolIE-ID
#.NO_EMIT
#.OMIT_ASSIGNMENT
# Get rid of unused code warnings
CP-TNL-Information
Presence
ProtocolIE-ContainerList
ProtocolExtensionID
#.END
#.TYPE_RENAME
InitiatingMessage/value InitiatingMessage_value
SuccessfulOutcome/value SuccessfulOutcome_value
UnsuccessfulOutcome/value UnsuccessfulOutcome_value
#.FIELD_RENAME
InitiatingMessage/value initiatingMessagevalue
UnsuccessfulOutcome/value unsuccessfulOutcome_value
SuccessfulOutcome/value successfulOutcome_value
PrivateIE-Field/id private_id
ProtocolExtensionField/id ext_id
#PrivateIE-Field/value private_value
ProtocolIE-Field/value ie_field_value
#--- Parameterization is not supported in asn2wrs ---
#ProtocolIE-ContainerList {INTEGER : lowerBound, INTEGER : upperBound, E1AP-PROTOCOL-IES : IEsSetParam} ::=
# SEQUENCE (SIZE (lowerBound..upperBound)) OF
# ProtocolIE-Container {{IEsSetParam}}
# #.FN_PARS ProtocolIE-ContainerList
# MIN_VAL = asn1_param_get_integer(%(ACTX)s,"lowerBound")
# MAX_VAL = asn1_param_get_integer(%(ACTX)s,"upperBound")
# #.FN_HDR ProtocolIE-ContainerList
# static const asn1_par_def_t ProtocolIE_ContainerList_pars[] = {
# { "lowerBound", ASN1_PAR_INTEGER },
# { "upperBound", ASN1_PAR_INTEGER },
# { NULL, (asn1_par_type)0 }
# };
# asn1_stack_frame_check(actx, "ProtocolIE-ContainerList", ProtocolIE_ContainerList_pars);
# #.END
#.FN_BODY ProtocolIE-ID VAL_PTR=&e1ap_data->protocol_ie_id
e1ap_private_data_t *e1ap_data = e1ap_get_private_data(actx->pinfo);
%(DEFAULT_BODY)s
#.FN_FTR ProtocolIE-ID
if (tree) {
proto_item_append_text(proto_item_get_parent_nth(actx->created_item, 2), ": %s",
val_to_str_ext(e1ap_data->protocol_ie_id, &e1ap_ProtocolIE_ID_vals_ext, "unknown (%d)"));
}
#.FN_PARS ProtocolIE-Field/value FN_VARIANT=_pdu_new TYPE_REF_FN=dissect_ProtocolIEFieldValue
# #.FN_BODY ProtocolExtensionID VAL_PTR=&e1ap_data->protocol_extension_id
# e1ap_private_data_t *e1ap_data = e1ap_get_private_data(actx->pinfo);
# %(DEFAULT_BODY)s
#
# #.FN_PARS ProtocolExtensionField/extensionValue FN_VARIANT=_pdu_new TYPE_REF_FN=dissect_ProtocolExtensionFieldExtensionValue
#.FN_BODY ProcedureCode VAL_PTR = &e1ap_data->procedure_code
e1ap_private_data_t *e1ap_data = e1ap_get_private_data(actx->pinfo);
%(DEFAULT_BODY)s
#.END
#.FN_PARS InitiatingMessage/value FN_VARIANT=_pdu_new TYPE_REF_FN=dissect_InitiatingMessageValue
#.FN_HDR InitiatingMessage/value
e1ap_private_data_t *e1ap_data = e1ap_get_private_data(actx->pinfo);
e1ap_data->message_type = INITIATING_MESSAGE;
#.FN_PARS SuccessfulOutcome/value FN_VARIANT=_pdu_new TYPE_REF_FN=dissect_SuccessfulOutcomeValue
#.FN_HDR SuccessfulOutcome/value
e1ap_private_data_t *e1ap_data = e1ap_get_private_data(actx->pinfo);
e1ap_data->message_type = SUCCESSFUL_OUTCOME;
#.FN_PARS UnsuccessfulOutcome/value FN_VARIANT=_pdu_new TYPE_REF_FN=dissect_UnsuccessfulOutcomeValue
#.FN_HDR UnsuccessfulOutcome/value
e1ap_private_data_t *e1ap_data = e1ap_get_private_data(actx->pinfo);
e1ap_data->message_type = UNSUCCESSFUL_OUTCOME;
#.END
#.FN_HDR PrivateIE-ID
e1ap_private_data_t *e1ap_data = e1ap_get_private_data(actx->pinfo);
e1ap_data->obj_id = NULL;
#.FN_BODY PrivateIE-ID/global FN_VARIANT = _str VAL_PTR = &e1ap_data->obj_id
e1ap_private_data_t *e1ap_data = e1ap_get_private_data(actx->pinfo);
%(DEFAULT_BODY)s
#.FN_BODY PrivateIE-Field/value
e1ap_private_data_t *e1ap_data = e1ap_get_private_data(actx->pinfo);
if (e1ap_data->obj_id) {
offset = call_per_oid_callback(e1ap_data->obj_id, tvb, actx->pinfo, tree, offset, actx, hf_index);
} else {
%(DEFAULT_BODY)s
}
#.ASSIGN_VALUE_TO_TYPE # E1AP does not have constants assigned to types, they are pure INTEGER
# ProcedureCode
id-reset ProcedureCode
id-errorIndication ProcedureCode
id-privateMessage ProcedureCode
id-gNB-CU-UP-E1Setup ProcedureCode
id-gNB-CU-CP-E1Setup ProcedureCode
id-gNB-CU-UP-ConfigurationUpdate ProcedureCode
id-gNB-CU-CP-ConfigurationUpdate ProcedureCode
id-e1Release ProcedureCode
id-bearerContextSetup ProcedureCode
id-bearerContextModification ProcedureCode
id-bearerContextModificationRequired ProcedureCode
id-bearerContextRelease ProcedureCode
id-bearerContextReleaseRequest ProcedureCode
id-bearerContextInactivityNotification ProcedureCode
id-dLDataNotification ProcedureCode
id-dataUsageReport ProcedureCode
# ProtocolIE-ID
id-Cause ProtocolIE-ID
id-CriticalityDiagnostics ProtocolIE-ID
id-gNB-CU-CP-UE-E1AP-ID ProtocolIE-ID
id-gNB-CU-UP-UE-E1AP-ID ProtocolIE-ID
id-ResetType ProtocolIE-ID
id-UE-associatedLogicalE1-ConnectionItem ProtocolIE-ID
id-UE-associatedLogicalE1-ConnectionListResAck ProtocolIE-ID
id-gNB-CU-UP-ID ProtocolIE-ID
id-gNB-CU-UP-Name ProtocolIE-ID
id-gNB-CU-CP-Name ProtocolIE-ID
id-CNSupport ProtocolIE-ID
id-SupportedPLMNs ProtocolIE-ID
id-SupportedPLMNs-Item ProtocolIE-ID
id-TimeToWait ProtocolIE-ID
id-SecurityInformation ProtocolIE-ID
id-UEDLAggregateMaximumBitRate ProtocolIE-ID
id-System-BearerContextSetupRequest ProtocolIE-ID
id-System-BearerContextSetupResponse ProtocolIE-ID
id-BearerContextStatusChange ProtocolIE-ID
id-System-BearerContextModificationRequest ProtocolIE-ID
id-System-BearerContextModificationResponse ProtocolIE-ID
id-System-BearerContextModificationConfirm ProtocolIE-ID
id-System-BearerContextModificationRequired ProtocolIE-ID
id-DRB-Status-List ProtocolIE-ID
id-DRB-Status-Item ProtocolIE-ID
id-DRB-Activity-List ProtocolIE-ID
id-DRB-Activity-Item ProtocolIE-ID
id-Data-Usage-Report-List ProtocolIE-ID
#.END
#.REGISTER
#E1AP-PROTOCOL-IES
Cause N e1ap.ies id-Cause
CriticalityDiagnostics N e1ap.ies id-CriticalityDiagnostics
GNB-CU-CP-UE-E1AP-ID N e1ap.ies id-gNB-CU-CP-UE-E1AP-ID
GNB-CU-UP-UE-E1AP-ID N e1ap.ies id-gNB-CU-UP-UE-E1AP-ID
ResetType N e1ap.ies id-ResetType
UE-associatedLogicalE1-ConnectionItem N e1ap.ies id-UE-associatedLogicalE1-ConnectionItem
UE-associatedLogicalE1-ConnectionListResAck N e1ap.ies id-UE-associatedLogicalE1-ConnectionListResAck
GNB-CU-UP-ID N e1ap.ies id-gNB-CU-UP-ID
GNB-CU-UP-Name N e1ap.ies id-gNB-CU-UP-Name
GNB-CU-CP-Name N e1ap.ies id-gNB-CU-CP-Name
CNSupport N e1ap.ies id-CNSupport
SupportedPLMNs-List N e1ap.ies id-SupportedPLMNs
SupportedPLMNs-Item N e1ap.ies id-SupportedPLMNs-Item
TimeToWait N e1ap.ies id-TimeToWait
SecurityInformation N e1ap.ies id-SecurityInformation
BitRate N e1ap.ies id-UEDLAggregateMaximumBitRate
System-BearerContextSetupRequest N e1ap.ies id-System-BearerContextSetupRequest
System-BearerContextSetupResponse N e1ap.ies id-System-BearerContextSetupResponse
BearerContextStatusChange N e1ap.ies id-BearerContextStatusChange
System-BearerContextModificationRequest N e1ap.ies id-System-BearerContextModificationRequest
System-BearerContextModificationResponse N e1ap.ies id-System-BearerContextModificationResponse
System-BearerContextModificationConfirm N e1ap.ies id-System-BearerContextModificationConfirm
System-BearerContextModificationRequired N e1ap.ies id-System-BearerContextModificationRequired
DRB-Status-List N e1ap.ies id-DRB-Status-List
DRB-Status-Item N e1ap.ies id-DRB-Status-Item
DRB-Activity-List N e1ap.ies id-DRB-Activity-List
DRB-Activity-Item N e1ap.ies id-DRB-Activity-Item
Data-Usage-Report-List N e1ap.ies id-Data-Usage-Report-List
#E1AP-PROTOCOL-EXTENSION
#E1AP-ELEMENTARY-PROCEDURE
Reset N e1ap.proc.imsg id-reset
ResetAcknowledge N e1ap.proc.sout id-reset
ErrorIndication N e1ap.proc.imsg id-errorIndication
GNB-CU-UP-E1SetupRequest N e1ap.proc.imsg id-gNB-CU-UP-E1Setup
GNB-CU-UP-E1SetupResponse N e1ap.proc.sout id-gNB-CU-UP-E1Setup
GNB-CU-UP-E1SetupFailure N e1ap.proc.uout id-gNB-CU-UP-E1Setup
GNB-CU-CP-E1SetupRequest N e1ap.proc.imsg id-gNB-CU-CP-E1Setup
GNB-CU-CP-E1SetupResponse N e1ap.proc.sout id-gNB-CU-CP-E1Setup
GNB-CU-CP-E1SetupFailure N e1ap.proc.uout id-gNB-CU-CP-E1Setup
GNB-CU-UP-ConfigurationUpdate N e1ap.proc.imsg id-gNB-CU-UP-ConfigurationUpdate
GNB-CU-UP-ConfigurationUpdateAcknowledge N e1ap.proc.sout id-gNB-CU-UP-ConfigurationUpdate
GNB-CU-UP-ConfigurationUpdateFailure N e1ap.proc.uout id-gNB-CU-UP-ConfigurationUpdate
GNB-CU-CP-ConfigurationUpdate N e1ap.proc.imsg id-gNB-CU-CP-ConfigurationUpdate
GNB-CU-CP-ConfigurationUpdateAcknowledge N e1ap.proc.sout id-gNB-CU-CP-ConfigurationUpdate
GNB-CU-CP-ConfigurationUpdateFailure N e1ap.proc.uout id-gNB-CU-CP-ConfigurationUpdate
E1ReleaseRequest N e1ap.proc.imsg id-e1Release
E1ReleaseResponse N e1ap.proc.sout id-e1Release
BearerContextSetupRequest N e1ap.proc.imsg id-bearerContextSetup
BearerContextSetupResponse N e1ap.proc.sout id-bearerContextSetup
BearerContextSetupFailure N e1ap.proc.uout id-bearerContextSetup
BearerContextModificationRequest N e1ap.proc.imsg id-bearerContextModification
BearerContextModificationResponse N e1ap.proc.sout id-bearerContextModification
BearerContextModificationFailure N e1ap.proc.uout id-bearerContextModification
BearerContextModificationRequired N e1ap.proc.imsg id-bearerContextModificationRequired
BearerContextModificationConfirm N e1ap.proc.sout id-bearerContextModificationRequired
BearerContextReleaseCommand N e1ap.proc.imsg id-bearerContextRelease
BearerContextReleaseComplete N e1ap.proc.sout id-bearerContextRelease
BearerContextReleaseRequest N e1ap.proc.imsg id-bearerContextReleaseRequest
BearerContextInactivityNotification N e1ap.proc.imsg id-bearerContextInactivityNotification
DLDataNotification N e1ap.proc.imsg id-dLDataNotification
DataUsageReport N e1ap.proc.imsg id-dataUsageReport
PrivateMessage N e1ap.proc.imsg id-privateMessage
#.FN_BODY PLMN-Identity VAL_PTR = &param_tvb
tvbuff_t *param_tvb = NULL;
%(DEFAULT_BODY)s
if (param_tvb) {
proto_tree *subtree = proto_item_add_subtree(actx->created_item, ett_e1ap_PLMN_Identity);
dissect_e212_mcc_mnc(param_tvb, actx->pinfo, subtree, 0, E212_NONE, FALSE);
}
#.TYPE_ATTR
BitRate DISPLAY=BASE_DEC|BASE_UNIT_STRING STRINGS=&units_bit_sec
#.FN_BODY DRB-Usage-Report-Item/startTimeStamp VAL_PTR = &timestamp_tvb
tvbuff_t *timestamp_tvb = NULL;
%(DEFAULT_BODY)s
#.FN_FTR DRB-Usage-Report-Item/startTimeStamp
if (timestamp_tvb) {
proto_item_append_text(actx->created_item, " (%s)", tvb_ntp_fmt_ts_sec(timestamp_tvb, 0));
}
#.FN_BODY DRB-Usage-Report-Item/endTimeStamp VAL_PTR = &timestamp_tvb
tvbuff_t *timestamp_tvb = NULL;
%(DEFAULT_BODY)s
#.FN_FTR DRB-Usage-Report-Item/endTimeStamp
if (timestamp_tvb) {
proto_item_append_text(actx->created_item, " (%s)", tvb_ntp_fmt_ts_sec(timestamp_tvb, 0));
}
#.TYPE_ATTR
DRB-Usage-Report-Item/usageCountUL DISPLAY=BASE_DEC|BASE_UNIT_STRING STRINGS=&units_octet_octets
#.TYPE_ATTR
DRB-Usage-Report-Item/usageCountDL DISPLAY=BASE_DEC|BASE_UNIT_STRING STRINGS=&units_octet_octets
#.TYPE_ATTR
MaxPacketLossRate DISPLAY = BASE_CUSTOM STRINGS = CF_FUNC(e1ap_MaxPacketLossRate_fmt)
#.FN_BODY TransportLayerAddress VAL_PTR = &param_tvb
tvbuff_t *param_tvb = NULL;
%(DEFAULT_BODY)s
if (param_tvb) {
proto_tree *subtree;
gint tvb_len;
tvb_len = tvb_reported_length(param_tvb);
subtree = proto_item_add_subtree(actx->created_item, ett_e1ap_TransportLayerAddress);
if (tvb_len == 4) {
/* IPv4 */
proto_tree_add_item(subtree, hf_e1ap_transportLayerAddressIPv4, param_tvb, 0, 4, ENC_BIG_ENDIAN);
} else if (tvb_len == 16) {
/* IPv6 */
proto_tree_add_item(subtree, hf_e1ap_transportLayerAddressIPv6, param_tvb, 0, 16, ENC_NA);
} else if (tvb_len == 20) {
/* IPv4 */
proto_tree_add_item(subtree, hf_e1ap_transportLayerAddressIPv4, param_tvb, 0, 4, ENC_BIG_ENDIAN);
/* IPv6 */
proto_tree_add_item(subtree, hf_e1ap_transportLayerAddressIPv6, param_tvb, 4, 16, ENC_NA);
}
}
#.FN_HDR Reset
col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "Reset");
#.FN_HDR ResetAcknowledge
col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "ResetAcknowledge");
#.FN_HDR ErrorIndication
col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "ErrorIndication");
#.FN_HDR GNB-CU-UP-E1SetupRequest
col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "GNB-CU-UP-E1SetupRequest");
#.FN_HDR GNB-CU-UP-E1SetupResponse
col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "GNB-CU-UP-E1SetupResponse");
#.FN_HDR GNB-CU-UP-E1SetupFailure
col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "GNB-CU-UP-E1SetupFailure");
#.FN_HDR GNB-CU-CP-E1SetupRequest
col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "GNB-CU-CP-E1SetupRequest");
#.FN_HDR GNB-CU-CP-E1SetupResponse
col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "GNB-CU-CP-E1SetupResponse");
#.FN_HDR GNB-CU-CP-E1SetupFailure
col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "GNB-CU-CP-E1SetupFailure");
#.FN_HDR GNB-CU-UP-ConfigurationUpdate
col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "GNB-CU-UP-ConfigurationUpdate");
#.FN_HDR GNB-CU-UP-ConfigurationUpdateAcknowledge
col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "GNB-CU-UP-ConfigurationUpdateAcknowledge");
#.FN_HDR GNB-CU-UP-ConfigurationUpdateFailure
col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "GNB-CU-UP-ConfigurationUpdateFailure");
#.FN_HDR GNB-CU-CP-ConfigurationUpdate
col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "GNB-CU-CP-ConfigurationUpdate");
#.FN_HDR GNB-CU-CP-ConfigurationUpdateAcknowledge
col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "GNB-CU-CP-ConfigurationUpdateAcknowledge");
#.FN_HDR GNB-CU-CP-ConfigurationUpdateFailure
col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "GNB-CU-CP-ConfigurationUpdateFailure");
#.FN_HDR E1ReleaseRequest
col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "E1ReleaseRequest");
#.FN_HDR E1ReleaseResponse
col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "E1ReleaseResponse");
#.FN_HDR BearerContextSetupRequest
col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "BearerContextSetupRequest");
#.FN_HDR BearerContextSetupResponse
col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "BearerContextSetupResponse");
#.FN_HDR BearerContextSetupFailure
col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "BearerContextSetupFailure");
#.FN_HDR BearerContextModificationRequest
col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "BearerContextModificationRequest");
#.FN_HDR BearerContextModificationResponse
col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "BearerContextModificationResponse");
#.FN_HDR BearerContextModificationFailure
col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "BearerContextModificationFailure");
#.FN_HDR BearerContextModificationRequired
col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "BearerContextModificationRequired");
#.FN_HDR BearerContextModificationConfirm
col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "BearerContextModificationConfirm");
#.FN_HDR BearerContextReleaseCommand
col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "BearerContextReleaseCommand");
#.FN_HDR BearerContextReleaseComplete
col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "BearerContextReleaseComplete");
#.FN_HDR BearerContextReleaseRequest
col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "BearerContextReleaseRequest");
#.FN_HDR BearerContextInactivityNotification
col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "BearerContextInactivityNotification");
#.FN_HDR DLDataNotification
col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "DLDataNotification");
#.FN_HDR DataUsageReport
col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "DataUsageReport");
#.FN_HDR PrivateMessage
col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "PrivateMessage");
#.END
#
# Editor modelines - http://www.wireshark.org/tools/modelines.html
#
# Local variables:
# c-basic-offset: 2
# tab-width: 8
# indent-tabs-mode: nil
# End:
#
# vi: set shiftwidth=2 tabstop=8 expandtab:
# :indentSize=2:tabSize=8:noTabs=true:
#

View File

@ -0,0 +1,233 @@
/* packet-e1ap.c
* Routines for E-UTRAN E1 Application Protocol (E1AP) packet dissection
* Copyright 2018, Pascal Quantin <pascal.quantin@gmail.com>
*
* Wireshark - Network traffic analyzer
* By Gerald Combs <gerald@wireshark.org>
* Copyright 1998 Gerald Combs
*
* SPDX-License-Identifier: GPL-2.0-or-later
*
* References: 3GPP TS 38.463 V15.0.0 (2018-06)
*/
#include "config.h"
#include <epan/packet.h>
#include <epan/asn1.h>
#include <epan/sctpppids.h>
#include <epan/proto_data.h>
#include "packet-per.h"
#include "packet-e212.h"
#include "packet-ntp.h"
#define PNAME "E1 Application Protocol"
#define PSNAME "E1AP"
#define PFNAME "e1ap"
// port number not assigned by IANA yet
//#define SCTP_PORT_E1AP 38462
void proto_register_e1ap(void);
void proto_reg_handoff_e1ap(void);
#include "packet-e1ap-val.h"
/* Initialize the protocol and registered fields */
static int proto_e1ap = -1;
static int hf_e1ap_transportLayerAddressIPv4 = -1;
static int hf_e1ap_transportLayerAddressIPv6 = -1;
#include "packet-e1ap-hf.c"
/* Initialize the subtree pointers */
static gint ett_e1ap = -1;
static gint ett_e1ap_PLMN_Identity = -1;
static gint ett_e1ap_TransportLayerAddress = -1;
#include "packet-e1ap-ett.c"
enum{
INITIATING_MESSAGE,
SUCCESSFUL_OUTCOME,
UNSUCCESSFUL_OUTCOME
};
typedef struct {
guint32 message_type;
guint32 procedure_code;
guint32 protocol_ie_id;
guint32 protocol_extension_id;
const char *obj_id;
} e1ap_private_data_t;
typedef struct {
guint32 message_type;
guint32 ProcedureCode;
guint32 ProtocolIE_ID;
guint32 ProtocolExtensionID;
} e1ap_ctx_t;
/* Global variables */
static dissector_handle_t e1ap_handle;
/* Dissector tables */
static dissector_table_t e1ap_ies_dissector_table;
static dissector_table_t e1ap_extension_dissector_table;
static dissector_table_t e1ap_proc_imsg_dissector_table;
static dissector_table_t e1ap_proc_sout_dissector_table;
static dissector_table_t e1ap_proc_uout_dissector_table;
static int dissect_ProtocolIEFieldValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *);
//static int dissect_ProtocolExtensionFieldExtensionValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *);
static int dissect_InitiatingMessageValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *);
static int dissect_SuccessfulOutcomeValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *);
static int dissect_UnsuccessfulOutcomeValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *);
static void
e1ap_MaxPacketLossRate_fmt(gchar *s, guint32 v)
{
g_snprintf(s, ITEM_LABEL_LENGTH, "%.1f %% (%u)", (float)v/10, v);
}
static e1ap_private_data_t*
e1ap_get_private_data(packet_info *pinfo)
{
e1ap_private_data_t *e1ap_data = (e1ap_private_data_t*)p_get_proto_data(pinfo->pool, pinfo, proto_e1ap, 0);
if (!e1ap_data) {
e1ap_data = wmem_new0(pinfo->pool, e1ap_private_data_t);
p_add_proto_data(pinfo->pool, pinfo, proto_e1ap, 0, e1ap_data);
}
return e1ap_data;
}
#include "packet-e1ap-fn.c"
static int dissect_ProtocolIEFieldValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
{
e1ap_ctx_t e1ap_ctx;
e1ap_private_data_t *e1ap_data = e1ap_get_private_data(pinfo);
e1ap_ctx.message_type = e1ap_data->message_type;
e1ap_ctx.ProcedureCode = e1ap_data->procedure_code;
e1ap_ctx.ProtocolIE_ID = e1ap_data->protocol_ie_id;
e1ap_ctx.ProtocolExtensionID = e1ap_data->protocol_extension_id;
return (dissector_try_uint_new(e1ap_ies_dissector_table, e1ap_data->protocol_ie_id, tvb, pinfo, tree, FALSE, &e1ap_ctx)) ? tvb_captured_length(tvb) : 0;
}
//static int dissect_ProtocolExtensionFieldExtensionValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
//{
// e1ap_ctx_t e1ap_ctx;
// e1ap_private_data_t *e1ap_data = e1ap_get_private_data(pinfo);
//
// e1ap_ctx.message_type = e1ap_data->message_type;
// e1ap_ctx.ProcedureCode = e1ap_data->procedure_code;
// e1ap_ctx.ProtocolIE_ID = e1ap_data->protocol_ie_id;
// e1ap_ctx.ProtocolExtensionID = e1ap_data->protocol_extension_id;
//
// return (dissector_try_uint_new(e1ap_extension_dissector_table, e1ap_data->protocol_extension_id, tvb, pinfo, tree, FALSE, &e1ap_ctx)) ? tvb_captured_length(tvb) : 0;
//}
static int dissect_InitiatingMessageValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data)
{
e1ap_private_data_t *e1ap_data = e1ap_get_private_data(pinfo);
return (dissector_try_uint_new(e1ap_proc_imsg_dissector_table, e1ap_data->procedure_code, tvb, pinfo, tree, FALSE, data)) ? tvb_captured_length(tvb) : 0;
}
static int dissect_SuccessfulOutcomeValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data)
{
e1ap_private_data_t *e1ap_data = e1ap_get_private_data(pinfo);
return (dissector_try_uint_new(e1ap_proc_sout_dissector_table, e1ap_data->procedure_code, tvb, pinfo, tree, FALSE, data)) ? tvb_captured_length(tvb) : 0;
}
static int dissect_UnsuccessfulOutcomeValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data)
{
e1ap_private_data_t *e1ap_data = e1ap_get_private_data(pinfo);
return (dissector_try_uint_new(e1ap_proc_uout_dissector_table, e1ap_data->procedure_code, tvb, pinfo, tree, FALSE, data)) ? tvb_captured_length(tvb) : 0;
}
static int
dissect_e1ap(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_)
{
proto_item *e1ap_item = NULL;
proto_tree *e1ap_tree = NULL;
/* make entry in the Protocol column on summary display */
col_set_str(pinfo->cinfo, COL_PROTOCOL, "E1AP");
col_clear(pinfo->cinfo, COL_INFO);
/* create the e1ap protocol tree */
e1ap_item = proto_tree_add_item(tree, proto_e1ap, tvb, 0, -1, ENC_NA);
e1ap_tree = proto_item_add_subtree(e1ap_item, ett_e1ap);
dissect_E1AP_PDU_PDU(tvb, pinfo, e1ap_tree, NULL);
return tvb_captured_length(tvb);
}
void proto_register_e1ap(void) {
/* List of fields */
static hf_register_info hf[] = {
{ &hf_e1ap_transportLayerAddressIPv4,
{ "IPv4 transportLayerAddress", "e1ap.transportLayerAddressIPv4",
FT_IPv4, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_e1ap_transportLayerAddressIPv6,
{ "IPv6 transportLayerAddress", "e1ap.transportLayerAddressIPv6",
FT_IPv6, BASE_NONE, NULL, 0,
NULL, HFILL }},
#include "packet-e1ap-hfarr.c"
};
/* List of subtrees */
static gint *ett[] = {
&ett_e1ap,
&ett_e1ap_PLMN_Identity,
&ett_e1ap_TransportLayerAddress,
#include "packet-e1ap-ettarr.c"
};
/* Register protocol */
proto_e1ap = proto_register_protocol(PNAME, PSNAME, PFNAME);
/* Register fields and subtrees */
proto_register_field_array(proto_e1ap, hf, array_length(hf));
proto_register_subtree_array(ett, array_length(ett));
/* Register dissector */
e1ap_handle = register_dissector("e1ap", dissect_e1ap, proto_e1ap);
/* Register dissector tables */
e1ap_ies_dissector_table = register_dissector_table("e1ap.ies", "E1AP-PROTOCOL-IES", proto_e1ap, FT_UINT32, BASE_DEC);
e1ap_extension_dissector_table = register_dissector_table("e1ap.extension", "E1AP-PROTOCOL-EXTENSION", proto_e1ap, FT_UINT32, BASE_DEC);
e1ap_proc_imsg_dissector_table = register_dissector_table("e1ap.proc.imsg", "E1AP-ELEMENTARY-PROCEDURE InitiatingMessage", proto_e1ap, FT_UINT32, BASE_DEC);
e1ap_proc_sout_dissector_table = register_dissector_table("e1ap.proc.sout", "E1AP-ELEMENTARY-PROCEDURE SuccessfulOutcome", proto_e1ap, FT_UINT32, BASE_DEC);
e1ap_proc_uout_dissector_table = register_dissector_table("e1ap.proc.uout", "E1AP-ELEMENTARY-PROCEDURE UnsuccessfulOutcome", proto_e1ap, FT_UINT32, BASE_DEC);
}
void
proto_reg_handoff_e1ap(void)
{
//dissector_add_uint_with_preference("sctp.port", SCTP_PORT_E1AP, e1ap_handle);
dissector_add_uint("sctp.ppi", E1AP_PROTOCOL_ID, e1ap_handle);
#include "packet-e1ap-dis-tab.c"
}
/*
* Editor modelines
*
* Local Variables:
* c-basic-offset: 2
* tab-width: 8
* indent-tabs-mode: nil
* End:
*
* ex: set shiftwidth=2 tabstop=8 expandtab:
* :indentSize=2:tabSize=8:noTabs=true:
*/

File diff suppressed because it is too large Load Diff

View File

@ -82,5 +82,7 @@
#define NGAP_PROTOCOL_ID 60
#define XNAP_PROTOCOL_ID 61
#define F1AP_PROTOCOL_ID 62
#define HTTP_SCTP_PROTOCOL_ID 63
#define E1AP_PROTOCOL_ID 64
#endif /* sctpppids.h */