diff --git a/docbook/release-notes.adoc b/docbook/release-notes.adoc index 260bdd6802..aae3791c51 100644 --- a/docbook/release-notes.adoc +++ b/docbook/release-notes.adoc @@ -105,9 +105,7 @@ State Synchronization Protocol (SSyncP) Tagged Image File Format (TIFF) TP-Link Smart Home Protocol R09.x (R09) -UAVCAN/CAN -UAVCAN DSDL -Van Jacobson PPP compression (VJC) +O-RAN E2AP -- === Updated Protocol Support diff --git a/epan/dissectors/CMakeLists.txt b/epan/dissectors/CMakeLists.txt index d430db1959..d1f75ea256 100644 --- a/epan/dissectors/CMakeLists.txt +++ b/epan/dissectors/CMakeLists.txt @@ -91,6 +91,7 @@ set(CLEAN_ASN1_DISSECTOR_SRC ${CMAKE_CURRENT_SOURCE_DIR}/packet-dop.c ${CMAKE_CURRENT_SOURCE_DIR}/packet-dsp.c ${CMAKE_CURRENT_SOURCE_DIR}/packet-e1ap.c + ${CMAKE_CURRENT_SOURCE_DIR}/packet-e2ap.c ${CMAKE_CURRENT_SOURCE_DIR}/packet-ess.c ${CMAKE_CURRENT_SOURCE_DIR}/packet-f1ap.c ${CMAKE_CURRENT_SOURCE_DIR}/packet-ftam.c diff --git a/epan/dissectors/asn1/CMakeLists.txt b/epan/dissectors/asn1/CMakeLists.txt index 0df6bfcc57..39a5069835 100644 --- a/epan/dissectors/asn1/CMakeLists.txt +++ b/epan/dissectors/asn1/CMakeLists.txt @@ -34,6 +34,7 @@ set(ASN1_SRC_DIRS dop dsp e1ap + e2ap ess f1ap ftam diff --git a/epan/dissectors/asn1/e2ap/CMakeLists.txt b/epan/dissectors/asn1/e2ap/CMakeLists.txt new file mode 100755 index 0000000000..b82a03b844 --- /dev/null +++ b/epan/dissectors/asn1/e2ap/CMakeLists.txt @@ -0,0 +1,44 @@ +# CMakeLists.txt +# +# Wireshark - Network traffic analyzer +# By Gerald Combs +# Copyright 1998 Gerald Combs +# +# SPDX-License-Identifier: GPL-2.0-or-later +# + +set( PROTOCOL_NAME e2ap ) + +set( PROTO_OPT ) + +set( EXPORT_FILES + ${PROTOCOL_NAME}-exp.cnf +) + +set( EXT_ASN_FILE_LIST +) + +set( ASN_FILE_LIST + E2AP-CommonDataTypes.asn + E2AP-Constants.asn + E2AP-Containers.asn + E2AP-IEs.asn + E2AP-PDU-Contents.asn + E2AP-PDU-Descriptions.asn + e2sm-kpm-v1.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() diff --git a/epan/dissectors/asn1/e2ap/E2AP-CommonDataTypes.asn b/epan/dissectors/asn1/e2ap/E2AP-CommonDataTypes.asn new file mode 100755 index 0000000000..3901fab690 --- /dev/null +++ b/epan/dissectors/asn1/e2ap/E2AP-CommonDataTypes.asn @@ -0,0 +1,27 @@ +-- ASN1START +-- ************************************************************** +-- +-- Common definitions +-- Derived from 3GPP 38.413 v15.4.0 +-- +-- ************************************************************** + +E2AP-CommonDataTypes { +iso(1) identified-organization(3) dod(6) internet(1) private(4) enterprise(1) 53148 e2(1) version1 (1) e2ap(1) e2ap-CommonDataTypes (3) } + +DEFINITIONS AUTOMATIC TAGS ::= + +BEGIN + +Criticality ::= ENUMERATED { reject, ignore, notify } + +Presence ::= ENUMERATED { optional, conditional, mandatory } + +ProcedureCode ::= INTEGER (0..255) + +ProtocolIE-ID ::= INTEGER (0..65535) + +TriggeringMessage ::= ENUMERATED { initiating-message, successful-outcome, unsuccessfull-outcome } + +END +-- ASN1STOP diff --git a/epan/dissectors/asn1/e2ap/E2AP-Constants.asn b/epan/dissectors/asn1/e2ap/E2AP-Constants.asn new file mode 100755 index 0000000000..4947634a83 --- /dev/null +++ b/epan/dissectors/asn1/e2ap/E2AP-Constants.asn @@ -0,0 +1,93 @@ +-- ASN1START +-- ************************************************************** +-- +-- Constant definitions +-- +-- ************************************************************** + +E2AP-Constants { +iso(1) identified-organization(3) dod(6) internet(1) private(4) enterprise(1) 53148 e2(1) version1 (1) e2ap(1) e2ap-Constants (4) } + +DEFINITIONS AUTOMATIC TAGS ::= + +BEGIN + +IMPORTS +ProcedureCode, +ProtocolIE-ID +FROM E2AP-CommonDataTypes; + +-- ************************************************************** +-- +-- Elementary Procedures +-- +-- ************************************************************** +id-E2setup ProcedureCode ::= 1 +id-ErrorIndication ProcedureCode ::= 2 +id-Reset ProcedureCode ::= 3 +id-RICcontrol ProcedureCode ::= 4 +id-RICindication ProcedureCode ::= 5 +id-RICserviceQuery ProcedureCode ::= 6 +id-RICserviceUpdate ProcedureCode ::= 7 +id-RICsubscription ProcedureCode ::= 8 +id-RICsubscriptionDelete ProcedureCode ::= 9 + +-- ************************************************************** +-- +-- Extension constants +-- +-- ************************************************************** + +maxProtocolIEs INTEGER ::= 65535 + + +-- ************************************************************** +-- +-- Lists +-- +-- ************************************************************** +maxnoofErrors INTEGER ::= 256 +maxofRANfunctionID INTEGER ::= 256 +maxofRICactionID INTEGER ::= 16 + +-- ************************************************************** +-- +-- IEs +-- +-- ************************************************************** +id-Cause ProtocolIE-ID ::= 1 +id-CriticalityDiagnostics ProtocolIE-ID ::= 2 +id-GlobalE2node-ID ProtocolIE-ID ::= 3 +id-GlobalRIC-ID ProtocolIE-ID ::= 4 +id-RANfunctionID ProtocolIE-ID ::= 5 +id-RANfunctionID-Item ProtocolIE-ID ::= 6 +id-RANfunctionIEcause-Item ProtocolIE-ID ::= 7 +id-RANfunction-Item ProtocolIE-ID ::= 8 +id-RANfunctionsAccepted ProtocolIE-ID ::= 9 +id-RANfunctionsAdded ProtocolIE-ID ::= 10 +id-RANfunctionsDeleted ProtocolIE-ID ::= 11 +id-RANfunctionsModified ProtocolIE-ID ::= 12 +id-RANfunctionsRejected ProtocolIE-ID ::= 13 +id-RICaction-Admitted-Item ProtocolIE-ID ::= 14 +id-RICactionID ProtocolIE-ID ::= 15 +id-RICaction-NotAdmitted-Item ProtocolIE-ID ::= 16 +id-RICactions-Admitted ProtocolIE-ID ::= 17 +id-RICactions-NotAdmitted ProtocolIE-ID ::= 18 +id-RICaction-ToBeSetup-Item ProtocolIE-ID ::= 19 +id-RICcallProcessID ProtocolIE-ID ::= 20 +id-RICcontrolAckRequest ProtocolIE-ID ::= 21 +id-RICcontrolHeader ProtocolIE-ID ::= 22 +id-RICcontrolMessage ProtocolIE-ID ::= 23 +id-RICcontrolStatus ProtocolIE-ID ::= 24 +id-RICindicationHeader ProtocolIE-ID ::= 25 +id-RICindicationMessage ProtocolIE-ID ::= 26 +id-RICindicationSN ProtocolIE-ID ::= 27 +id-RICindicationType ProtocolIE-ID ::= 28 +id-RICrequestID ProtocolIE-ID ::= 29 +id-RICsubscriptionDetails ProtocolIE-ID ::= 30 +id-TimeToWait ProtocolIE-ID ::= 31 +id-RICcontrolOutcome ProtocolIE-ID ::= 32 + + +END +-- ASN1STOP diff --git a/epan/dissectors/asn1/e2ap/E2AP-Containers.asn b/epan/dissectors/asn1/e2ap/E2AP-Containers.asn new file mode 100755 index 0000000000..b07d354ff8 --- /dev/null +++ b/epan/dissectors/asn1/e2ap/E2AP-Containers.asn @@ -0,0 +1,132 @@ +-- ASN1START +-- ************************************************************** +-- +-- Container definitions +-- +-- derived from 3GPP 38.413 v15.4.0 +-- ************************************************************** + +E2AP-Containers { +iso(1) identified-organization(3) dod(6) internet(1) private(4) enterprise(1) 53148 e2(1) version1 (1) e2ap(1) e2ap-Containers (5) } + +DEFINITIONS AUTOMATIC TAGS ::= + +BEGIN + +-- ************************************************************** +-- +-- IE parameter types from other modules. +-- +-- ************************************************************** + +IMPORTS + +Criticality, +Presence, +PrivateIE-ID, +ProtocolExtensionID, +ProtocolIE-ID +FROM E2AP-CommonDataTypes + +maxProtocolIEs +FROM E2AP-Constants; + +-- ************************************************************** +-- +-- Class Definition for Protocol IEs +-- +-- ************************************************************** + +E2AP-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 IEs +-- +-- ************************************************************** + +E2AP-PROTOCOL-IES-PAIR ::= CLASS { +&id ProtocolIE-ID UNIQUE, +&firstCriticality Criticality, +&FirstValue, +&secondCriticality Criticality, +&SecondValue, +&presence Presence +} +WITH SYNTAX { +ID &id +FIRST CRITICALITY &firstCriticality +FIRST TYPE &FirstValue +SECOND CRITICALITY &secondCriticality +SECOND TYPE &SecondValue +PRESENCE &presence +} + + + + +-- ************************************************************** +-- +-- Container for Protocol IEs +-- +-- ************************************************************** + +ProtocolIE-Container {E2AP-PROTOCOL-IES : IEsSetParam} ::= +SEQUENCE (SIZE (0..maxProtocolIEs)) OF +ProtocolIE-Field {{IEsSetParam}} + +ProtocolIE-SingleContainer {E2AP-PROTOCOL-IES : IEsSetParam} ::= +ProtocolIE-Field {{IEsSetParam}} + +ProtocolIE-Field {E2AP-PROTOCOL-IES : IEsSetParam} ::= SEQUENCE { +id E2AP-PROTOCOL-IES.&id ({IEsSetParam}), +criticality E2AP-PROTOCOL-IES.&criticality ({IEsSetParam}{@id}), +value E2AP-PROTOCOL-IES.&Value ({IEsSetParam}{@id}) +} + +-- ************************************************************** +-- +-- Container for Protocol IE Pairs +-- +-- ************************************************************** + +ProtocolIE-ContainerPair {E2AP-PROTOCOL-IES-PAIR : IEsSetParam} ::= +SEQUENCE (SIZE (0..maxProtocolIEs)) OF +ProtocolIE-FieldPair {{IEsSetParam}} + +ProtocolIE-FieldPair {E2AP-PROTOCOL-IES-PAIR : IEsSetParam} ::= SEQUENCE { +id E2AP-PROTOCOL-IES-PAIR.&id ({IEsSetParam}), +firstCriticality E2AP-PROTOCOL-IES-PAIR.&firstCriticality ({IEsSetParam}{@id}), +firstValue E2AP-PROTOCOL-IES-PAIR.&FirstValue ({IEsSetParam}{@id}), +secondCriticality E2AP-PROTOCOL-IES-PAIR.&secondCriticality ({IEsSetParam}{@id}), +secondValue E2AP-PROTOCOL-IES-PAIR.&SecondValue ({IEsSetParam}{@id}) +} + +-- ************************************************************** +-- +-- Container Lists for Protocol IE Containers +-- +-- ************************************************************** + +ProtocolIE-ContainerList {INTEGER : lowerBound, INTEGER : upperBound, E2AP-PROTOCOL-IES : IEsSetParam} ::= +SEQUENCE (SIZE (lowerBound..upperBound)) OF +ProtocolIE-SingleContainer {{IEsSetParam}} + +ProtocolIE-ContainerPairList {INTEGER : lowerBound, INTEGER : upperBound, E2AP-PROTOCOL-IES-PAIR : IEsSetParam} ::= +SEQUENCE (SIZE (lowerBound..upperBound)) OF +ProtocolIE-ContainerPair {{IEsSetParam}} + + +END +-- ASN1STOP diff --git a/epan/dissectors/asn1/e2ap/E2AP-IEs.asn b/epan/dissectors/asn1/e2ap/E2AP-IEs.asn new file mode 100755 index 0000000000..8e046bfaee --- /dev/null +++ b/epan/dissectors/asn1/e2ap/E2AP-IEs.asn @@ -0,0 +1,384 @@ +-- ASN1START +-- ************************************************************** +-- E2AP +-- Information Element Definitions +-- +-- ************************************************************** + +E2AP-IEs { +iso(1) identified-organization(3) dod(6) internet(1) private(4) enterprise(1) 53148 e2(1) version1 (1) e2ap(1) e2ap-IEs (2)} + +DEFINITIONS AUTOMATIC TAGS ::= + +BEGIN + +IMPORTS +Criticality, +Presence, +ProcedureCode, +ProtocolIE-ID, +TriggeringMessage +FROM E2AP-CommonDataTypes + +maxnoofErrors, +maxProtocolIEs +FROM E2AP-Constants; + +-- A +-- B +-- C +Cause ::= CHOICE { +ricRequest CauseRIC, +ricService CauseRICservice, +transport CauseTransport, +protocol CauseProtocol, +misc CauseMisc, +... +} + +CauseMisc ::= ENUMERATED { +control-processing-overload, +hardware-failure, +om-intervention, +unspecified, +... +} +CauseProtocol ::= ENUMERATED { +transfer-syntax-error, +abstract-syntax-error-reject, +abstract-syntax-error-ignore-and-notify, +message-not-compatible-with-receiver-state, +semantic-error, +abstract-syntax-error-falsely-constructed-message, +unspecified, +... +} + +CauseRIC ::= ENUMERATED { +ran-function-id-Invalid, +action-not-supported, +excessive-actions, +duplicate-action, +duplicate-event, +function-resource-limit, +request-id-unknown, +inconsistent-action-subsequent-action-sequence, +control-message-invalid, +call-process-id-invalid, +unspecified, +... +} + +CauseRICservice ::= ENUMERATED{ +function-not-required, +excessive-functions, +ric-resource-limit, +... +} +CauseTransport ::= ENUMERATED { +unspecified, +transport-resource-unavailable, +... +} + +-- ************************************************************** +-- copied from 3GPP 38.413 NGAP IEs v15.5.0 +-- note: ie-Extensions removed +-- ************************************************************** +CriticalityDiagnostics ::= SEQUENCE { +procedureCode ProcedureCode OPTIONAL, +triggeringMessage TriggeringMessage OPTIONAL, +procedureCriticality Criticality OPTIONAL, +ricRequestorID RICrequestID OPTIONAL, +iEsCriticalityDiagnostics CriticalityDiagnostics-IE-List OPTIONAL, +... +} + +CriticalityDiagnostics-IE-List ::= SEQUENCE (SIZE(1..maxnoofErrors)) OF CriticalityDiagnostics-IE-Item + +CriticalityDiagnostics-IE-Item ::= SEQUENCE { +iECriticality Criticality, +iE-ID ProtocolIE-ID, +typeOfError TypeOfError, +... +} + +-- D +-- E + +-- ************************************************************** +-- copied from 3GPP X2AP IEs v15.4.0 +-- note: ie-Extensions removed +-- ************************************************************** +ENB-ID ::= CHOICE { +macro-eNB-ID BIT STRING (SIZE (20)), +home-eNB-ID BIT STRING (SIZE (28)), +... , +short-Macro-eNB-ID BIT STRING (SIZE(18)), +long-Macro-eNB-ID BIT STRING (SIZE(21)) +} +-- ************************************************************** +-- copied from 3GPP 38.423 v15.5.0 XnAP IEs +-- ************************************************************** +ENB-ID-Choice ::= CHOICE { +enb-ID-macro BIT STRING (SIZE(20)), +enb-ID-shortmacro BIT STRING (SIZE(18)), +enb-ID-longmacro BIT STRING (SIZE(21)), +... +} + +-- ************************************************************** +-- copied from 3GPP X2AP IEs v15.4.0 +-- note: ie-Extensions removed +-- Note: to avoid duplicate names with XnAP, GNB-ID renamed ENGNB-ID, GlobalGNB-ID renamed GlobalenGNB-ID +-- ************************************************************** +ENGNB-ID ::= CHOICE { +gNB-ID BIT STRING (SIZE (22..32)), +... +} + +-- F +-- G +GlobalE2node-ID ::= CHOICE{ +gNB GlobalE2node-gNB-ID, +en-gNB GlobalE2node-en-gNB-ID, +ng-eNB GlobalE2node-ng-eNB-ID, +eNB GlobalE2node-eNB-ID, +... +} + +GlobalE2node-en-gNB-ID ::= SEQUENCE{ +global-gNB-ID GlobalenGNB-ID, +... +} +GlobalE2node-eNB-ID ::= SEQUENCE{ +global-eNB-ID GlobalENB-ID, +... +} +GlobalE2node-gNB-ID ::= SEQUENCE{ +global-gNB-ID GlobalgNB-ID, +gNB-CU-UP-ID GNB-CU-UP-ID OPTIONAL, +gNB-DU-ID GNB-DU-ID OPTIONAL, +... +} +GlobalE2node-ng-eNB-ID ::= SEQUENCE{ +global-ng-eNB-ID GlobalngeNB-ID, +... +} +-- ************************************************************** +-- copied from 3GPP X2AP IEs v15.4.0 +-- note: ie-Extensions removed +-- ************************************************************** + +GlobalENB-ID ::= SEQUENCE { +pLMN-Identity PLMN-Identity, +eNB-ID ENB-ID, +... +} +-- ************************************************************** +-- copied from 3GPP X2AP IEs v15.4.0 +-- Note: to avoid duplicate names with XnAP, GNB-ID renamed ENGNB-ID, GlobalGNB-ID renamed GlobalenGNB-ID +-- ************************************************************** +GlobalenGNB-ID ::= SEQUENCE { +pLMN-Identity PLMN-Identity, +gNB-ID ENGNB-ID, +... +} +-- ************************************************************** +-- copied from 3GPP 38.423 v15.5.0 XnAP IEs +-- ************************************************************** +GlobalgNB-ID ::= SEQUENCE { +plmn-id PLMN-Identity, +gnb-id GNB-ID-Choice, +... +} + + +-- ************************************************************** +-- copied from 3GPP 38.423 v15.5.0 XnAP IEs +-- ************************************************************** +GlobalngeNB-ID ::= SEQUENCE { +plmn-id PLMN-Identity, +enb-id ENB-ID-Choice, +... +} + +GlobalRIC-ID ::= SEQUENCE{ +pLMN-Identity PLMN-Identity, +ric-ID BIT STRING (SIZE (20)), +... +} + +-- ************************************************************** +-- copied from 3GPP 38.463 v15.5.0 E1AP IEs +-- ************************************************************** +GNB-CU-UP-ID::= INTEGER (0..68719476735) +GNB-DU-ID::= INTEGER (0..68719476735) + +-- ************************************************************** +-- copied from 3GPP 38.423 v15.5.0 XnAP IEs +-- ************************************************************** +GNB-ID-Choice ::= CHOICE { +gnb-ID BIT STRING (SIZE(22..32)), +... +} +-- H +-- I +-- J +-- K +-- L +-- M +-- N +-- O +-- P +-- ************************************************************** +-- copied from 3GPP X2AP IEs v15.4.0 +-- ************************************************************** +PLMN-Identity ::= OCTET STRING (SIZE(3)) + +-- Q +-- R +-- ************************************************************** +-- Following IE defined in E2SM +-- ************************************************************** +RANfunctionDefinition ::= OCTET STRING + +RANfunctionID ::= INTEGER (0..4095) + +RANfunctionRevision ::= INTEGER (0..4095) + +-- ************************************************************** +-- Following IE defined in E2SM +-- ************************************************************** +RICactionDefinition ::= OCTET STRING + +RICactionID ::= INTEGER (0..255) + +RICactionType ::= ENUMERATED{ +report, +insert, +policy, +... +} + +-- ************************************************************** +-- Following IE defined in E2SM +-- ************************************************************** +RICcallProcessID ::= OCTET STRING + +RICcontrolAckRequest ::= ENUMERATED{ +noAck, +ack, +nAck, +... +} + +-- ************************************************************** +-- Following IE defined in E2SM +-- ************************************************************** +RICcontrolHeader ::= OCTET STRING + +-- ************************************************************** +-- Following IE defined in E2SM +-- ************************************************************** +RICcontrolMessage ::= OCTET STRING + +-- ************************************************************** +-- Following IE defined in E2SM +-- ************************************************************** +RICcontrolOutcome ::= OCTET STRING + +RICcontrolStatus ::= ENUMERATED{ +success, +rejected, +failed, +... +} + +-- ************************************************************** +-- Following IE defined in E2SM +-- ************************************************************** +RICeventTriggerDefinition ::= OCTET STRING + +-- ************************************************************** +-- Following IE defined in E2SM +-- ************************************************************** +RICindicationHeader ::= OCTET STRING + +-- ************************************************************** +-- Following IE defined in E2SM +-- ************************************************************** +RICindicationMessage ::= OCTET STRING + +RICindicationSN ::= INTEGER (0..65535) + +RICindicationType ::= ENUMERATED{ +report, +insert, +... +} + +RICrequestID ::= SEQUENCE { +ricRequestorID INTEGER (0..65535), +ricInstanceID INTEGER (0..65535), +... +} + +RICsubsequentAction ::=SEQUENCE{ +ricSubsequentActionType RICsubsequentActionType, +ricTimeToWait RICtimeToWait, +... +} + +RICsubsequentActionType ::= ENUMERATED{ +continue, +wait, +... +} + +RICtimeToWait ::= ENUMERATED{ +zero, +w1ms, +w2ms, +w5ms, +w10ms, +w20ms, +w30ms, +w40ms, +w50ms, +w100ms, +w200ms, +w500ms, +w1s, +w2s, +w5s, +w10s, +w20s, +w60s, +... +} +-- S +-- T +-- ************************************************************** +-- copied from 3GPP 38.413 NGAP IEs v15.5.0 +-- ************************************************************** +TimeToWait ::= ENUMERATED {v1s, v2s, v5s, v10s, v20s, v60s, ...} + +-- ************************************************************** +-- copied from 3GPP 38.413 NGAP IEs v15.5.0 +-- ************************************************************** +TypeOfError ::= ENUMERATED { +not-understood, +missing, +... +} + +-- U +-- V +-- W +-- X +-- Y +-- Z + +END +-- ASN1STOP diff --git a/epan/dissectors/asn1/e2ap/E2AP-PDU-Contents.asn b/epan/dissectors/asn1/e2ap/E2AP-PDU-Contents.asn new file mode 100755 index 0000000000..4323ac054a --- /dev/null +++ b/epan/dissectors/asn1/e2ap/E2AP-PDU-Contents.asn @@ -0,0 +1,595 @@ +-- ASN1START +-- ************************************************************** +-- +-- PDU definitions for E2AP +-- Derived from 3GPP 38.413 v15.4.0 NGAP +-- +-- ************************************************************** + +E2AP-PDU-Contents { +iso(1) identified-organization(3) dod(6) internet(1) private(4) enterprise(1) 53148 e2(1) version1 (1) e2ap(1) e2ap-PDU-Contents (1) } + +DEFINITIONS AUTOMATIC TAGS ::= + +BEGIN + +-- ************************************************************** +-- +-- IE parameter types from other modules. +-- +-- ************************************************************** + +IMPORTS +Cause, +CriticalityDiagnostics, +GlobalE2node-ID, +GlobalRIC-ID, +RANfunctionDefinition, +RANfunctionID, +RANfunctionRevision, +RICactionDefinition, +RICactionID, +RICactionType, +RICcallProcessID, +RICcontrolAckRequest, +RICcontrolHeader, +RICcontrolMessage, +RICcontrolOutcome, +RICcontrolStatus, +RICeventTriggerDefinition, +RICindicationHeader, +RICindicationMessage, +RICindicationSN, +RICindicationType, +RICrequestID, +RICsubsequentAction, +TimeToWait +FROM E2AP-IEs + +ProtocolIE-Container{}, +ProtocolIE-ContainerList{}, +ProtocolIE-SingleContainer{}, +E2AP-PROTOCOL-IES, +E2AP-PROTOCOL-IES-PAIR +FROM E2AP-Containers + +id-Cause, +id-CriticalityDiagnostics, +id-GlobalE2node-ID, +id-GlobalRIC-ID, +id-RANfunctionID, +id-RANfunctionID-Item, +id-RANfunctionIEcause-Item, +id-RANfunction-Item, +id-RANfunctionsAccepted, +id-RANfunctionsAdded, +id-RANfunctionsDeleted, +id-RANfunctionsModified, +id-RANfunctionsRejected, +id-RICaction-Admitted-Item, +id-RICactionID, +id-RICaction-NotAdmitted-Item, +id-RICactions-Admitted, +id-RICactions-NotAdmitted, +id-RICaction-ToBeSetup-Item, +id-RICcallProcessID, +id-RICcontrolAckRequest, +id-RICcontrolHeader, +id-RICcontrolMessage, +id-RICcontrolOutcome, +id-RICcontrolStatus, +id-RICindicationHeader, +id-RICindicationMessage, +id-RICindicationSN, +id-RICindicationType, +id-RICrequestID, +id-RICserviceQuery, +id-RICsubscriptionDetails, +id-TimeToWait, + +maxofRANfunctionID, +maxofRICactionID +FROM E2AP-Constants; + +-- ************************************************************** +-- +-- MESSAGES FOR NEAR-RT RIC FUNCTIONAL PROCEDURES +-- +-- ************************************************************** + +-- ************************************************************** +-- +-- RIC Subscription Elementary Procedure +-- +-- ************************************************************** +-- ************************************************************** +-- +-- RIC SUBSCRIPTION REQUEST +-- +-- ************************************************************** +RICsubscriptionRequest ::= SEQUENCE { +protocolIEs ProtocolIE-Container {{RICsubscriptionRequest-IEs}}, +... +} + +RICsubscriptionRequest-IEs E2AP-PROTOCOL-IES ::= { +{ ID id-RICrequestID CRITICALITY reject TYPE RICrequestID PRESENCE mandatory}| +{ ID id-RANfunctionID CRITICALITY reject TYPE RANfunctionID PRESENCE mandatory}| +{ ID id-RICsubscriptionDetails CRITICALITY reject TYPE RICsubscriptionDetails PRESENCE mandatory}, +... +} + + +RICsubscriptionDetails ::= SEQUENCE { +ricEventTriggerDefinition RICeventTriggerDefinition, +ricAction-ToBeSetup-List RICactions-ToBeSetup-List, +... +} + +RICactions-ToBeSetup-List ::= SEQUENCE (SIZE(1..maxofRICactionID)) OF ProtocolIE-SingleContainer { {RICaction-ToBeSetup-ItemIEs} } + +RICaction-ToBeSetup-ItemIEs E2AP-PROTOCOL-IES ::= { +{ ID id-RICaction-ToBeSetup-Item CRITICALITY ignore TYPE RICaction-ToBeSetup-Item PRESENCE mandatory }, +... +} + +RICaction-ToBeSetup-Item ::= SEQUENCE { +ricActionID RICactionID, +ricActionType RICactionType, +ricActionDefinition RICactionDefinition OPTIONAL, +ricSubsequentAction RICsubsequentAction OPTIONAL, +... +} + +-- ************************************************************** +-- +-- RIC SUBSCRIPTION RESPONSE +-- +-- ************************************************************** +RICsubscriptionResponse ::= SEQUENCE { +protocolIEs ProtocolIE-Container{{RICsubscriptionResponse-IEs}}, +... +} + +RICsubscriptionResponse-IEs E2AP-PROTOCOL-IES ::= { +{ ID id-RICrequestID CRITICALITY reject TYPE RICrequestID PRESENCE mandatory } | +{ ID id-RANfunctionID CRITICALITY reject TYPE RANfunctionID PRESENCE mandatory } | +{ ID id-RICactions-Admitted CRITICALITY reject TYPE RICaction-Admitted-List PRESENCE mandatory } | +{ ID id-RICactions-NotAdmitted CRITICALITY reject TYPE RICaction-NotAdmitted-List PRESENCE optional }, +... +} + + + +RICaction-Admitted-List ::= SEQUENCE (SIZE(1..maxofRICactionID)) OF ProtocolIE-SingleContainer{{RICaction-Admitted-ItemIEs}} + +RICaction-Admitted-ItemIEs E2AP-PROTOCOL-IES ::= { +{ ID id-RICaction-Admitted-Item CRITICALITY ignore TYPE RICaction-Admitted-Item PRESENCE mandatory }, +... +} + +RICaction-Admitted-Item ::= SEQUENCE { +ricActionID RICactionID, +... +} + +RICaction-NotAdmitted-List ::= SEQUENCE (SIZE(0..maxofRICactionID)) OF ProtocolIE-SingleContainer { {RICaction-NotAdmitted-ItemIEs} } + +RICaction-NotAdmitted-ItemIEs E2AP-PROTOCOL-IES ::= { +{ ID id-RICaction-NotAdmitted-Item CRITICALITY ignore TYPE RICaction-NotAdmitted-Item PRESENCE mandatory }, +... +} + +RICaction-NotAdmitted-Item ::= SEQUENCE { +ricActionID RICactionID, +cause Cause, +... +} + +-- ************************************************************** +-- +-- RIC SUBSCRIPTION FAILURE +-- +-- ************************************************************** +RICsubscriptionFailure ::= SEQUENCE { +protocolIEs ProtocolIE-Container {{RICsubscriptionFailure-IEs}}, +... +} + +RICsubscriptionFailure-IEs E2AP-PROTOCOL-IES ::= { +{ ID id-RICrequestID CRITICALITY reject TYPE RICrequestID PRESENCE mandatory }| +{ ID id-RANfunctionID CRITICALITY reject TYPE RANfunctionID PRESENCE mandatory }| +{ ID id-RICactions-NotAdmitted CRITICALITY reject TYPE RICaction-NotAdmitted-List PRESENCE mandatory }| +{ ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, +... +} + +-- ************************************************************** +-- +-- RIC Subscription Delete Elementary Procedure +-- +-- ************************************************************** +-- ************************************************************** +-- +-- RIC SUBSCRIPTION DELETE REQUEST +-- +-- ************************************************************** +RICsubscriptionDeleteRequest ::= SEQUENCE { +protocolIEs ProtocolIE-Container {{RICsubscriptionDeleteRequest-IEs}}, +... +} + +RICsubscriptionDeleteRequest-IEs E2AP-PROTOCOL-IES ::= { +{ ID id-RICrequestID CRITICALITY reject TYPE RICrequestID PRESENCE mandatory }| +{ ID id-RANfunctionID CRITICALITY reject TYPE RANfunctionID PRESENCE mandatory }, +... +} + +-- ************************************************************** +-- +-- RIC SUBSCRIPTION DELETE RESPONSE +-- +-- ************************************************************** +RICsubscriptionDeleteResponse ::= SEQUENCE { +protocolIEs ProtocolIE-Container {{RICsubscriptionDeleteResponse-IEs}}, +... +} + +RICsubscriptionDeleteResponse-IEs E2AP-PROTOCOL-IES ::= { +{ ID id-RICrequestID CRITICALITY reject TYPE RICrequestID PRESENCE mandatory }| +{ ID id-RANfunctionID CRITICALITY reject TYPE RANfunctionID PRESENCE mandatory }, +... +} +-- ************************************************************** +-- +-- RIC SUBSCRIPTION DELETE FAILURE +-- +-- ************************************************************** +RICsubscriptionDeleteFailure ::= SEQUENCE { +protocolIEs ProtocolIE-Container {{RICsubscriptionDeleteFailure-IEs}}, +... +} + +RICsubscriptionDeleteFailure-IEs E2AP-PROTOCOL-IES ::= { +{ ID id-RICrequestID CRITICALITY reject TYPE RICrequestID PRESENCE mandatory }| +{ ID id-RANfunctionID CRITICALITY reject TYPE RANfunctionID PRESENCE mandatory }| +{ ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory }| +{ ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, +... +} + +-- ************************************************************** +-- +-- RIC Indication Elementary Procedure +-- +-- ************************************************************** +-- ************************************************************** +-- +-- RIC INDICATION +-- +-- ************************************************************** +RICindication ::= SEQUENCE { +protocolIEs ProtocolIE-Container {{RICindication-IEs}}, +... +} + +RICindication-IEs E2AP-PROTOCOL-IES ::= { +{ ID id-RICrequestID CRITICALITY reject TYPE RICrequestID PRESENCE mandatory }| +{ ID id-RANfunctionID CRITICALITY reject TYPE RANfunctionID PRESENCE mandatory }| +{ ID id-RICactionID CRITICALITY reject TYPE RICactionID PRESENCE mandatory }| +{ ID id-RICindicationSN CRITICALITY reject TYPE RICindicationSN PRESENCE optional }| +{ ID id-RICindicationType CRITICALITY reject TYPE RICindicationType PRESENCE mandatory }| +{ ID id-RICindicationHeader CRITICALITY reject TYPE RICindicationHeader PRESENCE mandatory }| +{ ID id-RICindicationMessage CRITICALITY reject TYPE RICindicationMessage PRESENCE mandatory }| +{ ID id-RICcallProcessID CRITICALITY reject TYPE RICcallProcessID PRESENCE optional }, +... +} + +-- ************************************************************** +-- +-- RIC Control Elementary Procedure +-- +-- ************************************************************** +-- ************************************************************** +-- +-- RIC CONTROL REQUEST +-- +-- ************************************************************** +RICcontrolRequest ::= SEQUENCE { +protocolIEs ProtocolIE-Container {{RICcontrolRequest-IEs}}, +... +} + +RICcontrolRequest-IEs E2AP-PROTOCOL-IES ::= { +{ ID id-RICrequestID CRITICALITY reject TYPE RICrequestID PRESENCE mandatory }| +{ ID id-RANfunctionID CRITICALITY reject TYPE RANfunctionID PRESENCE mandatory }| +{ ID id-RICcallProcessID CRITICALITY reject TYPE RICcallProcessID PRESENCE optional }| +{ ID id-RICcontrolHeader CRITICALITY reject TYPE RICcontrolHeader PRESENCE mandatory }| +{ ID id-RICcontrolMessage CRITICALITY reject TYPE RICcontrolMessage PRESENCE mandatory }| +{ ID id-RICcontrolAckRequest CRITICALITY reject TYPE RICcontrolAckRequest PRESENCE optional }, +... +} +-- ************************************************************** +-- +-- RIC CONTROL ACKNOWLEDGE +-- +-- ************************************************************** +RICcontrolAcknowledge ::= SEQUENCE { +protocolIEs ProtocolIE-Container {{RICcontrolAcknowledge-IEs}}, +... +} + +RICcontrolAcknowledge-IEs E2AP-PROTOCOL-IES ::= { +{ ID id-RICrequestID CRITICALITY reject TYPE RICrequestID PRESENCE mandatory }| +{ ID id-RANfunctionID CRITICALITY reject TYPE RANfunctionID PRESENCE mandatory }| +{ ID id-RICcallProcessID CRITICALITY reject TYPE RICcallProcessID PRESENCE optional }| +{ ID id-RICcontrolStatus CRITICALITY reject TYPE RICcontrolStatus PRESENCE mandatory } | +{ ID id-RICcontrolOutcome CRITICALITY reject TYPE RICcontrolOutcome PRESENCE optional }, +... +} +-- ************************************************************** +-- +-- RIC CONTROL FAILURE +-- +-- ************************************************************** +RICcontrolFailure ::= SEQUENCE { +protocolIEs ProtocolIE-Container {{RICcontrolFailure-IEs}}, +... +} + +RICcontrolFailure-IEs E2AP-PROTOCOL-IES ::= { +{ ID id-RICrequestID CRITICALITY reject TYPE RICrequestID PRESENCE mandatory }| +{ ID id-RANfunctionID CRITICALITY reject TYPE RANfunctionID PRESENCE mandatory }| +{ ID id-RICcallProcessID CRITICALITY reject TYPE RICcallProcessID PRESENCE optional }| +{ ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory } | +{ ID id-RICcontrolOutcome CRITICALITY reject TYPE RICcontrolOutcome PRESENCE optional }, +... +} + +-- ************************************************************** +-- +-- MESSAGES FOR GLOBAL PROCEDURES +-- +-- ************************************************************** + +-- ************************************************************** +-- +-- Error Indication Elementary Procedure +-- +-- ************************************************************** +-- ************************************************************** +-- +-- ERROR INDICATION +-- +-- ************************************************************** +ErrorIndication ::= SEQUENCE { +protocolIEs ProtocolIE-Container {{ErrorIndication-IEs}}, +... +} + +ErrorIndication-IEs E2AP-PROTOCOL-IES ::= { +{ ID id-RICrequestID CRITICALITY reject TYPE RICrequestID PRESENCE optional }| +{ ID id-RANfunctionID CRITICALITY reject TYPE RANfunctionID PRESENCE optional }| +{ ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE optional }| +{ ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, +... +} + +-- ************************************************************** +-- +-- E2 Setup Elementary Procedure +-- +-- ************************************************************** +-- ************************************************************** +-- +-- E2 SETUP REQUEST +-- +-- ************************************************************** + +E2setupRequest ::= SEQUENCE { +protocolIEs ProtocolIE-Container { {E2setupRequestIEs} }, +... +} + +E2setupRequestIEs E2AP-PROTOCOL-IES ::= { +{ ID id-GlobalE2node-ID CRITICALITY reject TYPE GlobalE2node-ID PRESENCE mandatory }| +{ ID id-RANfunctionsAdded CRITICALITY reject TYPE RANfunctions-List PRESENCE optional }, +... +} + +-- ************************************************************** +-- +-- E2 SETUP RESPONSE +-- +-- ************************************************************** + +E2setupResponse ::= SEQUENCE { +protocolIEs ProtocolIE-Container { {E2setupResponseIEs} }, +... +} + +E2setupResponseIEs E2AP-PROTOCOL-IES ::= { +{ ID id-GlobalRIC-ID CRITICALITY reject TYPE GlobalRIC-ID PRESENCE mandatory }| +{ ID id-RANfunctionsAccepted CRITICALITY reject TYPE RANfunctionsID-List PRESENCE optional }| +{ ID id-RANfunctionsRejected CRITICALITY reject TYPE RANfunctionsIDcause-List PRESENCE optional }, +... +} + +-- ************************************************************** +-- +-- E2 SETUP FAILURE +-- +-- ************************************************************** + +E2setupFailure ::= SEQUENCE { +protocolIEs ProtocolIE-Container { {E2setupFailureIEs} }, +... +} + +E2setupFailureIEs E2AP-PROTOCOL-IES ::= { +{ ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory }| +{ ID id-TimeToWait CRITICALITY ignore TYPE TimeToWait PRESENCE optional }| +{ ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, +... +} + +-- ************************************************************** +-- +-- Reset Elementary Procedure +-- +-- ************************************************************** + +-- ************************************************************** +-- +-- RESET REQUEST +-- +-- ************************************************************** + +ResetRequest ::= SEQUENCE { +protocolIEs ProtocolIE-Container { {ResetRequestIEs} }, +... +} + +ResetRequestIEs E2AP-PROTOCOL-IES ::= { +{ ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory }, +... +} + +-- ************************************************************** +-- +-- RESET RESPONSE +-- +-- ************************************************************** + +ResetResponse ::= SEQUENCE { +protocolIEs ProtocolIE-Container { {ResetResponseIEs} }, +... +} + +ResetResponseIEs E2AP-PROTOCOL-IES ::= { +{ ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, +... +} + +-- ************************************************************** +-- +-- RIC Service Update Elementary Procedure +-- +-- ************************************************************** +-- ************************************************************** +-- +-- RIC SERVICE UPDATE +-- +-- ************************************************************** +RICserviceUpdate ::= SEQUENCE { +protocolIEs ProtocolIE-Container {{RICserviceUpdate-IEs}}, +... +} + +RICserviceUpdate-IEs E2AP-PROTOCOL-IES ::= { +{ ID id-RANfunctionsAdded CRITICALITY reject TYPE RANfunctions-List PRESENCE optional }| +{ ID id-RANfunctionsModified CRITICALITY reject TYPE RANfunctions-List PRESENCE optional }| +{ ID id-RANfunctionsDeleted CRITICALITY reject TYPE RANfunctionsID-List PRESENCE optional }, +... +} + +RANfunctions-List ::= SEQUENCE (SIZE(0..maxofRANfunctionID)) OF ProtocolIE-SingleContainer { {RANfunction-ItemIEs} } +-- TODO (dodgy). also note that NGAP doesn't do this... +--RANfunctions-List ::= SEQUENCE (SIZE(0..maxofRANfunctionID)) OF RANfunction-ItemIEs + +RANfunction-ItemIEs E2AP-PROTOCOL-IES ::= { +{ ID id-RANfunction-Item CRITICALITY ignore TYPE RANfunction-Item PRESENCE mandatory }, +... +} + + +RANfunction-Item ::= SEQUENCE { +ranFunctionID RANfunctionID, +ranFunctionDefinition RANfunctionDefinition, +ranFunctionRevision RANfunctionRevision, +... +} + +RANfunctionsID-List ::= SEQUENCE (SIZE(0..maxofRANfunctionID)) OF ProtocolIE-SingleContainer{{RANfunctionID-ItemIEs}} + +RANfunctionID-ItemIEs E2AP-PROTOCOL-IES ::= { +{ ID id-RANfunctionID-Item CRITICALITY ignore TYPE RANfunctionID-Item PRESENCE mandatory }, +... +} + +RANfunctionID-Item ::= SEQUENCE { +ranFunctionID RANfunctionID, +ranFunctionRevision RANfunctionRevision, +... +} + +-- ************************************************************** +-- +-- RIC SERVICE UPDATE ACKNOWLEDGE +-- +-- ************************************************************** +RICserviceUpdateAcknowledge ::= SEQUENCE { +protocolIEs ProtocolIE-Container {{RICserviceUpdateAcknowledge-IEs}}, +... +} + +RICserviceUpdateAcknowledge-IEs E2AP-PROTOCOL-IES ::= { +{ ID id-RANfunctionsAccepted CRITICALITY reject TYPE RANfunctionsID-List PRESENCE optional }| +{ ID id-RANfunctionsRejected CRITICALITY reject TYPE RANfunctionsIDcause-List PRESENCE optional }, +... +} + +RANfunctionsIDcause-List ::= SEQUENCE (SIZE(0..maxofRANfunctionID)) OF ProtocolIE-SingleContainer { {RANfunctionIDcause-ItemIEs} } + +RANfunctionIDcause-ItemIEs E2AP-PROTOCOL-IES ::= { +{ ID id-RANfunctionIEcause-Item CRITICALITY ignore TYPE RANfunctionIDcause-Item PRESENCE mandatory }, +... +} + + +RANfunctionIDcause-Item ::= SEQUENCE { +ranFunctionID RANfunctionID, +cause Cause, +... +} + + +-- ************************************************************** +-- +-- RIC SERVICE UPDATE FAILURE +-- +-- ************************************************************** +RICserviceUpdateFailure ::= SEQUENCE { +protocolIEs ProtocolIE-Container {{RICserviceUpdateFailure-IEs}}, +... +} + +RICserviceUpdateFailure-IEs E2AP-PROTOCOL-IES ::= { +{ ID id-RANfunctionsRejected CRITICALITY ignore TYPE RANfunctionsIDcause-List PRESENCE optional }| +{ ID id-TimeToWait CRITICALITY ignore TYPE TimeToWait PRESENCE optional }| +{ ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, +... +} + +-- ************************************************************** +-- +-- RIC Service Query Elementary Procedure +-- +-- ************************************************************** +-- ************************************************************** +-- +-- RIC SERVICE QUERY +-- +-- ************************************************************** +RICserviceQuery ::= SEQUENCE { +protocolIEs ProtocolIE-Container {{RICserviceQuery-IEs}}, +... +} + +RICserviceQuery-IEs E2AP-PROTOCOL-IES ::= { +{ ID id-RANfunctionsAccepted CRITICALITY reject TYPE RANfunctionsID-List PRESENCE optional }, +... +} + +END +-- ASN1STOP diff --git a/epan/dissectors/asn1/e2ap/E2AP-PDU-Descriptions.asn b/epan/dissectors/asn1/e2ap/E2AP-PDU-Descriptions.asn new file mode 100755 index 0000000000..a545df82f7 --- /dev/null +++ b/epan/dissectors/asn1/e2ap/E2AP-PDU-Descriptions.asn @@ -0,0 +1,216 @@ +-- ASN1START +-- ************************************************************** +-- +-- Elementary Procedure definitions +-- Derived from 3GPP 38.413 v15.4.0 NGAP +-- ************************************************************** + +E2AP-PDU-Descriptions { +iso(1) identified-organization(3) dod(6) internet(1) private(4) enterprise(1) 53148 e2(1) version1 (1) e2ap(1) e2ap-PDU-Descriptions (0) } + +DEFINITIONS AUTOMATIC TAGS ::= + +BEGIN + +-- ************************************************************** +-- +-- IE parameter types from other modules. +-- +-- ************************************************************** + +IMPORTS +Criticality, +ProcedureCode +FROM E2AP-CommonDataTypes + + + +E2setupFailure, +E2setupRequest, +E2setupResponse, +ErrorIndication, +ResetRequest, +ResetResponse, +RICcontrolAcknowledge, +RICcontrolFailure, +RICcontrolRequest, +RICindication, +RICserviceQuery, +RICserviceUpdate, +RICserviceUpdateAcknowledge, +RICserviceUpdateFailure, +RICsubscriptionFailure, +RICsubscriptionRequest, +RICsubscriptionResponse, +RICsubscriptionDeleteFailure, +RICsubscriptionDeleteRequest, +RICsubscriptionDeleteResponse +FROM E2AP-PDU-Contents + +id-E2setup, +id-ErrorIndication, +id-Reset, +id-RICcontrol, +id-RICindication, +id-RICserviceQuery, +id-RICserviceUpdate, +id-RICsubscription, +id-RICsubscriptionDelete +FROM E2AP-Constants; + +-- ************************************************************** +-- +-- Interface Elementary Procedure Class +-- +-- ************************************************************** + +E2AP-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 +-- +-- ************************************************************** + +E2AP-PDU ::= CHOICE { +initiatingMessage InitiatingMessage, +successfulOutcome SuccessfulOutcome, +unsuccessfulOutcome UnsuccessfulOutcome, +... +} + +InitiatingMessage ::= SEQUENCE { +procedureCode E2AP-ELEMENTARY-PROCEDURE.&procedureCode ({E2AP-ELEMENTARY-PROCEDURES}), +criticality E2AP-ELEMENTARY-PROCEDURE.&criticality ({E2AP-ELEMENTARY-PROCEDURES}{@procedureCode}), +value E2AP-ELEMENTARY-PROCEDURE.&InitiatingMessage ({E2AP-ELEMENTARY-PROCEDURES}{@procedureCode}) +} + +SuccessfulOutcome ::= SEQUENCE { +procedureCode E2AP-ELEMENTARY-PROCEDURE.&procedureCode ({E2AP-ELEMENTARY-PROCEDURES}), +criticality E2AP-ELEMENTARY-PROCEDURE.&criticality ({E2AP-ELEMENTARY-PROCEDURES}{@procedureCode}), +value E2AP-ELEMENTARY-PROCEDURE.&SuccessfulOutcome ({E2AP-ELEMENTARY-PROCEDURES}{@procedureCode}) +} + +UnsuccessfulOutcome ::= SEQUENCE { +procedureCode E2AP-ELEMENTARY-PROCEDURE.&procedureCode ({E2AP-ELEMENTARY-PROCEDURES}), +criticality E2AP-ELEMENTARY-PROCEDURE.&criticality ({E2AP-ELEMENTARY-PROCEDURES}{@procedureCode}), +value E2AP-ELEMENTARY-PROCEDURE.&UnsuccessfulOutcome ({E2AP-ELEMENTARY-PROCEDURES}{@procedureCode}) +} + +-- ************************************************************** +-- +-- Interface Elementary Procedure List +-- +-- ************************************************************** + +E2AP-ELEMENTARY-PROCEDURES E2AP-ELEMENTARY-PROCEDURE ::= { +E2AP-ELEMENTARY-PROCEDURES-CLASS-1 | +E2AP-ELEMENTARY-PROCEDURES-CLASS-2, +... +} + +E2AP-ELEMENTARY-PROCEDURES-CLASS-1 E2AP-ELEMENTARY-PROCEDURE ::= { +ricSubscription | +ricSubscriptionDelete | +ricServiceUpdate | +ricControl | +e2setup | +reset, +... +} + +E2AP-ELEMENTARY-PROCEDURES-CLASS-2 E2AP-ELEMENTARY-PROCEDURE ::= { +ricIndication | +ricServiceQuery | +errorIndication, +... +} + +-- ************************************************************** +-- +-- Interface Elementary Procedures +-- +-- ************************************************************** + +e2setup E2AP-ELEMENTARY-PROCEDURE ::= { +INITIATING MESSAGE E2setupRequest +SUCCESSFUL OUTCOME E2setupResponse +UNSUCCESSFUL OUTCOME E2setupFailure +PROCEDURE CODE id-E2setup +CRITICALITY reject +} + +errorIndication E2AP-ELEMENTARY-PROCEDURE ::= { +INITIATING MESSAGE ErrorIndication +PROCEDURE CODE id-ErrorIndication +CRITICALITY ignore +} + +reset E2AP-ELEMENTARY-PROCEDURE ::= { +INITIATING MESSAGE ResetRequest +SUCCESSFUL OUTCOME ResetResponse +PROCEDURE CODE id-Reset +CRITICALITY reject +} + +ricControl E2AP-ELEMENTARY-PROCEDURE ::= { +INITIATING MESSAGE RICcontrolRequest +SUCCESSFUL OUTCOME RICcontrolAcknowledge +UNSUCCESSFUL OUTCOME RICcontrolFailure +PROCEDURE CODE id-RICcontrol +CRITICALITY reject +} + +ricIndication E2AP-ELEMENTARY-PROCEDURE ::= { +INITIATING MESSAGE RICindication +PROCEDURE CODE id-RICindication +CRITICALITY ignore +} + +ricServiceQuery E2AP-ELEMENTARY-PROCEDURE ::= { +INITIATING MESSAGE RICserviceQuery +PROCEDURE CODE id-RICserviceQuery +CRITICALITY ignore +} + +ricServiceUpdate E2AP-ELEMENTARY-PROCEDURE ::= { +INITIATING MESSAGE RICserviceUpdate +SUCCESSFUL OUTCOME RICserviceUpdateAcknowledge +UNSUCCESSFUL OUTCOME RICserviceUpdateFailure +PROCEDURE CODE id-RICserviceUpdate +CRITICALITY reject +} + +ricSubscription E2AP-ELEMENTARY-PROCEDURE ::= { +INITIATING MESSAGE RICsubscriptionRequest +SUCCESSFUL OUTCOME RICsubscriptionResponse +UNSUCCESSFUL OUTCOME RICsubscriptionFailure +PROCEDURE CODE id-RICsubscription +CRITICALITY reject +} + +ricSubscriptionDelete E2AP-ELEMENTARY-PROCEDURE ::= { +INITIATING MESSAGE RICsubscriptionDeleteRequest +SUCCESSFUL OUTCOME RICsubscriptionDeleteResponse +UNSUCCESSFUL OUTCOME RICsubscriptionDeleteFailure +PROCEDURE CODE id-RICsubscriptionDelete +CRITICALITY reject +} + + +END +-- ASN1STOP diff --git a/epan/dissectors/asn1/e2ap/e2ap.cnf b/epan/dissectors/asn1/e2ap/e2ap.cnf new file mode 100755 index 0000000000..db95eff625 --- /dev/null +++ b/epan/dissectors/asn1/e2ap/e2ap.cnf @@ -0,0 +1,533 @@ +# e2ap.cnf +# e2ap conformation file + +#.OPT +PER +ALIGNED +#.END + +#.USE_VALS_EXT +ProcedureCode +ProtocolIE-ID + +#.EXPORTS ONLY_VALS WS_DLL + +#.EXPORTS + +#.PDU +E2AP-PDU + +E2SM-KPM-ActionDefinition +E2SM-KPM-RANfunction-Description +E2SM-KPM-EventTriggerDefinition +E2SM-KPM-IndicationHeader +RANcallProcess-ID-string +E2SM-KPM-IndicationMessage-Format1 + + +#.MAKE_ENUM +ProcedureCode +ProtocolIE-ID + +#.NO_EMIT + +#.OMIT_ASSIGNMENT +# Get rid of unused code warnings +ProtocolIE-FieldPair +ProtocolIE-ContainerList +ProtocolIE-ContainerPair +ProtocolIE-ContainerPairList +Presence + +# KPM items. Don't know which E2AP OCTET STRING is supposed to use this... +GNB-DU-Name + +E2SM-KPM-IndicationMessage + +#.END + + +#.TYPE_ATTR +E2SM-KPM-IndicationMessage DISPLAY=BASE_DEC STRINGS=VALS(e2ap_E2SM_KPM_IndicationMessage_vals) + +#.TYPE_ATTR +E2SM-KPM-IndicationHeader DISPLAY=BASE_DEC STRINGS=VALS(e2ap_E2SM_KPM_IndicationHeader_vals) + +#.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 + +#GlobalGNB-ID/gNB-ID globalGNB-ID_gNB-ID + + +#.FIELD_ATTR +#GlobalGNB-ID/gNB-ID ABBREV=globalGNB_ID.gNB_ID + +#.FN_BODY ProtocolIE-ID VAL_PTR=&e2ap_data->protocol_ie_id + struct e2ap_private_data *e2ap_data = e2ap_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(e2ap_data->protocol_ie_id, &e2ap_ProtocolIE_ID_vals_ext, "unknown (%d)")); + } +#.END + + +# TODO: probably not worth it +# #.FN_BODY E2AP-PDU VAL_PTR=&value +# guint32 value; +# %(DEFAULT_BODY)s +# col_append_fstr(actx->pinfo->cinfo, COL_INFO, " (%%s)", val_to_str(value, e2ap_E2AP_PDU_vals, "Unknown")); + + + +#.FN_PARS ProtocolIE-Field/value FN_VARIANT=_pdu_new TYPE_REF_FN=dissect_ProtocolIEFieldValue +# Currently not used +# FN_PARS ProtocolIE-FieldPair/firstValue FN_VARIANT=_pdu_new TYPE_REF_FN=dissect_ProtocolIEFieldPairFirstValue +# FN_PARS ProtocolIE-FieldPair/secondValue FN_VARIANT=_pdu_new TYPE_REF_FN=dissect_ProtocolIEFieldPairSecondValue + + + +#.FN_BODY ProcedureCode VAL_PTR = &e2ap_data->procedure_code + struct e2ap_private_data *e2ap_data = e2ap_get_private_data(actx->pinfo); +%(DEFAULT_BODY)s + //col_append_fstr(actx->pinfo->cinfo, COL_INFO, "%%s", val_to_str(e2ap_data->procedure_code, e2ap_ProcedureCode_vals, "Unknown")); +#.END + + + +#.FN_PARS InitiatingMessage/value FN_VARIANT=_pdu_new TYPE_REF_FN=dissect_InitiatingMessageValue +#.FN_HDR InitiatingMessage/value + struct e2ap_private_data *e2ap_data = e2ap_get_private_data(actx->pinfo); + e2ap_data->message_type = INITIATING_MESSAGE; +#.FN_PARS SuccessfulOutcome/value FN_VARIANT=_pdu_new TYPE_REF_FN=dissect_SuccessfulOutcomeValue +#.FN_HDR SuccessfulOutcome/value + struct e2ap_private_data *e2ap_data = e2ap_get_private_data(actx->pinfo); + e2ap_data->message_type = SUCCESSFUL_OUTCOME; +#.FN_PARS UnsuccessfulOutcome/value FN_VARIANT=_pdu_new TYPE_REF_FN=dissect_UnsuccessfulOutcomeValue +#.FN_HDR UnsuccessfulOutcome/value + struct e2ap_private_data *e2ap_data = e2ap_get_private_data(actx->pinfo); + e2ap_data->message_type = UNSUCCESSFUL_OUTCOME; + +#--- Parameterization is not supported in asn2wrs --- + +#ProtocolIE-ContainerList {INTEGER : lowerBound, INTEGER : upperBound, e2ap-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 + +#ProtocolIE-ContainerPairList {INTEGER : lowerBound, INTEGER : upperBound, e2ap-PROTOCOL-IES-PAIR : IEsSetParam} ::= +# SEQUENCE (SIZE (lowerBound..upperBound)) OF +# ProtocolIE-ContainerPair {{IEsSetParam}} + +# Currently not used +# FN_PARS ProtocolIE-ContainerPairList +#MIN_VAL = asn1_param_get_integer(%(ACTX)s,"lowerBound") +#MAX_VAL = asn1_param_get_integer(%(ACTX)s,"upperBound") +# FN_HDR ProtocolIE-ContainerPairList +# static const asn1_par_def_t ProtocolIE_ContainerPairList_pars[] = { +# { "lowerBound", ASN1_PAR_INTEGER }, +# { "upperBound", ASN1_PAR_INTEGER }, +# { NULL, 0 } +# }; +# asn1_stack_frame_check(actx, "ProtocolIE-ContainerPairList", ProtocolIE_ContainerPairList_pars); +# END + +#PduSessionResource-IE-ContainerList { e2ap-PROTOCOL-IES : IEsSetParam } ::= ProtocolIE-ContainerList { 1, maxnoofPduSessionResources, {IEsSetParam} } +# FN_BODY PduSessionResource-IE-ContainerList +# asn1_stack_frame_push(%(ACTX)s, "ProtocolIE-ContainerList"); +# asn1_param_push_integer(%(ACTX)s, 1); +# asn1_param_push_integer(%(ACTX)s, maxnoofE_RABs); +# %(DEFAULT_BODY)s +# asn1_stack_frame_pop(%(ACTX)s, "ProtocolIE-ContainerList"); +# END + +# PduSessionResource-IE-ContainerPairList { e2ap-PROTOCOL-IES-PAIR : IEsSetParam } ::= ProtocolIE-ContainerPairList { 1, maxnoofPduSessionResources, {IEsSetParam} } +# Currently not used +# FN_BODY SAEB-IE-ContainerPairList +# asn1_stack_frame_push(%(ACTX)s, "ProtocolIE-ContainerPairList"); +# asn1_param_push_integer(%(ACTX)s, 1); +# asn1_param_push_integer(%(ACTX)s, maxnoofE_RABs); +#%(DEFAULT_BODY)s +# asn1_stack_frame_pop(%(ACTX)s, "ProtocolIE-ContainerPairList"); +# END + +# Currently not used +# ProtocolError-IE-ContainerList { e2ap-PROTOCOL-IES : IEsSetParam } ::= ProtocolIE-ContainerList { 1, maxnoofPduSessionResources, {IEsSetParam} } +# FN_BODY ProtocolError-IE-ContainerList +# asn1_stack_frame_push(%(ACTX)s, "ProtocolIE-ContainerList"); +# asn1_param_push_integer(%(ACTX)s, 1); +# asn1_param_push_integer(%(ACTX)s, maxnoofE_RABs); +#%(DEFAULT_BODY)s +# asn1_stack_frame_pop(%(ACTX)s, "ProtocolIE-ContainerList"); +# END + +# .FN_HDR PrivateIE-ID +# struct e2ap_private_data *e2ap_data = e2ap_get_private_data(actx->pinfo); +# e2ap_data->obj_id = NULL; + +# FN_BODY PrivateIE-ID/global FN_VARIANT = _str VAL_PTR = &e2ap_data->obj_id +# struct e2ap_private_data *e2ap_data = e2ap_get_private_data(actx->pinfo); +# %(DEFAULT_BODY)s + +# FN_BODY PrivateIE-Field/value +# struct e2ap_private_data *e2ap_data = e2ap_get_private_data(actx->pinfo); +# if (e2ap_data->obj_id) { +# offset = call_per_oid_callback(e2ap_data->obj_id, tvb, actx->pinfo, tree, offset, actx, hf_index); +# } else { +# %(DEFAULT_BODY)s +# } + + + + +# #.FN_BODY E2AP-Message VAL_PTR = ¶meter_tvb +# tvbuff_t *parameter_tvb; +# proto_tree *subtree; +#%(DEFAULT_BODY)s +# if (!parameter_tvb) +# return offset; + +# subtree = proto_item_add_subtree(actx->created_item, ett_e2ap_e2ap_Message); +# col_set_fence(actx->pinfo->cinfo, COL_INFO); +# call_dissector(e2ap_handle, parameter_tvb, actx->pinfo, subtree); + + + +# Calling in-depth KPM definitions of E2AP OCTET STRING fields. + +#.FN_BODY RICactionDefinition VAL_PTR = ¶meter_tvb + tvbuff_t *parameter_tvb; + %(DEFAULT_BODY)s + dissect_E2SM_KPM_ActionDefinition_PDU(parameter_tvb, actx->pinfo, tree, NULL); + +#.FN_BODY RICeventTriggerDefinition VAL_PTR = ¶meter_tvb + tvbuff_t *parameter_tvb; + %(DEFAULT_BODY)s + dissect_E2SM_KPM_EventTriggerDefinition_PDU(parameter_tvb, actx->pinfo, tree, NULL); + +#.FN_BODY RICindicationHeader VAL_PTR = ¶meter_tvb + tvbuff_t *parameter_tvb; + %(DEFAULT_BODY)s + dissect_E2SM_KPM_IndicationHeader_PDU(parameter_tvb, actx->pinfo, tree, NULL); + +#.FN_BODY RICindicationMessage VAL_PTR = ¶meter_tvb + tvbuff_t *parameter_tvb; + %(DEFAULT_BODY)s + /* It is believed that this is an error in the ASN in V1 of the spec... */ + dissect_E2SM_KPM_IndicationMessage_Format1_PDU(parameter_tvb, actx->pinfo, tree, NULL); + +#.FN_BODY RANfunctionDefinition VAL_PTR = ¶meter_tvb + tvbuff_t *parameter_tvb; + %(DEFAULT_BODY)s + dissect_E2SM_KPM_RANfunction_Description_PDU(parameter_tvb, actx->pinfo, tree, NULL); + +#.FN_BODY RICcallProcessID VAL_PTR = ¶meter_tvb + tvbuff_t *parameter_tvb; + %(DEFAULT_BODY)s + dissect_RANcallProcess_ID_string_PDU(parameter_tvb, actx->pinfo, tree, NULL); + + + +#.ASSIGN_VALUE_TO_TYPE # e2ap does not have constants assigned to types, they are pure INTEGER +# ProcedureCode + +id-E2setup ProcedureCode +id-ErrorIndication ProcedureCode +id-Reset ProcedureCode +id-RICcontrol ProcedureCode +id-RICindication ProcedureCode +id-RICserviceQuery ProcedureCode +id-RICserviceUpdate ProcedureCode +id-RICsubscription ProcedureCode +id-RICsubscriptionDelete ProcedureCode +#id-E2nodeConfigurationUpdate ProcedureCode +#id-E2connectionUpdate ProcedureCode + + + +# ProtocolIE-ID +id-Cause ProtocolIE-ID +id-CriticalityDiagnostics ProtocolIE-ID +id-GlobalE2node-ID ProtocolIE-ID +id-GlobalRIC-ID ProtocolIE-ID +id-RANfunctionID ProtocolIE-ID +id-RANfunctionID-Item ProtocolIE-ID +id-RANfunctionIEcause-Item ProtocolIE-ID +id-RANfunction-Item ProtocolIE-ID +id-RANfunctionsAccepted ProtocolIE-ID +id-RANfunctionsAdded ProtocolIE-ID + +id-RANfunctionsDeleted ProtocolIE-ID +id-RANfunctionsModified ProtocolIE-ID +id-RANfunctionsRejected ProtocolIE-ID +id-RICaction-Admitted-Item ProtocolIE-ID +id-RICactionID ProtocolIE-ID +id-RICaction-NotAdmitted-Item ProtocolIE-ID +id-RICactions-Admitted ProtocolIE-ID +id-RICactions-NotAdmitted ProtocolIE-ID +id-RICaction-ToBeSetup-Item ProtocolIE-ID +id-RICcallProcessID ProtocolIE-ID + +id-RICcontrolAckRequest ProtocolIE-ID +id-RICcontrolHeader ProtocolIE-ID +id-RICcontrolMessage ProtocolIE-ID +id-RICcontrolStatus ProtocolIE-ID +id-RICindicationHeader ProtocolIE-ID +id-RICindicationMessage ProtocolIE-ID +id-RICindicationSN ProtocolIE-ID +id-RICindicationType ProtocolIE-ID +id-RICrequestID ProtocolIE-ID +id-RICsubscriptionDetails ProtocolIE-ID + +id-TimeToWait ProtocolIE-ID +id-RICcontrolOutcome ProtocolIE-ID +#id-E2nodeComponentConfigUpdate ProtocolIE-ID +#id-E2nodeComponentConfigUpdate-Item ProtocolIE-ID +#id-E2nodeComponentConfigUpdateAck ProtocolIE-ID +#id-E2nodeComponentConfigUpdateAck-Item ProtocolIE-ID +#id-E2connectionSetup ProtocolIE-ID +#id-E2connectionSetupFailed ProtocolIE-ID + +#id-E2connectionSetupFailed-Item ProtocolIE-ID +#id-E2connectionFailed-Item ProtocolIE-ID +#id-E2connectionUpdate-Item ProtocolIE-ID +#id-E2connectionUpdateAdd ProtocolIE-ID +#id-E2connectionUpdateModify ProtocolIE-ID +#id-E2connectionUpdateRemove ProtocolIE-ID +#id-E2connectionUpdateRemove-Item ProtocolIE-ID +#id-TNLinformation ProtocolIE-ID +#id-TransactionID ProtocolIE-ID +#.END + + +#.REGISTER + +#E2AP-PROTOCOL-IES + +Cause N e2ap.ies id-Cause +CriticalityDiagnostics N e2ap.ies id-CriticalityDiagnostics + +GlobalE2node-ID N e2ap.ies id-GlobalE2node-ID +GlobalRIC-ID N e2ap.ies id-GlobalRIC-ID +RANfunctionID N e2ap.ies id-RANfunctionID +RANfunctionID-Item N e2ap.ies id-RANfunctionID-Item +RANfunctionIDcause-Item N e2ap.ies id-RANfunctionIEcause-Item +RANfunction-Item N e2ap.ies id-RANfunction-Item +RANfunctionsID-List N e2ap.ies id-RANfunctionsAccepted +RANfunctions-List N e2ap.ies id-RANfunctionsAdded +RANfunctionsID-List N e2ap.ies id-RANfunctionsDeleted +RANfunctions-List N e2ap.ies id-RANfunctionsModified +RANfunctionsIDcause-List N e2ap.ies id-RANfunctionsRejected +RICaction-Admitted-Item N e2ap.ies id-RICaction-Admitted-Item +RICactionID N e2ap.ies id-RICactionID +RICaction-NotAdmitted-Item N e2ap.ies id-RICaction-NotAdmitted-Item +RICaction-Admitted-List N e2ap.ies id-RICactions-Admitted +RICaction-ToBeSetup-Item N e2ap.ies id-RICaction-ToBeSetup-Item +RICcallProcessID N e2ap.ies id-RICcallProcessID +RICaction-NotAdmitted-List N e2ap.ies id-RICactions-NotAdmitted +RICcontrolAckRequest N e2ap.ies id-RICcontrolAckRequest +RICcontrolHeader N e2ap.ies id-RICcontrolHeader +RICcontrolMessage N e2ap.ies id-RICcontrolMessage +RICcontrolOutcome N e2ap.ies id-RICcontrolOutcome +RICcontrolStatus N e2ap.ies id-RICcontrolStatus +RICindicationHeader N e2ap.ies id-RICindicationHeader +RICindicationMessage N e2ap.ies id-RICindicationMessage +RICindicationSN N e2ap.ies id-RICindicationSN +RICindicationType N e2ap.ies id-RICindicationType +RICrequestID N e2ap.ies id-RICrequestID +RICsubscriptionDetails N e2ap.ies id-RICsubscriptionDetails +TimeToWait N e2ap.ies id-TimeToWait +#TNLinformation N e2ap.ies id-TNLinformation +#TransactionID N e2ap.ies id-TransactionID + + + + +# TODO: V2? +#Cause N e2ap.ies id-Cause +#CriticalityDiagnostics N e2ap.ies id-CriticalityDiagnostics +#E2nodeComponentConfigUpdate N e2ap.ies id-E2nodeComponentConfigUpdate +#E2nodeComponentConfigUpdateAck N e2ap.ies id-E2nodeComponentConfigUpdateAck +#E2nodeComponentID N e2ap.ies id-E2nodeComponentID +#E2nodeComponentType N e2ap.ies id-E2nodeComponentType +#GlobalE2node-ID N e2ap.ies id-GlobalE2node-ID +#GlobalRIC-ID N e2ap.ies id-GlobalRIC-ID +#RANfunctionDefinition N e2ap.ies id-RANfunctionDefinition +#RANfunctionID N e2ap.ies id-RANfunctionID +#RANfunctionOID N e2ap.ies id-RANfunctionOID +#RANfunctionRevision N e2ap.ies id-RANfunctionRevision +#RICactionDefinition N e2ap.ies id-RICactionDefinition +#RICactionID N e2ap.ies id-RICactionID +#RICactionType N e2ap.ies id-RICactionType +#RICcallProcessID N e2ap.ies id-RICcallProcessID +#RICcontrolAckRequest N e2ap.ies id-RICcontrolAckRequest +#RICcontrolHeader N e2ap.ies id-RICcontrolHeader +#RICcontrolMessage N e2ap.ies id-RICcontrolMessage +#RICcontrolOutcome N e2ap.ies id-RICcontrolOutcome +#RICcontrolStatus N e2ap.ies id-RICcontrolStatus +#RICeventTriggerDefinition N e2ap.ies id-RICeventTriggerDefinition +#RICindicationHeader N e2ap.ies id-RICindicationHeader +#RICindicationMessage N e2ap.ies id-RICindicationMessage +#RICindicationSN N e2ap.ies id-RICindicationSN +#RICindicationType N e2ap.ies id-RICindicationType +#RICrequestID N e2ap.ies id-RICrequestID +#RICsubsequentAction N e2ap.ies id-RICsubsequentAction +#TimeToWait N e2ap.ies id-TimeToWait +#TNLinformation N e2ap.ies id-TNLinformation +#TNLusage N e2ap.ies id-TNLusage +#TransactionID N e2ap.ies id-TransactionID + + +#e2ap-PROTOCOL-EXTENSION + + + +#E2AP-ELEMENTARY-PROCEDURE + +#E2connectionUpdate N e2ap.proc.imsg id-E2connectionUpdate +#E2connectionUpdateAcknowledge N e2ap.proc.sout id-E2connectionUpdate +#E2connectionUpdateFailure N e2ap.proc.uout id-E2connectionUpdate + +#E2nodeConfigurationUpdate N e2ap.proc.imsg id-E2nodeConfigurationUpdate +#E2nodeConfigurationUpdateAcknowledge N e2ap.proc.sout id-E2nodeConfigurationUpdate +#E2nodeConfigurationUpdateFailure N e2ap.proc.uout id-E2nodeConfigurationUpdate + +E2setupFailure N e2ap.proc.uout id-E2setup +E2setupRequest N e2ap.proc.imsg id-E2setup +E2setupResponse N e2ap.proc.sout id-E2setup + +ErrorIndication N e2ap.proc.imsg id-ErrorIndication + +ResetRequest N e2ap.proc.imsg id-Reset +ResetResponse N e2ap.proc.sout id-Reset + +RICcontrolAcknowledge N e2ap.proc.sout id-RICcontrol +RICcontrolFailure N e2ap.proc.uout id-RICcontrol +RICcontrolRequest N e2ap.proc.imsg id-RICcontrol + +RICindication N e2ap.proc.imsg id-RICindication + +RICserviceQuery N e2ap.proc.imsg id-RICserviceQuery + +RICserviceUpdate N e2ap.proc.imsg id-RICserviceUpdate +RICserviceUpdateAcknowledge N e2ap.proc.sout id-RICserviceUpdate +RICserviceUpdateFailure N e2ap.proc.uout id-RICserviceUpdate + +RICsubscriptionFailure N e2ap.proc.uout id-RICsubscription +RICsubscriptionRequest N e2ap.proc.imsg id-RICsubscription +RICsubscriptionResponse N e2ap.proc.sout id-RICsubscription + +RICsubscriptionDeleteFailure N e2ap.proc.uout id-RICsubscriptionDelete +RICsubscriptionDeleteRequest N e2ap.proc.imsg id-RICsubscriptionDelete +RICsubscriptionDeleteResponse N e2ap.proc.sout id-RICsubscriptionDelete + + + +#.FN_HDR E2setupFailure + col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "E2setupFailure"); + +#.FN_HDR E2setupRequest + col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "E2setupRequest"); + +#.FN_HDR E2setupResponse + col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "E2setupResponse"); + +#.FN_HDR ErrorIndication + col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "ErrorIndication"); + +#.FN_HDR ResetRequest + col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "ResetRequest"); + +#.FN_HDR ResetResponse + col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "ResetResponse"); + +#.FN_HDR RICcontrolAcknowledge + col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "RICcontrolAcknowledge"); + + + +#.FN_HDR RICcontrolFailure + col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "RICcontrolFailure"); + +#.FN_HDR RICcontrolRequest + col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "RICcontrolRequest"); + +#.FN_HDR RICindication + col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "RICindication"); + + +#.FN_HDR RICserviceQuery + col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "RICserviceQuery"); + +#.FN_HDR RICserviceUpdate + col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "RICserviceUpdate"); + + +#.FN_HDR RICserviceUpdateAcknowledge + col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "RICserviceUpdateAcknowledge"); + +#.FN_HDR RICserviceUpdateFailure + col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "RICserviceUpdateFailure"); + + + +#.FN_HDR RICsubscriptionFailure + col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "RICsubscriptionFailure"); + +#.FN_HDR RICsubscriptionRequest + col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "RICsubscriptionRequest"); + +#.FN_HDR RICsubscriptionResponse + col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "RICsubscriptionResponse"); + + + +#.FN_HDR RICsubscriptionDeleteFailure + col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "RICsubscriptionDeleteFailure"); + +#.FN_HDR RICsubscriptionDeleteRequest + col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "RICsubscriptionDeleteRequest"); + +#.FN_HDR RICsubscriptionDeleteResponse + col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "RICsubscriptionDeleteResponse"); + + + + + + + +# +# Editor modelines - https://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: +# diff --git a/epan/dissectors/asn1/e2ap/e2sm-kpm-v1.asn b/epan/dissectors/asn1/e2ap/e2sm-kpm-v1.asn new file mode 100755 index 0000000000..8e20c77f7f --- /dev/null +++ b/epan/dissectors/asn1/e2ap/e2sm-kpm-v1.asn @@ -0,0 +1,426 @@ +-- ASN1START +-- ************************************************************** +-- E2SM-KPM +-- Information Element Definitions +-- +-- ************************************************************** + + +E2SM-KPM-IEs { +iso(1) identified-organization(3) dod(6) internet(1) private(4) enterprise(1) 53148 e2(1) version1 (1) e2sm(2) e2sm-KPMMON-IEs (2)} + +DEFINITIONS AUTOMATIC TAGS ::= + +BEGIN + +-- ************************************************************** +-- IEs +-- ************************************************************** + +-- ************************************************************** + +GlobalKPMnode-ID ::= CHOICE{ + gNB GlobalKPMnode-gNB-ID, + en-gNB GlobalKPMnode-en-gNB-ID, + ng-eNB GlobalKPMnode-ng-eNB-ID, + eNB GlobalKPMnode-eNB-ID, + ... +} + +-- ************************************************************** + +GlobalKPMnode-gNB-ID ::= SEQUENCE{ + global-gNB-ID GlobalgNB-ID, + gNB-CU-UP-ID GNB-CU-UP-ID OPTIONAL, + gNB-DU-ID GNB-DU-ID OPTIONAL, + ... +} + +--GlobalgNB-ID ::= SEQUENCE { +-- plmn-id PLMN-Identity, +-- gnb-id GNB-ID-Choice, +-- ... +--} + +-- GNB-CU-UP-ID ::= INTEGER (0..68719476735) +-- GNB-DU-ID ::= INTEGER (0..68719476735) + +-- GNB-ID-Choice ::= CHOICE { +-- gnb-ID BIT STRING (SIZE(22..32)), +-- ... +--} + +-- ************************************************************** + +GlobalKPMnode-en-gNB-ID ::= SEQUENCE{ + global-gNB-ID GlobalenGNB-ID, + ... +} + +--GlobalenGNB-ID ::= SEQUENCE { +-- pLMN-Identity PLMN-Identity, +-- gNB-ID ENGNB-ID, +-- ... +--} + +--ENGNB-ID ::= CHOICE { +-- gNB-ID BIT STRING (SIZE (22..32)), +-- ... +--} + +-- ************************************************************** + +GlobalKPMnode-ng-eNB-ID ::= SEQUENCE{ + global-ng-eNB-ID GlobalngeNB-ID, + ... +} + +--GlobalngeNB-ID ::= SEQUENCE { +-- plmn-id PLMN-Identity, +-- enb-id ENB-ID-Choice, +-- ... +--} + +--ENB-ID-Choice ::= CHOICE { +-- enb-ID-macro BIT STRING (SIZE(20)), +-- enb-ID-shortmacro BIT STRING (SIZE(18)), +-- enb-ID-longmacro BIT STRING (SIZE(21)), +-- ... +--} + +-- ************************************************************** + +GlobalKPMnode-eNB-ID ::= SEQUENCE{ + global-eNB-ID GlobalENB-ID, + ... +} + +--GlobalENB-ID ::= SEQUENCE { +-- pLMN-Identity PLMN-Identity, +-- eNB-ID ENB-ID, +-- ... +--} + +--ENB-ID ::= CHOICE { +-- macro-eNB-ID BIT STRING (SIZE (20)), +-- home-eNB-ID BIT STRING (SIZE (28)), +-- ... , +-- short-Macro-eNB-ID BIT STRING (SIZE(18)), +-- long-Macro-eNB-ID BIT STRING (SIZE(21)) +--} + + +NRCGI ::= SEQUENCE { + pLMN-Identity PLMN-Identity, + nRCellIdentity NRCellIdentity +} + +--PLMN-Identity ::= OCTET STRING (SIZE(3)) + +NRCellIdentity ::= BIT STRING (SIZE(36)) + +SNSSAI ::= SEQUENCE { + sST OCTET STRING (SIZE(1)), + sD OCTET STRING (SIZE(3)) OPTIONAL +} + +-- ************************************************************** +-- +-- Lists +-- +-- ************************************************************** + +maxofMessageProtocolTests INTEGER ::= 15 +maxofRICstyles INTEGER ::= 63 +maxnoofQCI INTEGER ::= 256 +maxnoofQoSFlows INTEGER ::= 64 +maxnoofSliceItems INTEGER ::= 1024 +maxnoofContainerListItems INTEGER ::= 3 +maxCellingNBDU INTEGER ::= 512 +maxofContainers INTEGER ::= 8 +maxPLMN INTEGER ::= 12 -- Maximum number of PLMNs broadcast and reported by UE at establisghment + +RIC-Style-Type ::= INTEGER + +RIC-Style-Name ::= PrintableString(SIZE(1..150,...)) + +RIC-Format-Type ::= INTEGER + + +-- ************************************************************** +-- E2SM-KPM Service model IEs +-- ************************************************************** + +-- ************************************************************** +-- Event Trigger Definition OCTET STRING contents +-- ************************************************************** + +-- E2SM-KPM-EventTriggerDefinition IE +E2SM-KPM-EventTriggerDefinition ::= CHOICE{ + eventDefinition-Format1 E2SM-KPM-EventTriggerDefinition-Format1, + ... +} + +-- E2SM-KPM-EventTriggerDefinition IE is used for Event Trigger Definition Format 1 +E2SM-KPM-EventTriggerDefinition-Format1 ::= SEQUENCE{ + policyTest-List SEQUENCE (SIZE(1..maxofMessageProtocolTests)) OF Trigger-ConditionIE-Item OPTIONAL, + ... +} + +-- ************************************************************** +-- Action Definition OCTET STRING contents +-- ************************************************************** + +-- E2SM-KPM-ActionDefinition IE +E2SM-KPM-ActionDefinition ::= SEQUENCE{ + ric-Style-Type RIC-Style-Type, + ... +} + +-- ************************************************************** +-- Indication Header OCTET STRING contents +-- ************************************************************** + +-- E2SM-KPM-IndicationHeader IE +E2SM-KPM-IndicationHeader ::= CHOICE{ + indicationHeader-Format1 E2SM-KPM-IndicationHeader-Format1, + ... +} + +-- E2SM-KPM-IndicationHeader Format 1 +E2SM-KPM-IndicationHeader-Format1 ::= SEQUENCE{ + id-GlobalKPMnode-ID GlobalKPMnode-ID OPTIONAL, + nRCGI NRCGI OPTIONAL, + pLMN-Identity PLMN-Identity OPTIONAL, + sliceID SNSSAI OPTIONAL, + fiveQI INTEGER (0..255) OPTIONAL, + qci INTEGER (0..255) OPTIONAL, + ... +} + +-- ************************************************************** +-- Indication Message OCTET STRING contents +-- ************************************************************** + +-- E2SM-KPM-IndicationMessage IE +E2SM-KPM-IndicationMessage ::= CHOICE{ + ric-Style-Type RIC-Style-Type, + indicationMessage-Format1 E2SM-KPM-IndicationMessage-Format1, + ... +} + +-- E2SM-KPM-IndicationMessage-Format 1 IE +E2SM-KPM-IndicationMessage-Format1 ::= SEQUENCE{ + pm-Containers SEQUENCE (SIZE(1..maxCellingNBDU)) OF PM-Containers-List, + ... +} + +PM-Containers-List ::= SEQUENCE{ + performanceContainer PF-Container OPTIONAL, + theRANContainer RAN-Container OPTIONAL, + ... +} + +-- *************************************************************** +-- RAN Function Description OCTET STRING contents +-- *************************************************************** + +-- E2SM-KPM-RANfunction-Description +E2SM-KPM-RANfunction-Description ::= SEQUENCE{ + ranFunction-Name RANfunction-Name, + e2SM-KPM-RANfunction-Item SEQUENCE{ + ric-EventTriggerStyle-List SEQUENCE (SIZE(1..maxofRICstyles)) OF RIC-EventTriggerStyle-List OPTIONAL, + ric-ReportStyle-List SEQUENCE (SIZE(1..maxofRICstyles)) OF RIC-ReportStyle-List OPTIONAL, + ... + }, + ... +} + + +-- *************************************************************** +-- commmon IEs +-- *************************************************************** + +NI-Type ::= ENUMERATED{ + x2-u, + xn-u, + f1-u, + ... +} + +RAN-Container ::= OCTET STRING + +Trigger-ConditionIE-Item ::= SEQUENCE{ + report-Period-IE RT-Period-IE, + ... +} + +RT-Period-IE ::= ENUMERATED{ ms10, ms20, ms32, ms40, ms60, ms64, ms70, ms80, ms128, ms160, ms256, ms320, ms512, ms640, ms1024, ms1280, ms2048, ms2560, ms5120, ms10240, ...} + +RANcallProcess-ID-string ::= PrintableString(SIZE(1..150,...)) + +RANfunction-Name ::= SEQUENCE{ + ranFunction-ShortName PrintableString(SIZE(1..150,...)), + ranFunction-E2SM-OID PrintableString(SIZE(1..1000,...)), + ranFunction-Description PrintableString(SIZE(1..150,...)), + ranFunction-Instance INTEGER OPTIONAL, + ... +} + +RIC-EventTriggerStyle-List ::= SEQUENCE{ + ric-EventTriggerStyle-Type RIC-Style-Type, + ric-EventTriggerStyle-Name RIC-Style-Name, + ric-EventTriggerFormat-Type RIC-Format-Type, + ... +} + +RIC-ReportStyle-List ::= SEQUENCE{ + ric-ReportStyle-Type RIC-Style-Type, + ric-ReportStyle-Name RIC-Style-Name, + ric-IndicationHeaderFormat-Type RIC-Format-Type, + ric-IndicationMessageFormat-Type RIC-Format-Type, + ... +} + +PF-Container ::= CHOICE { + oDU ODU-PF-Container, + oCU-CP OCUCP-PF-Container, + oCU-UP OCUUP-PF-Container +} + +GNB-CU-CP-Name ::= PrintableString(SIZE(1..150,...)) + +GNB-DU-Name ::= PrintableString(SIZE(1..150,...)) + +GNB-CU-UP-Name ::= PrintableString(SIZE(1..150,...)) + + +-- ************************************************************** +-- O-DU Container IEs +-- ************************************************************** + + +ODU-PF-Container ::= SEQUENCE{ + cellResourceReportList SEQUENCE (SIZE(1..maxCellingNBDU)) OF CellResourceReportListItem, + ... +} + +CellResourceReportListItem ::= SEQUENCE{ + nRCGI NRCGI, + dl-TotalofAvailablePRBs INTEGER (0..273) OPTIONAL, + ul-TotalofAvailablePRBs INTEGER (0..273) OPTIONAL, + servedPlmnPerCellList SEQUENCE (SIZE(1..maxPLMN)) OF ServedPlmnPerCellListItem, + ... +} + +ServedPlmnPerCellListItem ::= SEQUENCE{ + pLMN-Identity PLMN-Identity, + du-PM-5GC FGC-DU-PM-Container OPTIONAL, + du-PM-EPC EPC-DU-PM-Container OPTIONAL, + ... +} + +FGC-DU-PM-Container ::= SEQUENCE{ + slicePerPlmnPerCellList SEQUENCE (SIZE(1..maxnoofSliceItems)) OF SlicePerPlmnPerCellListItem, + ... +} + +SlicePerPlmnPerCellListItem ::= SEQUENCE{ + sliceID SNSSAI, + fQIPERSlicesPerPlmnPerCellList SEQUENCE (SIZE(1..maxnoofQoSFlows)) OF FQIPERSlicesPerPlmnPerCellListItem, + ... +} + +FQIPERSlicesPerPlmnPerCellListItem ::= SEQUENCE{ + fiveQI INTEGER (0..255), + dl-PRBUsage INTEGER (0..273) OPTIONAL, + ul-PRBUsage INTEGER (0..273) OPTIONAL, + ... +} + +EPC-DU-PM-Container ::= SEQUENCE{ + perQCIReportList SEQUENCE (SIZE(1..maxnoofQCI)) OF PerQCIReportListItem, + ... +} + +PerQCIReportListItem ::= SEQUENCE{ + qci INTEGER (0..255), + dl-PRBUsage INTEGER (0..100) OPTIONAL, + ul-PRBUsage INTEGER (0..100) OPTIONAL, + ... +} + +-- ************************************************************** +-- O-CUCP Container IEs +-- ************************************************************** + + +OCUCP-PF-Container ::= SEQUENCE{ + gNB-CU-CP-Name GNB-CU-CP-Name OPTIONAL, + cu-CP-Resource-Status SEQUENCE { + numberOfActive-UEs INTEGER (1..65536, ...) OPTIONAL + } +} + +-- ************************************************************** +-- O-CU-UP Container IEs +-- ************************************************************** + +OCUUP-PF-Container ::= SEQUENCE{ + gNB-CU-UP-Name GNB-CU-UP-Name OPTIONAL, + pf-ContainerList SEQUENCE (SIZE(1..maxnoofContainerListItems)) OF PF-ContainerListItem, + ... +} + +PF-ContainerListItem ::= SEQUENCE{ + interface-type NI-Type, + o-CU-UP-PM-Container CUUPMeasurement-Container, + ... +} + +CUUPMeasurement-Container ::= SEQUENCE{ + plmnList SEQUENCE (SIZE(1.. maxPLMN)) OF PlmnID-List, + ... +} + +PlmnID-List ::= SEQUENCE{ + pLMN-Identity PLMN-Identity, + cu-UP-PM-5GC FGC-CUUP-PM-Format OPTIONAL, + cu-UP-PM-EPC EPC-CUUP-PM-Format OPTIONAL, + ... +} + +FGC-CUUP-PM-Format ::= SEQUENCE{ + sliceToReportList SEQUENCE (SIZE(1..maxnoofSliceItems)) OF SliceToReportListItem, + ... +} + +SliceToReportListItem ::= SEQUENCE{ + sliceID SNSSAI, + fQIPERSlicesPerPlmnList SEQUENCE (SIZE(1..maxnoofQoSFlows)) OF FQIPERSlicesPerPlmnListItem, + ... +} + +FQIPERSlicesPerPlmnListItem ::= SEQUENCE{ + fiveQI INTEGER (0..255), + pDCPBytesDL INTEGER (0..10000000000,...) OPTIONAL, + pDCPBytesUL INTEGER (0..10000000000,...) OPTIONAL, + ... +} + +EPC-CUUP-PM-Format ::= SEQUENCE{ + perQCIReportList SEQUENCE (SIZE(1..maxnoofQCI)) OF PerQCIReportListItemFormat, + ... +} + +PerQCIReportListItemFormat ::= SEQUENCE{ + qci INTEGER (0..255), + pDCPBytesDL INTEGER (0..10000000000,...) OPTIONAL, + pDCPBytesUL INTEGER (0..10000000000,...) OPTIONAL, + ... +} + + +END + +-- ASN1STOP diff --git a/epan/dissectors/asn1/e2ap/packet-e2ap-template.c b/epan/dissectors/asn1/e2ap/packet-e2ap-template.c new file mode 100755 index 0000000000..1cec30b1fb --- /dev/null +++ b/epan/dissectors/asn1/e2ap/packet-e2ap-template.c @@ -0,0 +1,284 @@ +/* packet-e2ap.c + * Routines for E2APApplication Protocol (e2ap) packet dissection + * Copyright 2021, Martin Mathieson + * + * Wireshark - Network traffic analyzer + * By Gerald Combs + * Copyright 1998 Gerald Combs + * + * SPDX-License-Identifier: GPL-2.0-or-later + * + * References: ORAN-WG3.E2AP-v01.00, ORAN-WG3.E2SM-KPM-v01.00 + */ + +#include "config.h" +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "packet-e2ap.h" +#include "packet-per.h" +#define PNAME "E2 Application Protocol" +#define PSNAME "E2AP" +#define PFNAME "e2ap" + +/* Dissector will use SCTP PPID 18 or SCTP port. IANA assigned port = 37464 */ +#define SCTP_PORT_E2AP 37464 + +void proto_register_e2ap(void); +void proto_reg_handoff_e2ap(void); + +static dissector_handle_t e2ap_handle; + +#include "packet-e2ap-val.h" + +/* Initialize the protocol and registered fields */ +static int proto_e2ap = -1; +#include "packet-e2ap-hf.c" + +/* Initialize the subtree pointers */ +static gint ett_e2ap = -1; + +#include "packet-e2ap-ett.c" + + +enum{ + INITIATING_MESSAGE, + SUCCESSFUL_OUTCOME, + UNSUCCESSFUL_OUTCOME +}; + +typedef struct _e2ap_ctx_t { + guint32 message_type; + guint32 ProcedureCode; + guint32 ProtocolIE_ID; + guint32 ProtocolExtensionID; +} e2ap_ctx_t; + + + +struct e2ap_private_data { + guint32 procedure_code; + guint32 protocol_ie_id; + guint32 protocol_extension_id; + guint32 message_type; + guint32 ran_ue_e2ap_id; +}; + +/* Global variables */ +static guint gbl_e2apSctpPort = SCTP_PORT_E2AP; + +/* Dissector tables */ +static dissector_table_t e2ap_ies_dissector_table; +//static dissector_table_t e2ap_ies_p1_dissector_table; +//static dissector_table_t e2ap_ies_p2_dissector_table; +static dissector_table_t e2ap_extension_dissector_table; +static dissector_table_t e2ap_proc_imsg_dissector_table; +static dissector_table_t e2ap_proc_sout_dissector_table; +static dissector_table_t e2ap_proc_uout_dissector_table; +static dissector_table_t e2ap_n2_ie_type_dissector_table; + +static int dissect_ProtocolIEFieldValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *); +/* Currently not used +static int dissect_ProtocolIEFieldPairFirstValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree); +static int dissect_ProtocolIEFieldPairSecondValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree); +*/ + +/* Forward declarations */ +static int dissect_E2SM_KPM_ActionDefinition_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_); +static int dissect_E2SM_KPM_RANfunction_Description_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_); +static int dissect_E2SM_KPM_EventTriggerDefinition_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_); +static int dissect_E2SM_KPM_IndicationHeader_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_); +static int dissect_RANcallProcess_ID_string_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_); +static int dissect_E2SM_KPM_IndicationMessage_Format1_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_); + + +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 struct e2ap_private_data* +e2ap_get_private_data(packet_info *pinfo) +{ + struct e2ap_private_data *e2ap_data = (struct e2ap_private_data*)p_get_proto_data(pinfo->pool, pinfo, proto_e2ap, 0); + if (!e2ap_data) { + e2ap_data = wmem_new0(pinfo->pool, struct e2ap_private_data); + p_add_proto_data(pinfo->pool, pinfo, proto_e2ap, 0, e2ap_data); + } + return e2ap_data; +} + +#include "packet-e2ap-fn.c" + +static int dissect_ProtocolIEFieldValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_) +{ + e2ap_ctx_t e2ap_ctx; + struct e2ap_private_data *e2ap_data = e2ap_get_private_data(pinfo); + + e2ap_ctx.message_type = e2ap_data->message_type; + e2ap_ctx.ProcedureCode = e2ap_data->procedure_code; + e2ap_ctx.ProtocolIE_ID = e2ap_data->protocol_ie_id; + e2ap_ctx.ProtocolExtensionID = e2ap_data->protocol_extension_id; + + return (dissector_try_uint_new(e2ap_ies_dissector_table, e2ap_data->protocol_ie_id, tvb, pinfo, tree, FALSE, &e2ap_ctx)) ? tvb_captured_length(tvb) : 0; +} +/* Currently not used +static int dissect_ProtocolIEFieldPairFirstValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) +{ + struct e2ap_private_data *e2ap_data = e2ap_get_private_data(pinfo); + + return (dissector_try_uint(e2ap_ies_p1_dissector_table, e2ap_data->protocol_ie_id, tvb, pinfo, tree)) ? tvb_captured_length(tvb) : 0; +} + +static int dissect_ProtocolIEFieldPairSecondValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) +{ + struct e2ap_private_data *e2ap_data = e2ap_get_private_data(pinfo); + + return (dissector_try_uint(e2ap_ies_p2_dissector_table, e2ap_data->protocol_ie_id, tvb, pinfo, tree)) ? tvb_captured_length(tvb) : 0; +} +*/ + + +static int dissect_InitiatingMessageValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data) +{ + struct e2ap_private_data *e2ap_data = e2ap_get_private_data(pinfo); + + return (dissector_try_uint_new(e2ap_proc_imsg_dissector_table, e2ap_data->procedure_code, tvb, pinfo, tree, TRUE, data)) ? tvb_captured_length(tvb) : 0; +} + +static int dissect_SuccessfulOutcomeValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data) +{ + struct e2ap_private_data *e2ap_data = e2ap_get_private_data(pinfo); + + return (dissector_try_uint_new(e2ap_proc_sout_dissector_table, e2ap_data->procedure_code, tvb, pinfo, tree, TRUE, data)) ? tvb_captured_length(tvb) : 0; +} + +static int dissect_UnsuccessfulOutcomeValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data) +{ + struct e2ap_private_data *e2ap_data = e2ap_get_private_data(pinfo); + + return (dissector_try_uint_new(e2ap_proc_uout_dissector_table, e2ap_data->procedure_code, tvb, pinfo, tree, TRUE, data)) ? tvb_captured_length(tvb) : 0; +} + + +static int +dissect_e2ap(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_) +{ + proto_item *e2ap_item = NULL; + proto_tree *e2ap_tree = NULL; + + /* make entry in the Protocol column on summary display */ + col_set_str(pinfo->cinfo, COL_PROTOCOL, "E2AP"); + /* ensure that parent dissector is not e2ap before clearing fence */ + col_clear(pinfo->cinfo, COL_INFO); + + /* create the e2ap protocol tree */ + e2ap_item = proto_tree_add_item(tree, proto_e2ap, tvb, 0, -1, ENC_NA); + e2ap_tree = proto_item_add_subtree(e2ap_item, ett_e2ap); + + + return dissect_E2AP_PDU_PDU(tvb, pinfo, e2ap_tree, NULL); +} + + +/*--- proto_reg_handoff_e2ap ---------------------------------------*/ +void +proto_reg_handoff_e2ap(void) +{ + static gboolean Initialized=FALSE; + static guint SctpPort; + + if (!Initialized) { + dissector_add_for_decode_as("sctp.port", e2ap_handle); +#if 0 + /* TODO: should one or more of these be registered? */ + dissector_add_uint("sctp.ppi", E2_CP_PROTOCOL_ID, e2ap_handle); + dissector_add_uint("sctp.ppi", E2_UP_PROTOCOL_ID, e2ap_handle); + dissector_add_uint("sctp.ppi", E2_DU_PROTOCOL_ID, e2ap_handle); +#endif + + Initialized=TRUE; +#include "packet-e2ap-dis-tab.c" + + } else { + if (SctpPort != 0) { + dissector_delete_uint("sctp.port", SctpPort, e2ap_handle); + } + } + + SctpPort=gbl_e2apSctpPort; + if (SctpPort != 0) { + dissector_add_uint("sctp.port", SctpPort, e2ap_handle); + } +} + +/*--- proto_register_e2ap -------------------------------------------*/ +void proto_register_e2ap(void) { + + /* List of fields */ + + static hf_register_info hf[] = { +#include "packet-e2ap-hfarr.c" + + }; + + /* List of subtrees */ + static gint *ett[] = { + &ett_e2ap, +#include "packet-e2ap-ettarr.c" + }; + + + module_t *e2ap_module; + + /* Register protocol */ + proto_e2ap = proto_register_protocol(PNAME, PSNAME, PFNAME); + /* Register fields and subtrees */ + proto_register_field_array(proto_e2ap, hf, array_length(hf)); + proto_register_subtree_array(ett, array_length(ett)); + + + /* Register dissector */ + e2ap_handle = register_dissector("e2ap", dissect_e2ap, proto_e2ap); + + /* Register dissector tables */ + e2ap_ies_dissector_table = register_dissector_table("e2ap.ies", "E2AP-PROTOCOL-IES", proto_e2ap, FT_UINT32, BASE_DEC); +// e2ap_ies_p1_dissector_table = register_dissector_table("e2ap.ies.pair.first", "E2AP-PROTOCOL-IES-PAIR FirstValue", proto_e2ap, FT_UINT32, BASE_DEC); +// e2ap_ies_p2_dissector_table = register_dissector_table("e2ap.ies.pair.second", "E2AP-PROTOCOL-IES-PAIR SecondValue", proto_e2ap, FT_UINT32, BASE_DEC); + e2ap_extension_dissector_table = register_dissector_table("e2ap.extension", "E2AP-PROTOCOL-EXTENSION", proto_e2ap, FT_UINT32, BASE_DEC); + e2ap_proc_imsg_dissector_table = register_dissector_table("e2ap.proc.imsg", "E2AP-ELEMENTARY-PROCEDURE InitiatingMessage", proto_e2ap, FT_UINT32, BASE_DEC); + e2ap_proc_sout_dissector_table = register_dissector_table("e2ap.proc.sout", "E2AP-ELEMENTARY-PROCEDURE SuccessfulOutcome", proto_e2ap, FT_UINT32, BASE_DEC); + e2ap_proc_uout_dissector_table = register_dissector_table("e2ap.proc.uout", "E2AP-ELEMENTARY-PROCEDURE UnsuccessfulOutcome", proto_e2ap, FT_UINT32, BASE_DEC); + e2ap_n2_ie_type_dissector_table = register_dissector_table("e2ap.n2_ie_type", "E2AP N2 IE Type", proto_e2ap, FT_STRING, FALSE); + + /* Register configuration options for ports */ + e2ap_module = prefs_register_protocol(proto_e2ap, proto_reg_handoff_e2ap); + + prefs_register_uint_preference(e2ap_module, "sctp.port", + "e2ap SCTP Port", + "Set the SCTP port for e2ap messages", + 10, + &gbl_e2apSctpPort); +} + +/* + * 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: + */ diff --git a/epan/dissectors/packet-e2ap.c b/epan/dissectors/packet-e2ap.c new file mode 100644 index 0000000000..95a4d10347 --- /dev/null +++ b/epan/dissectors/packet-e2ap.c @@ -0,0 +1,4952 @@ +/* Do not modify this file. Changes will be overwritten. */ +/* Generated automatically by the ASN.1 to Wireshark dissector compiler */ +/* packet-e2ap.c */ +/* asn2wrs.py -p e2ap -c ./e2ap.cnf -s ./packet-e2ap-template -D . -O ../.. E2AP-CommonDataTypes.asn E2AP-Constants.asn E2AP-Containers.asn E2AP-IEs.asn E2AP-PDU-Contents.asn E2AP-PDU-Descriptions.asn e2sm-kpm-v1.asn */ + +/* Input file: packet-e2ap-template.c */ + +#line 1 "./asn1/e2ap/packet-e2ap-template.c" +/* packet-e2ap.c + * Routines for E2APApplication Protocol (e2ap) packet dissection + * Copyright 2021, Martin Mathieson + * + * Wireshark - Network traffic analyzer + * By Gerald Combs + * Copyright 1998 Gerald Combs + * + * SPDX-License-Identifier: GPL-2.0-or-later + * + * References: ORAN-WG3.E2AP-v01.00, ORAN-WG3.E2SM-KPM-v01.00 + */ + +#include "config.h" +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "packet-e2ap.h" +#include "packet-per.h" +#define PNAME "E2 Application Protocol" +#define PSNAME "E2AP" +#define PFNAME "e2ap" + +/* Dissector will use SCTP PPID 18 or SCTP port. IANA assigned port = 37464 */ +#define SCTP_PORT_E2AP 37464 + +void proto_register_e2ap(void); +void proto_reg_handoff_e2ap(void); + +static dissector_handle_t e2ap_handle; + + +/*--- Included file: packet-e2ap-val.h ---*/ +#line 1 "./asn1/e2ap/packet-e2ap-val.h" +#define maxProtocolIEs 65535 +#define maxnoofErrors 256 +#define maxofRANfunctionID 256 +#define maxofRICactionID 16 +#define maxofMessageProtocolTests 15 +#define maxofRICstyles 63 +#define maxnoofQCI 256 +#define maxnoofQoSFlows 64 +#define maxnoofSliceItems 1024 +#define maxnoofContainerListItems 3 +#define maxCellingNBDU 512 +#define maxofContainers 8 +#define maxPLMN 12 + +typedef enum _ProcedureCode_enum { + id_E2setup = 1, + id_ErrorIndication = 2, + id_Reset = 3, + id_RICcontrol = 4, + id_RICindication = 5, + id_RICserviceQuery = 6, + id_RICserviceUpdate = 7, + id_RICsubscription = 8, + id_RICsubscriptionDelete = 9 +} ProcedureCode_enum; + +typedef enum _ProtocolIE_ID_enum { + id_Cause = 1, + id_CriticalityDiagnostics = 2, + id_GlobalE2node_ID = 3, + id_GlobalRIC_ID = 4, + id_RANfunctionID = 5, + id_RANfunctionID_Item = 6, + id_RANfunctionIEcause_Item = 7, + id_RANfunction_Item = 8, + id_RANfunctionsAccepted = 9, + id_RANfunctionsAdded = 10, + id_RANfunctionsDeleted = 11, + id_RANfunctionsModified = 12, + id_RANfunctionsRejected = 13, + id_RICaction_Admitted_Item = 14, + id_RICactionID = 15, + id_RICaction_NotAdmitted_Item = 16, + id_RICactions_Admitted = 17, + id_RICactions_NotAdmitted = 18, + id_RICaction_ToBeSetup_Item = 19, + id_RICcallProcessID = 20, + id_RICcontrolAckRequest = 21, + id_RICcontrolHeader = 22, + id_RICcontrolMessage = 23, + id_RICcontrolStatus = 24, + id_RICindicationHeader = 25, + id_RICindicationMessage = 26, + id_RICindicationSN = 27, + id_RICindicationType = 28, + id_RICrequestID = 29, + id_RICsubscriptionDetails = 30, + id_TimeToWait = 31, + id_RICcontrolOutcome = 32 +} ProtocolIE_ID_enum; + +/*--- End of included file: packet-e2ap-val.h ---*/ +#line 43 "./asn1/e2ap/packet-e2ap-template.c" + +/* Initialize the protocol and registered fields */ +static int proto_e2ap = -1; + +/*--- Included file: packet-e2ap-hf.c ---*/ +#line 1 "./asn1/e2ap/packet-e2ap-hf.c" +static int hf_e2ap_Cause_PDU = -1; /* Cause */ +static int hf_e2ap_CriticalityDiagnostics_PDU = -1; /* CriticalityDiagnostics */ +static int hf_e2ap_GlobalE2node_ID_PDU = -1; /* GlobalE2node_ID */ +static int hf_e2ap_GlobalRIC_ID_PDU = -1; /* GlobalRIC_ID */ +static int hf_e2ap_RANfunctionID_PDU = -1; /* RANfunctionID */ +static int hf_e2ap_RICactionID_PDU = -1; /* RICactionID */ +static int hf_e2ap_RICcallProcessID_PDU = -1; /* RICcallProcessID */ +static int hf_e2ap_RICcontrolAckRequest_PDU = -1; /* RICcontrolAckRequest */ +static int hf_e2ap_RICcontrolHeader_PDU = -1; /* RICcontrolHeader */ +static int hf_e2ap_RICcontrolMessage_PDU = -1; /* RICcontrolMessage */ +static int hf_e2ap_RICcontrolOutcome_PDU = -1; /* RICcontrolOutcome */ +static int hf_e2ap_RICcontrolStatus_PDU = -1; /* RICcontrolStatus */ +static int hf_e2ap_RICindicationHeader_PDU = -1; /* RICindicationHeader */ +static int hf_e2ap_RICindicationMessage_PDU = -1; /* RICindicationMessage */ +static int hf_e2ap_RICindicationSN_PDU = -1; /* RICindicationSN */ +static int hf_e2ap_RICindicationType_PDU = -1; /* RICindicationType */ +static int hf_e2ap_RICrequestID_PDU = -1; /* RICrequestID */ +static int hf_e2ap_TimeToWait_PDU = -1; /* TimeToWait */ +static int hf_e2ap_RICsubscriptionRequest_PDU = -1; /* RICsubscriptionRequest */ +static int hf_e2ap_RICsubscriptionDetails_PDU = -1; /* RICsubscriptionDetails */ +static int hf_e2ap_RICaction_ToBeSetup_Item_PDU = -1; /* RICaction_ToBeSetup_Item */ +static int hf_e2ap_RICsubscriptionResponse_PDU = -1; /* RICsubscriptionResponse */ +static int hf_e2ap_RICaction_Admitted_List_PDU = -1; /* RICaction_Admitted_List */ +static int hf_e2ap_RICaction_Admitted_Item_PDU = -1; /* RICaction_Admitted_Item */ +static int hf_e2ap_RICaction_NotAdmitted_List_PDU = -1; /* RICaction_NotAdmitted_List */ +static int hf_e2ap_RICaction_NotAdmitted_Item_PDU = -1; /* RICaction_NotAdmitted_Item */ +static int hf_e2ap_RICsubscriptionFailure_PDU = -1; /* RICsubscriptionFailure */ +static int hf_e2ap_RICsubscriptionDeleteRequest_PDU = -1; /* RICsubscriptionDeleteRequest */ +static int hf_e2ap_RICsubscriptionDeleteResponse_PDU = -1; /* RICsubscriptionDeleteResponse */ +static int hf_e2ap_RICsubscriptionDeleteFailure_PDU = -1; /* RICsubscriptionDeleteFailure */ +static int hf_e2ap_RICindication_PDU = -1; /* RICindication */ +static int hf_e2ap_RICcontrolRequest_PDU = -1; /* RICcontrolRequest */ +static int hf_e2ap_RICcontrolAcknowledge_PDU = -1; /* RICcontrolAcknowledge */ +static int hf_e2ap_RICcontrolFailure_PDU = -1; /* RICcontrolFailure */ +static int hf_e2ap_ErrorIndication_PDU = -1; /* ErrorIndication */ +static int hf_e2ap_E2setupRequest_PDU = -1; /* E2setupRequest */ +static int hf_e2ap_E2setupResponse_PDU = -1; /* E2setupResponse */ +static int hf_e2ap_E2setupFailure_PDU = -1; /* E2setupFailure */ +static int hf_e2ap_ResetRequest_PDU = -1; /* ResetRequest */ +static int hf_e2ap_ResetResponse_PDU = -1; /* ResetResponse */ +static int hf_e2ap_RICserviceUpdate_PDU = -1; /* RICserviceUpdate */ +static int hf_e2ap_RANfunctions_List_PDU = -1; /* RANfunctions_List */ +static int hf_e2ap_RANfunction_Item_PDU = -1; /* RANfunction_Item */ +static int hf_e2ap_RANfunctionsID_List_PDU = -1; /* RANfunctionsID_List */ +static int hf_e2ap_RANfunctionID_Item_PDU = -1; /* RANfunctionID_Item */ +static int hf_e2ap_RICserviceUpdateAcknowledge_PDU = -1; /* RICserviceUpdateAcknowledge */ +static int hf_e2ap_RANfunctionsIDcause_List_PDU = -1; /* RANfunctionsIDcause_List */ +static int hf_e2ap_RANfunctionIDcause_Item_PDU = -1; /* RANfunctionIDcause_Item */ +static int hf_e2ap_RICserviceUpdateFailure_PDU = -1; /* RICserviceUpdateFailure */ +static int hf_e2ap_RICserviceQuery_PDU = -1; /* RICserviceQuery */ +static int hf_e2ap_E2AP_PDU_PDU = -1; /* E2AP_PDU */ +static int hf_e2ap_E2SM_KPM_EventTriggerDefinition_PDU = -1; /* E2SM_KPM_EventTriggerDefinition */ +static int hf_e2ap_E2SM_KPM_ActionDefinition_PDU = -1; /* E2SM_KPM_ActionDefinition */ +static int hf_e2ap_E2SM_KPM_IndicationHeader_PDU = -1; /* E2SM_KPM_IndicationHeader */ +static int hf_e2ap_E2SM_KPM_IndicationMessage_Format1_PDU = -1; /* E2SM_KPM_IndicationMessage_Format1 */ +static int hf_e2ap_E2SM_KPM_RANfunction_Description_PDU = -1; /* E2SM_KPM_RANfunction_Description */ +static int hf_e2ap_RANcallProcess_ID_string_PDU = -1; /* RANcallProcess_ID_string */ +static int hf_e2ap_ProtocolIE_Container_item = -1; /* ProtocolIE_Field */ +static int hf_e2ap_id = -1; /* ProtocolIE_ID */ +static int hf_e2ap_criticality = -1; /* Criticality */ +static int hf_e2ap_value = -1; /* T_value */ +static int hf_e2ap_ricRequest = -1; /* CauseRIC */ +static int hf_e2ap_ricService = -1; /* CauseRICservice */ +static int hf_e2ap_transport = -1; /* CauseTransport */ +static int hf_e2ap_protocol = -1; /* CauseProtocol */ +static int hf_e2ap_misc = -1; /* CauseMisc */ +static int hf_e2ap_procedureCode = -1; /* ProcedureCode */ +static int hf_e2ap_triggeringMessage = -1; /* TriggeringMessage */ +static int hf_e2ap_procedureCriticality = -1; /* Criticality */ +static int hf_e2ap_ricRequestorID = -1; /* RICrequestID */ +static int hf_e2ap_iEsCriticalityDiagnostics = -1; /* CriticalityDiagnostics_IE_List */ +static int hf_e2ap_CriticalityDiagnostics_IE_List_item = -1; /* CriticalityDiagnostics_IE_Item */ +static int hf_e2ap_iECriticality = -1; /* Criticality */ +static int hf_e2ap_iE_ID = -1; /* ProtocolIE_ID */ +static int hf_e2ap_typeOfError = -1; /* TypeOfError */ +static int hf_e2ap_macro_eNB_ID = -1; /* BIT_STRING_SIZE_20 */ +static int hf_e2ap_home_eNB_ID = -1; /* BIT_STRING_SIZE_28 */ +static int hf_e2ap_short_Macro_eNB_ID = -1; /* BIT_STRING_SIZE_18 */ +static int hf_e2ap_long_Macro_eNB_ID = -1; /* BIT_STRING_SIZE_21 */ +static int hf_e2ap_enb_ID_macro = -1; /* BIT_STRING_SIZE_20 */ +static int hf_e2ap_enb_ID_shortmacro = -1; /* BIT_STRING_SIZE_18 */ +static int hf_e2ap_enb_ID_longmacro = -1; /* BIT_STRING_SIZE_21 */ +static int hf_e2ap_gNB_ID = -1; /* BIT_STRING_SIZE_22_32 */ +static int hf_e2ap_gNB = -1; /* GlobalE2node_gNB_ID */ +static int hf_e2ap_en_gNB = -1; /* GlobalE2node_en_gNB_ID */ +static int hf_e2ap_ng_eNB = -1; /* GlobalE2node_ng_eNB_ID */ +static int hf_e2ap_eNB = -1; /* GlobalE2node_eNB_ID */ +static int hf_e2ap_global_gNB_ID = -1; /* GlobalenGNB_ID */ +static int hf_e2ap_global_eNB_ID = -1; /* GlobalENB_ID */ +static int hf_e2ap_global_gNB_ID_01 = -1; /* GlobalgNB_ID */ +static int hf_e2ap_gNB_CU_UP_ID = -1; /* GNB_CU_UP_ID */ +static int hf_e2ap_gNB_DU_ID = -1; /* GNB_DU_ID */ +static int hf_e2ap_global_ng_eNB_ID = -1; /* GlobalngeNB_ID */ +static int hf_e2ap_pLMN_Identity = -1; /* PLMN_Identity */ +static int hf_e2ap_eNB_ID = -1; /* ENB_ID */ +static int hf_e2ap_gNB_ID_01 = -1; /* ENGNB_ID */ +static int hf_e2ap_plmn_id = -1; /* PLMN_Identity */ +static int hf_e2ap_gnb_id = -1; /* GNB_ID_Choice */ +static int hf_e2ap_enb_id = -1; /* ENB_ID_Choice */ +static int hf_e2ap_ric_ID = -1; /* BIT_STRING_SIZE_20 */ +static int hf_e2ap_gnb_ID = -1; /* BIT_STRING_SIZE_22_32 */ +static int hf_e2ap_ricRequestorID_01 = -1; /* INTEGER_0_65535 */ +static int hf_e2ap_ricInstanceID = -1; /* INTEGER_0_65535 */ +static int hf_e2ap_ricSubsequentActionType = -1; /* RICsubsequentActionType */ +static int hf_e2ap_ricTimeToWait = -1; /* RICtimeToWait */ +static int hf_e2ap_protocolIEs = -1; /* ProtocolIE_Container */ +static int hf_e2ap_ricEventTriggerDefinition = -1; /* RICeventTriggerDefinition */ +static int hf_e2ap_ricAction_ToBeSetup_List = -1; /* RICactions_ToBeSetup_List */ +static int hf_e2ap_RICactions_ToBeSetup_List_item = -1; /* ProtocolIE_SingleContainer */ +static int hf_e2ap_ricActionID = -1; /* RICactionID */ +static int hf_e2ap_ricActionType = -1; /* RICactionType */ +static int hf_e2ap_ricActionDefinition = -1; /* RICactionDefinition */ +static int hf_e2ap_ricSubsequentAction = -1; /* RICsubsequentAction */ +static int hf_e2ap_RICaction_Admitted_List_item = -1; /* ProtocolIE_SingleContainer */ +static int hf_e2ap_RICaction_NotAdmitted_List_item = -1; /* ProtocolIE_SingleContainer */ +static int hf_e2ap_cause = -1; /* Cause */ +static int hf_e2ap_RANfunctions_List_item = -1; /* ProtocolIE_SingleContainer */ +static int hf_e2ap_ranFunctionID = -1; /* RANfunctionID */ +static int hf_e2ap_ranFunctionDefinition = -1; /* RANfunctionDefinition */ +static int hf_e2ap_ranFunctionRevision = -1; /* RANfunctionRevision */ +static int hf_e2ap_RANfunctionsID_List_item = -1; /* ProtocolIE_SingleContainer */ +static int hf_e2ap_RANfunctionsIDcause_List_item = -1; /* ProtocolIE_SingleContainer */ +static int hf_e2ap_initiatingMessage = -1; /* InitiatingMessage */ +static int hf_e2ap_successfulOutcome = -1; /* SuccessfulOutcome */ +static int hf_e2ap_unsuccessfulOutcome = -1; /* UnsuccessfulOutcome */ +static int hf_e2ap_initiatingMessagevalue = -1; /* InitiatingMessage_value */ +static int hf_e2ap_successfulOutcome_value = -1; /* SuccessfulOutcome_value */ +static int hf_e2ap_unsuccessfulOutcome_value = -1; /* UnsuccessfulOutcome_value */ +static int hf_e2ap_gNB_01 = -1; /* GlobalKPMnode_gNB_ID */ +static int hf_e2ap_en_gNB_01 = -1; /* GlobalKPMnode_en_gNB_ID */ +static int hf_e2ap_ng_eNB_01 = -1; /* GlobalKPMnode_ng_eNB_ID */ +static int hf_e2ap_eNB_01 = -1; /* GlobalKPMnode_eNB_ID */ +static int hf_e2ap_nRCellIdentity = -1; /* NRCellIdentity */ +static int hf_e2ap_sST = -1; /* OCTET_STRING_SIZE_1 */ +static int hf_e2ap_sD = -1; /* OCTET_STRING_SIZE_3 */ +static int hf_e2ap_eventDefinition_Format1 = -1; /* E2SM_KPM_EventTriggerDefinition_Format1 */ +static int hf_e2ap_policyTest_List = -1; /* SEQUENCE_SIZE_1_maxofMessageProtocolTests_OF_Trigger_ConditionIE_Item */ +static int hf_e2ap_policyTest_List_item = -1; /* Trigger_ConditionIE_Item */ +static int hf_e2ap_ric_Style_Type = -1; /* RIC_Style_Type */ +static int hf_e2ap_indicationHeader_Format1 = -1; /* E2SM_KPM_IndicationHeader_Format1 */ +static int hf_e2ap_id_GlobalKPMnode_ID = -1; /* GlobalKPMnode_ID */ +static int hf_e2ap_nRCGI = -1; /* NRCGI */ +static int hf_e2ap_sliceID = -1; /* SNSSAI */ +static int hf_e2ap_fiveQI = -1; /* INTEGER_0_255 */ +static int hf_e2ap_qci = -1; /* INTEGER_0_255 */ +static int hf_e2ap_pm_Containers = -1; /* SEQUENCE_SIZE_1_maxCellingNBDU_OF_PM_Containers_List */ +static int hf_e2ap_pm_Containers_item = -1; /* PM_Containers_List */ +static int hf_e2ap_performanceContainer = -1; /* PF_Container */ +static int hf_e2ap_theRANContainer = -1; /* RAN_Container */ +static int hf_e2ap_ranFunction_Name = -1; /* RANfunction_Name */ +static int hf_e2ap_e2SM_KPM_RANfunction_Item = -1; /* T_e2SM_KPM_RANfunction_Item */ +static int hf_e2ap_ric_EventTriggerStyle_List = -1; /* SEQUENCE_SIZE_1_maxofRICstyles_OF_RIC_EventTriggerStyle_List */ +static int hf_e2ap_ric_EventTriggerStyle_List_item = -1; /* RIC_EventTriggerStyle_List */ +static int hf_e2ap_ric_ReportStyle_List = -1; /* SEQUENCE_SIZE_1_maxofRICstyles_OF_RIC_ReportStyle_List */ +static int hf_e2ap_ric_ReportStyle_List_item = -1; /* RIC_ReportStyle_List */ +static int hf_e2ap_report_Period_IE = -1; /* RT_Period_IE */ +static int hf_e2ap_ranFunction_ShortName = -1; /* PrintableString_SIZE_1_150_ */ +static int hf_e2ap_ranFunction_E2SM_OID = -1; /* PrintableString_SIZE_1_1000_ */ +static int hf_e2ap_ranFunction_Description = -1; /* PrintableString_SIZE_1_150_ */ +static int hf_e2ap_ranFunction_Instance = -1; /* INTEGER */ +static int hf_e2ap_ric_EventTriggerStyle_Type = -1; /* RIC_Style_Type */ +static int hf_e2ap_ric_EventTriggerStyle_Name = -1; /* RIC_Style_Name */ +static int hf_e2ap_ric_EventTriggerFormat_Type = -1; /* RIC_Format_Type */ +static int hf_e2ap_ric_ReportStyle_Type = -1; /* RIC_Style_Type */ +static int hf_e2ap_ric_ReportStyle_Name = -1; /* RIC_Style_Name */ +static int hf_e2ap_ric_IndicationHeaderFormat_Type = -1; /* RIC_Format_Type */ +static int hf_e2ap_ric_IndicationMessageFormat_Type = -1; /* RIC_Format_Type */ +static int hf_e2ap_oDU = -1; /* ODU_PF_Container */ +static int hf_e2ap_oCU_CP = -1; /* OCUCP_PF_Container */ +static int hf_e2ap_oCU_UP = -1; /* OCUUP_PF_Container */ +static int hf_e2ap_cellResourceReportList = -1; /* SEQUENCE_SIZE_1_maxCellingNBDU_OF_CellResourceReportListItem */ +static int hf_e2ap_cellResourceReportList_item = -1; /* CellResourceReportListItem */ +static int hf_e2ap_dl_TotalofAvailablePRBs = -1; /* INTEGER_0_273 */ +static int hf_e2ap_ul_TotalofAvailablePRBs = -1; /* INTEGER_0_273 */ +static int hf_e2ap_servedPlmnPerCellList = -1; /* SEQUENCE_SIZE_1_maxPLMN_OF_ServedPlmnPerCellListItem */ +static int hf_e2ap_servedPlmnPerCellList_item = -1; /* ServedPlmnPerCellListItem */ +static int hf_e2ap_du_PM_5GC = -1; /* FGC_DU_PM_Container */ +static int hf_e2ap_du_PM_EPC = -1; /* EPC_DU_PM_Container */ +static int hf_e2ap_slicePerPlmnPerCellList = -1; /* SEQUENCE_SIZE_1_maxnoofSliceItems_OF_SlicePerPlmnPerCellListItem */ +static int hf_e2ap_slicePerPlmnPerCellList_item = -1; /* SlicePerPlmnPerCellListItem */ +static int hf_e2ap_fQIPERSlicesPerPlmnPerCellList = -1; /* SEQUENCE_SIZE_1_maxnoofQoSFlows_OF_FQIPERSlicesPerPlmnPerCellListItem */ +static int hf_e2ap_fQIPERSlicesPerPlmnPerCellList_item = -1; /* FQIPERSlicesPerPlmnPerCellListItem */ +static int hf_e2ap_dl_PRBUsage = -1; /* INTEGER_0_273 */ +static int hf_e2ap_ul_PRBUsage = -1; /* INTEGER_0_273 */ +static int hf_e2ap_perQCIReportList = -1; /* SEQUENCE_SIZE_1_maxnoofQCI_OF_PerQCIReportListItem */ +static int hf_e2ap_perQCIReportList_item = -1; /* PerQCIReportListItem */ +static int hf_e2ap_dl_PRBUsage_01 = -1; /* INTEGER_0_100 */ +static int hf_e2ap_ul_PRBUsage_01 = -1; /* INTEGER_0_100 */ +static int hf_e2ap_gNB_CU_CP_Name = -1; /* GNB_CU_CP_Name */ +static int hf_e2ap_cu_CP_Resource_Status = -1; /* T_cu_CP_Resource_Status */ +static int hf_e2ap_numberOfActive_UEs = -1; /* INTEGER_1_65536_ */ +static int hf_e2ap_gNB_CU_UP_Name = -1; /* GNB_CU_UP_Name */ +static int hf_e2ap_pf_ContainerList = -1; /* SEQUENCE_SIZE_1_maxnoofContainerListItems_OF_PF_ContainerListItem */ +static int hf_e2ap_pf_ContainerList_item = -1; /* PF_ContainerListItem */ +static int hf_e2ap_interface_type = -1; /* NI_Type */ +static int hf_e2ap_o_CU_UP_PM_Container = -1; /* CUUPMeasurement_Container */ +static int hf_e2ap_plmnList = -1; /* SEQUENCE_SIZE_1_maxPLMN_OF_PlmnID_List */ +static int hf_e2ap_plmnList_item = -1; /* PlmnID_List */ +static int hf_e2ap_cu_UP_PM_5GC = -1; /* FGC_CUUP_PM_Format */ +static int hf_e2ap_cu_UP_PM_EPC = -1; /* EPC_CUUP_PM_Format */ +static int hf_e2ap_sliceToReportList = -1; /* SEQUENCE_SIZE_1_maxnoofSliceItems_OF_SliceToReportListItem */ +static int hf_e2ap_sliceToReportList_item = -1; /* SliceToReportListItem */ +static int hf_e2ap_fQIPERSlicesPerPlmnList = -1; /* SEQUENCE_SIZE_1_maxnoofQoSFlows_OF_FQIPERSlicesPerPlmnListItem */ +static int hf_e2ap_fQIPERSlicesPerPlmnList_item = -1; /* FQIPERSlicesPerPlmnListItem */ +static int hf_e2ap_pDCPBytesDL = -1; /* INTEGER_0_10000000000_ */ +static int hf_e2ap_pDCPBytesUL = -1; /* INTEGER_0_10000000000_ */ +static int hf_e2ap_perQCIReportList_01 = -1; /* SEQUENCE_SIZE_1_maxnoofQCI_OF_PerQCIReportListItemFormat */ +static int hf_e2ap_perQCIReportList_item_01 = -1; /* PerQCIReportListItemFormat */ + +/*--- End of included file: packet-e2ap-hf.c ---*/ +#line 47 "./asn1/e2ap/packet-e2ap-template.c" + +/* Initialize the subtree pointers */ +static gint ett_e2ap = -1; + + +/*--- Included file: packet-e2ap-ett.c ---*/ +#line 1 "./asn1/e2ap/packet-e2ap-ett.c" +static gint ett_e2ap_ProtocolIE_Container = -1; +static gint ett_e2ap_ProtocolIE_Field = -1; +static gint ett_e2ap_Cause = -1; +static gint ett_e2ap_CriticalityDiagnostics = -1; +static gint ett_e2ap_CriticalityDiagnostics_IE_List = -1; +static gint ett_e2ap_CriticalityDiagnostics_IE_Item = -1; +static gint ett_e2ap_ENB_ID = -1; +static gint ett_e2ap_ENB_ID_Choice = -1; +static gint ett_e2ap_ENGNB_ID = -1; +static gint ett_e2ap_GlobalE2node_ID = -1; +static gint ett_e2ap_GlobalE2node_en_gNB_ID = -1; +static gint ett_e2ap_GlobalE2node_eNB_ID = -1; +static gint ett_e2ap_GlobalE2node_gNB_ID = -1; +static gint ett_e2ap_GlobalE2node_ng_eNB_ID = -1; +static gint ett_e2ap_GlobalENB_ID = -1; +static gint ett_e2ap_GlobalenGNB_ID = -1; +static gint ett_e2ap_GlobalgNB_ID = -1; +static gint ett_e2ap_GlobalngeNB_ID = -1; +static gint ett_e2ap_GlobalRIC_ID = -1; +static gint ett_e2ap_GNB_ID_Choice = -1; +static gint ett_e2ap_RICrequestID = -1; +static gint ett_e2ap_RICsubsequentAction = -1; +static gint ett_e2ap_RICsubscriptionRequest = -1; +static gint ett_e2ap_RICsubscriptionDetails = -1; +static gint ett_e2ap_RICactions_ToBeSetup_List = -1; +static gint ett_e2ap_RICaction_ToBeSetup_Item = -1; +static gint ett_e2ap_RICsubscriptionResponse = -1; +static gint ett_e2ap_RICaction_Admitted_List = -1; +static gint ett_e2ap_RICaction_Admitted_Item = -1; +static gint ett_e2ap_RICaction_NotAdmitted_List = -1; +static gint ett_e2ap_RICaction_NotAdmitted_Item = -1; +static gint ett_e2ap_RICsubscriptionFailure = -1; +static gint ett_e2ap_RICsubscriptionDeleteRequest = -1; +static gint ett_e2ap_RICsubscriptionDeleteResponse = -1; +static gint ett_e2ap_RICsubscriptionDeleteFailure = -1; +static gint ett_e2ap_RICindication = -1; +static gint ett_e2ap_RICcontrolRequest = -1; +static gint ett_e2ap_RICcontrolAcknowledge = -1; +static gint ett_e2ap_RICcontrolFailure = -1; +static gint ett_e2ap_ErrorIndication = -1; +static gint ett_e2ap_E2setupRequest = -1; +static gint ett_e2ap_E2setupResponse = -1; +static gint ett_e2ap_E2setupFailure = -1; +static gint ett_e2ap_ResetRequest = -1; +static gint ett_e2ap_ResetResponse = -1; +static gint ett_e2ap_RICserviceUpdate = -1; +static gint ett_e2ap_RANfunctions_List = -1; +static gint ett_e2ap_RANfunction_Item = -1; +static gint ett_e2ap_RANfunctionsID_List = -1; +static gint ett_e2ap_RANfunctionID_Item = -1; +static gint ett_e2ap_RICserviceUpdateAcknowledge = -1; +static gint ett_e2ap_RANfunctionsIDcause_List = -1; +static gint ett_e2ap_RANfunctionIDcause_Item = -1; +static gint ett_e2ap_RICserviceUpdateFailure = -1; +static gint ett_e2ap_RICserviceQuery = -1; +static gint ett_e2ap_E2AP_PDU = -1; +static gint ett_e2ap_InitiatingMessage = -1; +static gint ett_e2ap_SuccessfulOutcome = -1; +static gint ett_e2ap_UnsuccessfulOutcome = -1; +static gint ett_e2ap_GlobalKPMnode_ID = -1; +static gint ett_e2ap_GlobalKPMnode_gNB_ID = -1; +static gint ett_e2ap_GlobalKPMnode_en_gNB_ID = -1; +static gint ett_e2ap_GlobalKPMnode_ng_eNB_ID = -1; +static gint ett_e2ap_GlobalKPMnode_eNB_ID = -1; +static gint ett_e2ap_NRCGI = -1; +static gint ett_e2ap_SNSSAI = -1; +static gint ett_e2ap_E2SM_KPM_EventTriggerDefinition = -1; +static gint ett_e2ap_E2SM_KPM_EventTriggerDefinition_Format1 = -1; +static gint ett_e2ap_SEQUENCE_SIZE_1_maxofMessageProtocolTests_OF_Trigger_ConditionIE_Item = -1; +static gint ett_e2ap_E2SM_KPM_ActionDefinition = -1; +static gint ett_e2ap_E2SM_KPM_IndicationHeader = -1; +static gint ett_e2ap_E2SM_KPM_IndicationHeader_Format1 = -1; +static gint ett_e2ap_E2SM_KPM_IndicationMessage_Format1 = -1; +static gint ett_e2ap_SEQUENCE_SIZE_1_maxCellingNBDU_OF_PM_Containers_List = -1; +static gint ett_e2ap_PM_Containers_List = -1; +static gint ett_e2ap_E2SM_KPM_RANfunction_Description = -1; +static gint ett_e2ap_T_e2SM_KPM_RANfunction_Item = -1; +static gint ett_e2ap_SEQUENCE_SIZE_1_maxofRICstyles_OF_RIC_EventTriggerStyle_List = -1; +static gint ett_e2ap_SEQUENCE_SIZE_1_maxofRICstyles_OF_RIC_ReportStyle_List = -1; +static gint ett_e2ap_Trigger_ConditionIE_Item = -1; +static gint ett_e2ap_RANfunction_Name = -1; +static gint ett_e2ap_RIC_EventTriggerStyle_List = -1; +static gint ett_e2ap_RIC_ReportStyle_List = -1; +static gint ett_e2ap_PF_Container = -1; +static gint ett_e2ap_ODU_PF_Container = -1; +static gint ett_e2ap_SEQUENCE_SIZE_1_maxCellingNBDU_OF_CellResourceReportListItem = -1; +static gint ett_e2ap_CellResourceReportListItem = -1; +static gint ett_e2ap_SEQUENCE_SIZE_1_maxPLMN_OF_ServedPlmnPerCellListItem = -1; +static gint ett_e2ap_ServedPlmnPerCellListItem = -1; +static gint ett_e2ap_FGC_DU_PM_Container = -1; +static gint ett_e2ap_SEQUENCE_SIZE_1_maxnoofSliceItems_OF_SlicePerPlmnPerCellListItem = -1; +static gint ett_e2ap_SlicePerPlmnPerCellListItem = -1; +static gint ett_e2ap_SEQUENCE_SIZE_1_maxnoofQoSFlows_OF_FQIPERSlicesPerPlmnPerCellListItem = -1; +static gint ett_e2ap_FQIPERSlicesPerPlmnPerCellListItem = -1; +static gint ett_e2ap_EPC_DU_PM_Container = -1; +static gint ett_e2ap_SEQUENCE_SIZE_1_maxnoofQCI_OF_PerQCIReportListItem = -1; +static gint ett_e2ap_PerQCIReportListItem = -1; +static gint ett_e2ap_OCUCP_PF_Container = -1; +static gint ett_e2ap_T_cu_CP_Resource_Status = -1; +static gint ett_e2ap_OCUUP_PF_Container = -1; +static gint ett_e2ap_SEQUENCE_SIZE_1_maxnoofContainerListItems_OF_PF_ContainerListItem = -1; +static gint ett_e2ap_PF_ContainerListItem = -1; +static gint ett_e2ap_CUUPMeasurement_Container = -1; +static gint ett_e2ap_SEQUENCE_SIZE_1_maxPLMN_OF_PlmnID_List = -1; +static gint ett_e2ap_PlmnID_List = -1; +static gint ett_e2ap_FGC_CUUP_PM_Format = -1; +static gint ett_e2ap_SEQUENCE_SIZE_1_maxnoofSliceItems_OF_SliceToReportListItem = -1; +static gint ett_e2ap_SliceToReportListItem = -1; +static gint ett_e2ap_SEQUENCE_SIZE_1_maxnoofQoSFlows_OF_FQIPERSlicesPerPlmnListItem = -1; +static gint ett_e2ap_FQIPERSlicesPerPlmnListItem = -1; +static gint ett_e2ap_EPC_CUUP_PM_Format = -1; +static gint ett_e2ap_SEQUENCE_SIZE_1_maxnoofQCI_OF_PerQCIReportListItemFormat = -1; +static gint ett_e2ap_PerQCIReportListItemFormat = -1; + +/*--- End of included file: packet-e2ap-ett.c ---*/ +#line 52 "./asn1/e2ap/packet-e2ap-template.c" + + +enum{ + INITIATING_MESSAGE, + SUCCESSFUL_OUTCOME, + UNSUCCESSFUL_OUTCOME +}; + +typedef struct _e2ap_ctx_t { + guint32 message_type; + guint32 ProcedureCode; + guint32 ProtocolIE_ID; + guint32 ProtocolExtensionID; +} e2ap_ctx_t; + + + +struct e2ap_private_data { + guint32 procedure_code; + guint32 protocol_ie_id; + guint32 protocol_extension_id; + guint32 message_type; + guint32 ran_ue_e2ap_id; +}; + +/* Global variables */ +static guint gbl_e2apSctpPort = SCTP_PORT_E2AP; + +/* Dissector tables */ +static dissector_table_t e2ap_ies_dissector_table; +//static dissector_table_t e2ap_ies_p1_dissector_table; +//static dissector_table_t e2ap_ies_p2_dissector_table; +static dissector_table_t e2ap_extension_dissector_table; +static dissector_table_t e2ap_proc_imsg_dissector_table; +static dissector_table_t e2ap_proc_sout_dissector_table; +static dissector_table_t e2ap_proc_uout_dissector_table; +static dissector_table_t e2ap_n2_ie_type_dissector_table; + +static int dissect_ProtocolIEFieldValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *); +/* Currently not used +static int dissect_ProtocolIEFieldPairFirstValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree); +static int dissect_ProtocolIEFieldPairSecondValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree); +*/ + +/* Forward declarations */ +static int dissect_E2SM_KPM_ActionDefinition_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_); +static int dissect_E2SM_KPM_RANfunction_Description_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_); +static int dissect_E2SM_KPM_EventTriggerDefinition_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_); +static int dissect_E2SM_KPM_IndicationHeader_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_); +static int dissect_RANcallProcess_ID_string_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_); +static int dissect_E2SM_KPM_IndicationMessage_Format1_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_); + + +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 struct e2ap_private_data* +e2ap_get_private_data(packet_info *pinfo) +{ + struct e2ap_private_data *e2ap_data = (struct e2ap_private_data*)p_get_proto_data(pinfo->pool, pinfo, proto_e2ap, 0); + if (!e2ap_data) { + e2ap_data = wmem_new0(pinfo->pool, struct e2ap_private_data); + p_add_proto_data(pinfo->pool, pinfo, proto_e2ap, 0, e2ap_data); + } + return e2ap_data; +} + + +/*--- Included file: packet-e2ap-fn.c ---*/ +#line 1 "./asn1/e2ap/packet-e2ap-fn.c" + +static const value_string e2ap_Criticality_vals[] = { + { 0, "reject" }, + { 1, "ignore" }, + { 2, "notify" }, + { 0, NULL } +}; + + +static int +dissect_e2ap_Criticality(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, + 3, NULL, FALSE, 0, NULL); + + return offset; +} + + +static const value_string e2ap_ProcedureCode_vals[] = { + { id_E2setup, "id-E2setup" }, + { id_ErrorIndication, "id-ErrorIndication" }, + { id_Reset, "id-Reset" }, + { id_RICcontrol, "id-RICcontrol" }, + { id_RICindication, "id-RICindication" }, + { id_RICserviceQuery, "id-RICserviceQuery" }, + { id_RICserviceUpdate, "id-RICserviceUpdate" }, + { id_RICsubscription, "id-RICsubscription" }, + { id_RICsubscriptionDelete, "id-RICsubscriptionDelete" }, + { 0, NULL } +}; + +static value_string_ext e2ap_ProcedureCode_vals_ext = VALUE_STRING_EXT_INIT(e2ap_ProcedureCode_vals); + + +static int +dissect_e2ap_ProcedureCode(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { +#line 102 "./asn1/e2ap/e2ap.cnf" + struct e2ap_private_data *e2ap_data = e2ap_get_private_data(actx->pinfo); + offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index, + 0U, 255U, &e2ap_data->procedure_code, FALSE); + + //col_append_fstr(actx->pinfo->cinfo, COL_INFO, "%s", val_to_str(e2ap_data->procedure_code, e2ap_ProcedureCode_vals, "Unknown")); + + + return offset; +} + + +static const value_string e2ap_ProtocolIE_ID_vals[] = { + { id_Cause, "id-Cause" }, + { id_CriticalityDiagnostics, "id-CriticalityDiagnostics" }, + { id_GlobalE2node_ID, "id-GlobalE2node-ID" }, + { id_GlobalRIC_ID, "id-GlobalRIC-ID" }, + { id_RANfunctionID, "id-RANfunctionID" }, + { id_RANfunctionID_Item, "id-RANfunctionID-Item" }, + { id_RANfunctionIEcause_Item, "id-RANfunctionIEcause-Item" }, + { id_RANfunction_Item, "id-RANfunction-Item" }, + { id_RANfunctionsAccepted, "id-RANfunctionsAccepted" }, + { id_RANfunctionsAdded, "id-RANfunctionsAdded" }, + { id_RANfunctionsDeleted, "id-RANfunctionsDeleted" }, + { id_RANfunctionsModified, "id-RANfunctionsModified" }, + { id_RANfunctionsRejected, "id-RANfunctionsRejected" }, + { id_RICaction_Admitted_Item, "id-RICaction-Admitted-Item" }, + { id_RICactionID, "id-RICactionID" }, + { id_RICaction_NotAdmitted_Item, "id-RICaction-NotAdmitted-Item" }, + { id_RICactions_Admitted, "id-RICactions-Admitted" }, + { id_RICactions_NotAdmitted, "id-RICactions-NotAdmitted" }, + { id_RICaction_ToBeSetup_Item, "id-RICaction-ToBeSetup-Item" }, + { id_RICcallProcessID, "id-RICcallProcessID" }, + { id_RICcontrolAckRequest, "id-RICcontrolAckRequest" }, + { id_RICcontrolHeader, "id-RICcontrolHeader" }, + { id_RICcontrolMessage, "id-RICcontrolMessage" }, + { id_RICcontrolStatus, "id-RICcontrolStatus" }, + { id_RICindicationHeader, "id-RICindicationHeader" }, + { id_RICindicationMessage, "id-RICindicationMessage" }, + { id_RICindicationSN, "id-RICindicationSN" }, + { id_RICindicationType, "id-RICindicationType" }, + { id_RICrequestID, "id-RICrequestID" }, + { id_RICsubscriptionDetails, "id-RICsubscriptionDetails" }, + { id_TimeToWait, "id-TimeToWait" }, + { id_RICcontrolOutcome, "id-RICcontrolOutcome" }, + { 0, NULL } +}; + +static value_string_ext e2ap_ProtocolIE_ID_vals_ext = VALUE_STRING_EXT_INIT(e2ap_ProtocolIE_ID_vals); + + +static int +dissect_e2ap_ProtocolIE_ID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { +#line 75 "./asn1/e2ap/e2ap.cnf" + struct e2ap_private_data *e2ap_data = e2ap_get_private_data(actx->pinfo); + offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index, + 0U, 65535U, &e2ap_data->protocol_ie_id, FALSE); + + + + +#line 79 "./asn1/e2ap/e2ap.cnf" + if (tree) { + proto_item_append_text(proto_item_get_parent_nth(actx->created_item, 2), ": %s", + val_to_str_ext(e2ap_data->protocol_ie_id, &e2ap_ProtocolIE_ID_vals_ext, "unknown (%d)")); + } + + return offset; +} + + +static const value_string e2ap_TriggeringMessage_vals[] = { + { 0, "initiating-message" }, + { 1, "successful-outcome" }, + { 2, "unsuccessfull-outcome" }, + { 0, NULL } +}; + + +static int +dissect_e2ap_TriggeringMessage(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, + 3, NULL, FALSE, 0, NULL); + + return offset; +} + + + +static int +dissect_e2ap_T_value(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_open_type_pdu_new(tvb, offset, actx, tree, hf_index, dissect_ProtocolIEFieldValue); + + return offset; +} + + +static const per_sequence_t ProtocolIE_Field_sequence[] = { + { &hf_e2ap_id , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_e2ap_ProtocolIE_ID }, + { &hf_e2ap_criticality , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_e2ap_Criticality }, + { &hf_e2ap_value , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_e2ap_T_value }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_e2ap_ProtocolIE_Field(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_e2ap_ProtocolIE_Field, ProtocolIE_Field_sequence); + + return offset; +} + + +static const per_sequence_t ProtocolIE_Container_sequence_of[1] = { + { &hf_e2ap_ProtocolIE_Container_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_e2ap_ProtocolIE_Field }, +}; + +static int +dissect_e2ap_ProtocolIE_Container(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index, + ett_e2ap_ProtocolIE_Container, ProtocolIE_Container_sequence_of, + 0, maxProtocolIEs, FALSE); + + return offset; +} + + + +static int +dissect_e2ap_ProtocolIE_SingleContainer(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_e2ap_ProtocolIE_Field(tvb, offset, actx, tree, hf_index); + + return offset; +} + + +static const value_string e2ap_CauseRIC_vals[] = { + { 0, "ran-function-id-Invalid" }, + { 1, "action-not-supported" }, + { 2, "excessive-actions" }, + { 3, "duplicate-action" }, + { 4, "duplicate-event" }, + { 5, "function-resource-limit" }, + { 6, "request-id-unknown" }, + { 7, "inconsistent-action-subsequent-action-sequence" }, + { 8, "control-message-invalid" }, + { 9, "call-process-id-invalid" }, + { 10, "unspecified" }, + { 0, NULL } +}; + + +static int +dissect_e2ap_CauseRIC(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, + 11, NULL, TRUE, 0, NULL); + + return offset; +} + + +static const value_string e2ap_CauseRICservice_vals[] = { + { 0, "function-not-required" }, + { 1, "excessive-functions" }, + { 2, "ric-resource-limit" }, + { 0, NULL } +}; + + +static int +dissect_e2ap_CauseRICservice(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, + 3, NULL, TRUE, 0, NULL); + + return offset; +} + + +static const value_string e2ap_CauseTransport_vals[] = { + { 0, "unspecified" }, + { 1, "transport-resource-unavailable" }, + { 0, NULL } +}; + + +static int +dissect_e2ap_CauseTransport(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, + 2, NULL, TRUE, 0, NULL); + + return offset; +} + + +static const value_string e2ap_CauseProtocol_vals[] = { + { 0, "transfer-syntax-error" }, + { 1, "abstract-syntax-error-reject" }, + { 2, "abstract-syntax-error-ignore-and-notify" }, + { 3, "message-not-compatible-with-receiver-state" }, + { 4, "semantic-error" }, + { 5, "abstract-syntax-error-falsely-constructed-message" }, + { 6, "unspecified" }, + { 0, NULL } +}; + + +static int +dissect_e2ap_CauseProtocol(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, + 7, NULL, TRUE, 0, NULL); + + return offset; +} + + +static const value_string e2ap_CauseMisc_vals[] = { + { 0, "control-processing-overload" }, + { 1, "hardware-failure" }, + { 2, "om-intervention" }, + { 3, "unspecified" }, + { 0, NULL } +}; + + +static int +dissect_e2ap_CauseMisc(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, + 4, NULL, TRUE, 0, NULL); + + return offset; +} + + +static const value_string e2ap_Cause_vals[] = { + { 0, "ricRequest" }, + { 1, "ricService" }, + { 2, "transport" }, + { 3, "protocol" }, + { 4, "misc" }, + { 0, NULL } +}; + +static const per_choice_t Cause_choice[] = { + { 0, &hf_e2ap_ricRequest , ASN1_EXTENSION_ROOT , dissect_e2ap_CauseRIC }, + { 1, &hf_e2ap_ricService , ASN1_EXTENSION_ROOT , dissect_e2ap_CauseRICservice }, + { 2, &hf_e2ap_transport , ASN1_EXTENSION_ROOT , dissect_e2ap_CauseTransport }, + { 3, &hf_e2ap_protocol , ASN1_EXTENSION_ROOT , dissect_e2ap_CauseProtocol }, + { 4, &hf_e2ap_misc , ASN1_EXTENSION_ROOT , dissect_e2ap_CauseMisc }, + { 0, NULL, 0, NULL } +}; + +static int +dissect_e2ap_Cause(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_choice(tvb, offset, actx, tree, hf_index, + ett_e2ap_Cause, Cause_choice, + NULL); + + return offset; +} + + + +static int +dissect_e2ap_INTEGER_0_65535(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index, + 0U, 65535U, NULL, FALSE); + + return offset; +} + + +static const per_sequence_t RICrequestID_sequence[] = { + { &hf_e2ap_ricRequestorID_01, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_e2ap_INTEGER_0_65535 }, + { &hf_e2ap_ricInstanceID , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_e2ap_INTEGER_0_65535 }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_e2ap_RICrequestID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_e2ap_RICrequestID, RICrequestID_sequence); + + return offset; +} + + +static const value_string e2ap_TypeOfError_vals[] = { + { 0, "not-understood" }, + { 1, "missing" }, + { 0, NULL } +}; + + +static int +dissect_e2ap_TypeOfError(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, + 2, NULL, TRUE, 0, NULL); + + return offset; +} + + +static const per_sequence_t CriticalityDiagnostics_IE_Item_sequence[] = { + { &hf_e2ap_iECriticality , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_e2ap_Criticality }, + { &hf_e2ap_iE_ID , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_e2ap_ProtocolIE_ID }, + { &hf_e2ap_typeOfError , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_e2ap_TypeOfError }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_e2ap_CriticalityDiagnostics_IE_Item(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_e2ap_CriticalityDiagnostics_IE_Item, CriticalityDiagnostics_IE_Item_sequence); + + return offset; +} + + +static const per_sequence_t CriticalityDiagnostics_IE_List_sequence_of[1] = { + { &hf_e2ap_CriticalityDiagnostics_IE_List_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_e2ap_CriticalityDiagnostics_IE_Item }, +}; + +static int +dissect_e2ap_CriticalityDiagnostics_IE_List(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index, + ett_e2ap_CriticalityDiagnostics_IE_List, CriticalityDiagnostics_IE_List_sequence_of, + 1, maxnoofErrors, FALSE); + + return offset; +} + + +static const per_sequence_t CriticalityDiagnostics_sequence[] = { + { &hf_e2ap_procedureCode , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_e2ap_ProcedureCode }, + { &hf_e2ap_triggeringMessage, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_e2ap_TriggeringMessage }, + { &hf_e2ap_procedureCriticality, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_e2ap_Criticality }, + { &hf_e2ap_ricRequestorID , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_e2ap_RICrequestID }, + { &hf_e2ap_iEsCriticalityDiagnostics, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_e2ap_CriticalityDiagnostics_IE_List }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_e2ap_CriticalityDiagnostics(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_e2ap_CriticalityDiagnostics, CriticalityDiagnostics_sequence); + + return offset; +} + + + +static int +dissect_e2ap_BIT_STRING_SIZE_20(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index, + 20, 20, FALSE, NULL, 0, NULL, NULL); + + return offset; +} + + + +static int +dissect_e2ap_BIT_STRING_SIZE_28(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index, + 28, 28, FALSE, NULL, 0, NULL, NULL); + + return offset; +} + + + +static int +dissect_e2ap_BIT_STRING_SIZE_18(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index, + 18, 18, FALSE, NULL, 0, NULL, NULL); + + return offset; +} + + + +static int +dissect_e2ap_BIT_STRING_SIZE_21(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index, + 21, 21, FALSE, NULL, 0, NULL, NULL); + + return offset; +} + + +static const value_string e2ap_ENB_ID_vals[] = { + { 0, "macro-eNB-ID" }, + { 1, "home-eNB-ID" }, + { 2, "short-Macro-eNB-ID" }, + { 3, "long-Macro-eNB-ID" }, + { 0, NULL } +}; + +static const per_choice_t ENB_ID_choice[] = { + { 0, &hf_e2ap_macro_eNB_ID , ASN1_EXTENSION_ROOT , dissect_e2ap_BIT_STRING_SIZE_20 }, + { 1, &hf_e2ap_home_eNB_ID , ASN1_EXTENSION_ROOT , dissect_e2ap_BIT_STRING_SIZE_28 }, + { 2, &hf_e2ap_short_Macro_eNB_ID, ASN1_NOT_EXTENSION_ROOT, dissect_e2ap_BIT_STRING_SIZE_18 }, + { 3, &hf_e2ap_long_Macro_eNB_ID, ASN1_NOT_EXTENSION_ROOT, dissect_e2ap_BIT_STRING_SIZE_21 }, + { 0, NULL, 0, NULL } +}; + +static int +dissect_e2ap_ENB_ID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_choice(tvb, offset, actx, tree, hf_index, + ett_e2ap_ENB_ID, ENB_ID_choice, + NULL); + + return offset; +} + + +static const value_string e2ap_ENB_ID_Choice_vals[] = { + { 0, "enb-ID-macro" }, + { 1, "enb-ID-shortmacro" }, + { 2, "enb-ID-longmacro" }, + { 0, NULL } +}; + +static const per_choice_t ENB_ID_Choice_choice[] = { + { 0, &hf_e2ap_enb_ID_macro , ASN1_EXTENSION_ROOT , dissect_e2ap_BIT_STRING_SIZE_20 }, + { 1, &hf_e2ap_enb_ID_shortmacro, ASN1_EXTENSION_ROOT , dissect_e2ap_BIT_STRING_SIZE_18 }, + { 2, &hf_e2ap_enb_ID_longmacro, ASN1_EXTENSION_ROOT , dissect_e2ap_BIT_STRING_SIZE_21 }, + { 0, NULL, 0, NULL } +}; + +static int +dissect_e2ap_ENB_ID_Choice(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_choice(tvb, offset, actx, tree, hf_index, + ett_e2ap_ENB_ID_Choice, ENB_ID_Choice_choice, + NULL); + + return offset; +} + + + +static int +dissect_e2ap_BIT_STRING_SIZE_22_32(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index, + 22, 32, FALSE, NULL, 0, NULL, NULL); + + return offset; +} + + +static const value_string e2ap_ENGNB_ID_vals[] = { + { 0, "gNB-ID" }, + { 0, NULL } +}; + +static const per_choice_t ENGNB_ID_choice[] = { + { 0, &hf_e2ap_gNB_ID , ASN1_EXTENSION_ROOT , dissect_e2ap_BIT_STRING_SIZE_22_32 }, + { 0, NULL, 0, NULL } +}; + +static int +dissect_e2ap_ENGNB_ID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_choice(tvb, offset, actx, tree, hf_index, + ett_e2ap_ENGNB_ID, ENGNB_ID_choice, + NULL); + + return offset; +} + + + +static int +dissect_e2ap_PLMN_Identity(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index, + 3, 3, FALSE, NULL); + + return offset; +} + + +static const value_string e2ap_GNB_ID_Choice_vals[] = { + { 0, "gnb-ID" }, + { 0, NULL } +}; + +static const per_choice_t GNB_ID_Choice_choice[] = { + { 0, &hf_e2ap_gnb_ID , ASN1_EXTENSION_ROOT , dissect_e2ap_BIT_STRING_SIZE_22_32 }, + { 0, NULL, 0, NULL } +}; + +static int +dissect_e2ap_GNB_ID_Choice(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_choice(tvb, offset, actx, tree, hf_index, + ett_e2ap_GNB_ID_Choice, GNB_ID_Choice_choice, + NULL); + + return offset; +} + + +static const per_sequence_t GlobalgNB_ID_sequence[] = { + { &hf_e2ap_plmn_id , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_e2ap_PLMN_Identity }, + { &hf_e2ap_gnb_id , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_e2ap_GNB_ID_Choice }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_e2ap_GlobalgNB_ID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_e2ap_GlobalgNB_ID, GlobalgNB_ID_sequence); + + return offset; +} + + + +static int +dissect_e2ap_GNB_CU_UP_ID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_constrained_integer_64b(tvb, offset, actx, tree, hf_index, + 0U, G_GUINT64_CONSTANT(68719476735), NULL, FALSE); + + return offset; +} + + + +static int +dissect_e2ap_GNB_DU_ID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_constrained_integer_64b(tvb, offset, actx, tree, hf_index, + 0U, G_GUINT64_CONSTANT(68719476735), NULL, FALSE); + + return offset; +} + + +static const per_sequence_t GlobalE2node_gNB_ID_sequence[] = { + { &hf_e2ap_global_gNB_ID_01, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_e2ap_GlobalgNB_ID }, + { &hf_e2ap_gNB_CU_UP_ID , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_e2ap_GNB_CU_UP_ID }, + { &hf_e2ap_gNB_DU_ID , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_e2ap_GNB_DU_ID }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_e2ap_GlobalE2node_gNB_ID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_e2ap_GlobalE2node_gNB_ID, GlobalE2node_gNB_ID_sequence); + + return offset; +} + + +static const per_sequence_t GlobalenGNB_ID_sequence[] = { + { &hf_e2ap_pLMN_Identity , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_e2ap_PLMN_Identity }, + { &hf_e2ap_gNB_ID_01 , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_e2ap_ENGNB_ID }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_e2ap_GlobalenGNB_ID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_e2ap_GlobalenGNB_ID, GlobalenGNB_ID_sequence); + + return offset; +} + + +static const per_sequence_t GlobalE2node_en_gNB_ID_sequence[] = { + { &hf_e2ap_global_gNB_ID , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_e2ap_GlobalenGNB_ID }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_e2ap_GlobalE2node_en_gNB_ID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_e2ap_GlobalE2node_en_gNB_ID, GlobalE2node_en_gNB_ID_sequence); + + return offset; +} + + +static const per_sequence_t GlobalngeNB_ID_sequence[] = { + { &hf_e2ap_plmn_id , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_e2ap_PLMN_Identity }, + { &hf_e2ap_enb_id , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_e2ap_ENB_ID_Choice }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_e2ap_GlobalngeNB_ID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_e2ap_GlobalngeNB_ID, GlobalngeNB_ID_sequence); + + return offset; +} + + +static const per_sequence_t GlobalE2node_ng_eNB_ID_sequence[] = { + { &hf_e2ap_global_ng_eNB_ID, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_e2ap_GlobalngeNB_ID }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_e2ap_GlobalE2node_ng_eNB_ID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_e2ap_GlobalE2node_ng_eNB_ID, GlobalE2node_ng_eNB_ID_sequence); + + return offset; +} + + +static const per_sequence_t GlobalENB_ID_sequence[] = { + { &hf_e2ap_pLMN_Identity , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_e2ap_PLMN_Identity }, + { &hf_e2ap_eNB_ID , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_e2ap_ENB_ID }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_e2ap_GlobalENB_ID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_e2ap_GlobalENB_ID, GlobalENB_ID_sequence); + + return offset; +} + + +static const per_sequence_t GlobalE2node_eNB_ID_sequence[] = { + { &hf_e2ap_global_eNB_ID , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_e2ap_GlobalENB_ID }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_e2ap_GlobalE2node_eNB_ID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_e2ap_GlobalE2node_eNB_ID, GlobalE2node_eNB_ID_sequence); + + return offset; +} + + +static const value_string e2ap_GlobalE2node_ID_vals[] = { + { 0, "gNB" }, + { 1, "en-gNB" }, + { 2, "ng-eNB" }, + { 3, "eNB" }, + { 0, NULL } +}; + +static const per_choice_t GlobalE2node_ID_choice[] = { + { 0, &hf_e2ap_gNB , ASN1_EXTENSION_ROOT , dissect_e2ap_GlobalE2node_gNB_ID }, + { 1, &hf_e2ap_en_gNB , ASN1_EXTENSION_ROOT , dissect_e2ap_GlobalE2node_en_gNB_ID }, + { 2, &hf_e2ap_ng_eNB , ASN1_EXTENSION_ROOT , dissect_e2ap_GlobalE2node_ng_eNB_ID }, + { 3, &hf_e2ap_eNB , ASN1_EXTENSION_ROOT , dissect_e2ap_GlobalE2node_eNB_ID }, + { 0, NULL, 0, NULL } +}; + +static int +dissect_e2ap_GlobalE2node_ID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_choice(tvb, offset, actx, tree, hf_index, + ett_e2ap_GlobalE2node_ID, GlobalE2node_ID_choice, + NULL); + + return offset; +} + + +static const per_sequence_t GlobalRIC_ID_sequence[] = { + { &hf_e2ap_pLMN_Identity , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_e2ap_PLMN_Identity }, + { &hf_e2ap_ric_ID , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_e2ap_BIT_STRING_SIZE_20 }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_e2ap_GlobalRIC_ID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_e2ap_GlobalRIC_ID, GlobalRIC_ID_sequence); + + return offset; +} + + + +static int +dissect_e2ap_RANfunctionDefinition(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { +#line 242 "./asn1/e2ap/e2ap.cnf" + tvbuff_t *parameter_tvb; + offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index, + NO_BOUND, NO_BOUND, FALSE, ¶meter_tvb); + + dissect_E2SM_KPM_RANfunction_Description_PDU(parameter_tvb, actx->pinfo, tree, NULL); + + + + return offset; +} + + + +static int +dissect_e2ap_RANfunctionID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index, + 0U, 4095U, NULL, FALSE); + + return offset; +} + + + +static int +dissect_e2ap_RANfunctionRevision(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index, + 0U, 4095U, NULL, FALSE); + + return offset; +} + + + +static int +dissect_e2ap_RICactionDefinition(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { +#line 221 "./asn1/e2ap/e2ap.cnf" + tvbuff_t *parameter_tvb; + offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index, + NO_BOUND, NO_BOUND, FALSE, ¶meter_tvb); + + dissect_E2SM_KPM_ActionDefinition_PDU(parameter_tvb, actx->pinfo, tree, NULL); + + + + return offset; +} + + + +static int +dissect_e2ap_RICactionID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index, + 0U, 255U, NULL, FALSE); + + return offset; +} + + +static const value_string e2ap_RICactionType_vals[] = { + { 0, "report" }, + { 1, "insert" }, + { 2, "policy" }, + { 0, NULL } +}; + + +static int +dissect_e2ap_RICactionType(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, + 3, NULL, TRUE, 0, NULL); + + return offset; +} + + + +static int +dissect_e2ap_RICcallProcessID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { +#line 247 "./asn1/e2ap/e2ap.cnf" + tvbuff_t *parameter_tvb; + offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index, + NO_BOUND, NO_BOUND, FALSE, ¶meter_tvb); + + dissect_RANcallProcess_ID_string_PDU(parameter_tvb, actx->pinfo, tree, NULL); + + + + + + return offset; +} + + +static const value_string e2ap_RICcontrolAckRequest_vals[] = { + { 0, "noAck" }, + { 1, "ack" }, + { 2, "nAck" }, + { 0, NULL } +}; + + +static int +dissect_e2ap_RICcontrolAckRequest(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, + 3, NULL, TRUE, 0, NULL); + + return offset; +} + + + +static int +dissect_e2ap_RICcontrolHeader(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index, + NO_BOUND, NO_BOUND, FALSE, NULL); + + return offset; +} + + + +static int +dissect_e2ap_RICcontrolMessage(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index, + NO_BOUND, NO_BOUND, FALSE, NULL); + + return offset; +} + + + +static int +dissect_e2ap_RICcontrolOutcome(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index, + NO_BOUND, NO_BOUND, FALSE, NULL); + + return offset; +} + + +static const value_string e2ap_RICcontrolStatus_vals[] = { + { 0, "success" }, + { 1, "rejected" }, + { 2, "failed" }, + { 0, NULL } +}; + + +static int +dissect_e2ap_RICcontrolStatus(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, + 3, NULL, TRUE, 0, NULL); + + return offset; +} + + + +static int +dissect_e2ap_RICeventTriggerDefinition(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { +#line 226 "./asn1/e2ap/e2ap.cnf" + tvbuff_t *parameter_tvb; + offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index, + NO_BOUND, NO_BOUND, FALSE, ¶meter_tvb); + + dissect_E2SM_KPM_EventTriggerDefinition_PDU(parameter_tvb, actx->pinfo, tree, NULL); + + + + return offset; +} + + + +static int +dissect_e2ap_RICindicationHeader(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { +#line 231 "./asn1/e2ap/e2ap.cnf" + tvbuff_t *parameter_tvb; + offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index, + NO_BOUND, NO_BOUND, FALSE, ¶meter_tvb); + + dissect_E2SM_KPM_IndicationHeader_PDU(parameter_tvb, actx->pinfo, tree, NULL); + + + + return offset; +} + + + +static int +dissect_e2ap_RICindicationMessage(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { +#line 236 "./asn1/e2ap/e2ap.cnf" + tvbuff_t *parameter_tvb; + offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index, + NO_BOUND, NO_BOUND, FALSE, ¶meter_tvb); + + /* It is believed that this is an error in the ASN in V1 of the spec... */ + dissect_E2SM_KPM_IndicationMessage_Format1_PDU(parameter_tvb, actx->pinfo, tree, NULL); + + + + return offset; +} + + + +static int +dissect_e2ap_RICindicationSN(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index, + 0U, 65535U, NULL, FALSE); + + return offset; +} + + +static const value_string e2ap_RICindicationType_vals[] = { + { 0, "report" }, + { 1, "insert" }, + { 0, NULL } +}; + + +static int +dissect_e2ap_RICindicationType(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, + 2, NULL, TRUE, 0, NULL); + + return offset; +} + + +static const value_string e2ap_RICsubsequentActionType_vals[] = { + { 0, "continue" }, + { 1, "wait" }, + { 0, NULL } +}; + + +static int +dissect_e2ap_RICsubsequentActionType(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, + 2, NULL, TRUE, 0, NULL); + + return offset; +} + + +static const value_string e2ap_RICtimeToWait_vals[] = { + { 0, "zero" }, + { 1, "w1ms" }, + { 2, "w2ms" }, + { 3, "w5ms" }, + { 4, "w10ms" }, + { 5, "w20ms" }, + { 6, "w30ms" }, + { 7, "w40ms" }, + { 8, "w50ms" }, + { 9, "w100ms" }, + { 10, "w200ms" }, + { 11, "w500ms" }, + { 12, "w1s" }, + { 13, "w2s" }, + { 14, "w5s" }, + { 15, "w10s" }, + { 16, "w20s" }, + { 17, "w60s" }, + { 0, NULL } +}; + + +static int +dissect_e2ap_RICtimeToWait(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, + 18, NULL, TRUE, 0, NULL); + + return offset; +} + + +static const per_sequence_t RICsubsequentAction_sequence[] = { + { &hf_e2ap_ricSubsequentActionType, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_e2ap_RICsubsequentActionType }, + { &hf_e2ap_ricTimeToWait , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_e2ap_RICtimeToWait }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_e2ap_RICsubsequentAction(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_e2ap_RICsubsequentAction, RICsubsequentAction_sequence); + + return offset; +} + + +static const value_string e2ap_TimeToWait_vals[] = { + { 0, "v1s" }, + { 1, "v2s" }, + { 2, "v5s" }, + { 3, "v10s" }, + { 4, "v20s" }, + { 5, "v60s" }, + { 0, NULL } +}; + + +static int +dissect_e2ap_TimeToWait(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, + 6, NULL, TRUE, 0, NULL); + + return offset; +} + + +static const per_sequence_t RICsubscriptionRequest_sequence[] = { + { &hf_e2ap_protocolIEs , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_e2ap_ProtocolIE_Container }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_e2ap_RICsubscriptionRequest(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { +#line 500 "./asn1/e2ap/e2ap.cnf" + col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "RICsubscriptionRequest"); + + + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_e2ap_RICsubscriptionRequest, RICsubscriptionRequest_sequence); + + return offset; +} + + +static const per_sequence_t RICactions_ToBeSetup_List_sequence_of[1] = { + { &hf_e2ap_RICactions_ToBeSetup_List_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_e2ap_ProtocolIE_SingleContainer }, +}; + +static int +dissect_e2ap_RICactions_ToBeSetup_List(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index, + ett_e2ap_RICactions_ToBeSetup_List, RICactions_ToBeSetup_List_sequence_of, + 1, maxofRICactionID, FALSE); + + return offset; +} + + +static const per_sequence_t RICsubscriptionDetails_sequence[] = { + { &hf_e2ap_ricEventTriggerDefinition, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_e2ap_RICeventTriggerDefinition }, + { &hf_e2ap_ricAction_ToBeSetup_List, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_e2ap_RICactions_ToBeSetup_List }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_e2ap_RICsubscriptionDetails(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_e2ap_RICsubscriptionDetails, RICsubscriptionDetails_sequence); + + return offset; +} + + +static const per_sequence_t RICaction_ToBeSetup_Item_sequence[] = { + { &hf_e2ap_ricActionID , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_e2ap_RICactionID }, + { &hf_e2ap_ricActionType , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_e2ap_RICactionType }, + { &hf_e2ap_ricActionDefinition, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_e2ap_RICactionDefinition }, + { &hf_e2ap_ricSubsequentAction, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_e2ap_RICsubsequentAction }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_e2ap_RICaction_ToBeSetup_Item(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_e2ap_RICaction_ToBeSetup_Item, RICaction_ToBeSetup_Item_sequence); + + return offset; +} + + +static const per_sequence_t RICsubscriptionResponse_sequence[] = { + { &hf_e2ap_protocolIEs , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_e2ap_ProtocolIE_Container }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_e2ap_RICsubscriptionResponse(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { +#line 503 "./asn1/e2ap/e2ap.cnf" + col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "RICsubscriptionResponse"); + + + + + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_e2ap_RICsubscriptionResponse, RICsubscriptionResponse_sequence); + + return offset; +} + + +static const per_sequence_t RICaction_Admitted_List_sequence_of[1] = { + { &hf_e2ap_RICaction_Admitted_List_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_e2ap_ProtocolIE_SingleContainer }, +}; + +static int +dissect_e2ap_RICaction_Admitted_List(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index, + ett_e2ap_RICaction_Admitted_List, RICaction_Admitted_List_sequence_of, + 1, maxofRICactionID, FALSE); + + return offset; +} + + +static const per_sequence_t RICaction_Admitted_Item_sequence[] = { + { &hf_e2ap_ricActionID , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_e2ap_RICactionID }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_e2ap_RICaction_Admitted_Item(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_e2ap_RICaction_Admitted_Item, RICaction_Admitted_Item_sequence); + + return offset; +} + + +static const per_sequence_t RICaction_NotAdmitted_List_sequence_of[1] = { + { &hf_e2ap_RICaction_NotAdmitted_List_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_e2ap_ProtocolIE_SingleContainer }, +}; + +static int +dissect_e2ap_RICaction_NotAdmitted_List(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index, + ett_e2ap_RICaction_NotAdmitted_List, RICaction_NotAdmitted_List_sequence_of, + 0, maxofRICactionID, FALSE); + + return offset; +} + + +static const per_sequence_t RICaction_NotAdmitted_Item_sequence[] = { + { &hf_e2ap_ricActionID , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_e2ap_RICactionID }, + { &hf_e2ap_cause , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_e2ap_Cause }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_e2ap_RICaction_NotAdmitted_Item(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_e2ap_RICaction_NotAdmitted_Item, RICaction_NotAdmitted_Item_sequence); + + return offset; +} + + +static const per_sequence_t RICsubscriptionFailure_sequence[] = { + { &hf_e2ap_protocolIEs , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_e2ap_ProtocolIE_Container }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_e2ap_RICsubscriptionFailure(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { +#line 497 "./asn1/e2ap/e2ap.cnf" + col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "RICsubscriptionFailure"); + + + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_e2ap_RICsubscriptionFailure, RICsubscriptionFailure_sequence); + + return offset; +} + + +static const per_sequence_t RICsubscriptionDeleteRequest_sequence[] = { + { &hf_e2ap_protocolIEs , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_e2ap_ProtocolIE_Container }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_e2ap_RICsubscriptionDeleteRequest(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { +#line 511 "./asn1/e2ap/e2ap.cnf" + col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "RICsubscriptionDeleteRequest"); + + + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_e2ap_RICsubscriptionDeleteRequest, RICsubscriptionDeleteRequest_sequence); + + return offset; +} + + +static const per_sequence_t RICsubscriptionDeleteResponse_sequence[] = { + { &hf_e2ap_protocolIEs , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_e2ap_ProtocolIE_Container }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_e2ap_RICsubscriptionDeleteResponse(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { +#line 514 "./asn1/e2ap/e2ap.cnf" + col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "RICsubscriptionDeleteResponse"); + + + + + + + + + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_e2ap_RICsubscriptionDeleteResponse, RICsubscriptionDeleteResponse_sequence); + + return offset; +} + + +static const per_sequence_t RICsubscriptionDeleteFailure_sequence[] = { + { &hf_e2ap_protocolIEs , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_e2ap_ProtocolIE_Container }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_e2ap_RICsubscriptionDeleteFailure(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { +#line 508 "./asn1/e2ap/e2ap.cnf" + col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "RICsubscriptionDeleteFailure"); + + + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_e2ap_RICsubscriptionDeleteFailure, RICsubscriptionDeleteFailure_sequence); + + return offset; +} + + +static const per_sequence_t RICindication_sequence[] = { + { &hf_e2ap_protocolIEs , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_e2ap_ProtocolIE_Container }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_e2ap_RICindication(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { +#line 478 "./asn1/e2ap/e2ap.cnf" + col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "RICindication"); + + + + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_e2ap_RICindication, RICindication_sequence); + + return offset; +} + + +static const per_sequence_t RICcontrolRequest_sequence[] = { + { &hf_e2ap_protocolIEs , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_e2ap_ProtocolIE_Container }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_e2ap_RICcontrolRequest(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { +#line 475 "./asn1/e2ap/e2ap.cnf" + col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "RICcontrolRequest"); + + + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_e2ap_RICcontrolRequest, RICcontrolRequest_sequence); + + return offset; +} + + +static const per_sequence_t RICcontrolAcknowledge_sequence[] = { + { &hf_e2ap_protocolIEs , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_e2ap_ProtocolIE_Container }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_e2ap_RICcontrolAcknowledge(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { +#line 467 "./asn1/e2ap/e2ap.cnf" + col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "RICcontrolAcknowledge"); + + + + + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_e2ap_RICcontrolAcknowledge, RICcontrolAcknowledge_sequence); + + return offset; +} + + +static const per_sequence_t RICcontrolFailure_sequence[] = { + { &hf_e2ap_protocolIEs , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_e2ap_ProtocolIE_Container }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_e2ap_RICcontrolFailure(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { +#line 472 "./asn1/e2ap/e2ap.cnf" + col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "RICcontrolFailure"); + + + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_e2ap_RICcontrolFailure, RICcontrolFailure_sequence); + + return offset; +} + + +static const per_sequence_t ErrorIndication_sequence[] = { + { &hf_e2ap_protocolIEs , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_e2ap_ProtocolIE_Container }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_e2ap_ErrorIndication(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { +#line 458 "./asn1/e2ap/e2ap.cnf" + col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "ErrorIndication"); + + + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_e2ap_ErrorIndication, ErrorIndication_sequence); + + return offset; +} + + +static const per_sequence_t E2setupRequest_sequence[] = { + { &hf_e2ap_protocolIEs , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_e2ap_ProtocolIE_Container }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_e2ap_E2setupRequest(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { +#line 452 "./asn1/e2ap/e2ap.cnf" + col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "E2setupRequest"); + + + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_e2ap_E2setupRequest, E2setupRequest_sequence); + + return offset; +} + + +static const per_sequence_t E2setupResponse_sequence[] = { + { &hf_e2ap_protocolIEs , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_e2ap_ProtocolIE_Container }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_e2ap_E2setupResponse(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { +#line 455 "./asn1/e2ap/e2ap.cnf" + col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "E2setupResponse"); + + + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_e2ap_E2setupResponse, E2setupResponse_sequence); + + return offset; +} + + +static const per_sequence_t E2setupFailure_sequence[] = { + { &hf_e2ap_protocolIEs , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_e2ap_ProtocolIE_Container }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_e2ap_E2setupFailure(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { +#line 449 "./asn1/e2ap/e2ap.cnf" + col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "E2setupFailure"); + + + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_e2ap_E2setupFailure, E2setupFailure_sequence); + + return offset; +} + + +static const per_sequence_t ResetRequest_sequence[] = { + { &hf_e2ap_protocolIEs , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_e2ap_ProtocolIE_Container }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_e2ap_ResetRequest(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { +#line 461 "./asn1/e2ap/e2ap.cnf" + col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "ResetRequest"); + + + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_e2ap_ResetRequest, ResetRequest_sequence); + + return offset; +} + + +static const per_sequence_t ResetResponse_sequence[] = { + { &hf_e2ap_protocolIEs , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_e2ap_ProtocolIE_Container }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_e2ap_ResetResponse(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { +#line 464 "./asn1/e2ap/e2ap.cnf" + col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "ResetResponse"); + + + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_e2ap_ResetResponse, ResetResponse_sequence); + + return offset; +} + + +static const per_sequence_t RICserviceUpdate_sequence[] = { + { &hf_e2ap_protocolIEs , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_e2ap_ProtocolIE_Container }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_e2ap_RICserviceUpdate(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { +#line 485 "./asn1/e2ap/e2ap.cnf" + col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "RICserviceUpdate"); + + + + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_e2ap_RICserviceUpdate, RICserviceUpdate_sequence); + + return offset; +} + + +static const per_sequence_t RANfunctions_List_sequence_of[1] = { + { &hf_e2ap_RANfunctions_List_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_e2ap_ProtocolIE_SingleContainer }, +}; + +static int +dissect_e2ap_RANfunctions_List(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index, + ett_e2ap_RANfunctions_List, RANfunctions_List_sequence_of, + 0, maxofRANfunctionID, FALSE); + + return offset; +} + + +static const per_sequence_t RANfunction_Item_sequence[] = { + { &hf_e2ap_ranFunctionID , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_e2ap_RANfunctionID }, + { &hf_e2ap_ranFunctionDefinition, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_e2ap_RANfunctionDefinition }, + { &hf_e2ap_ranFunctionRevision, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_e2ap_RANfunctionRevision }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_e2ap_RANfunction_Item(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_e2ap_RANfunction_Item, RANfunction_Item_sequence); + + return offset; +} + + +static const per_sequence_t RANfunctionsID_List_sequence_of[1] = { + { &hf_e2ap_RANfunctionsID_List_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_e2ap_ProtocolIE_SingleContainer }, +}; + +static int +dissect_e2ap_RANfunctionsID_List(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index, + ett_e2ap_RANfunctionsID_List, RANfunctionsID_List_sequence_of, + 0, maxofRANfunctionID, FALSE); + + return offset; +} + + +static const per_sequence_t RANfunctionID_Item_sequence[] = { + { &hf_e2ap_ranFunctionID , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_e2ap_RANfunctionID }, + { &hf_e2ap_ranFunctionRevision, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_e2ap_RANfunctionRevision }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_e2ap_RANfunctionID_Item(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_e2ap_RANfunctionID_Item, RANfunctionID_Item_sequence); + + return offset; +} + + +static const per_sequence_t RICserviceUpdateAcknowledge_sequence[] = { + { &hf_e2ap_protocolIEs , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_e2ap_ProtocolIE_Container }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_e2ap_RICserviceUpdateAcknowledge(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { +#line 489 "./asn1/e2ap/e2ap.cnf" + col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "RICserviceUpdateAcknowledge"); + + + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_e2ap_RICserviceUpdateAcknowledge, RICserviceUpdateAcknowledge_sequence); + + return offset; +} + + +static const per_sequence_t RANfunctionsIDcause_List_sequence_of[1] = { + { &hf_e2ap_RANfunctionsIDcause_List_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_e2ap_ProtocolIE_SingleContainer }, +}; + +static int +dissect_e2ap_RANfunctionsIDcause_List(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index, + ett_e2ap_RANfunctionsIDcause_List, RANfunctionsIDcause_List_sequence_of, + 0, maxofRANfunctionID, FALSE); + + return offset; +} + + +static const per_sequence_t RANfunctionIDcause_Item_sequence[] = { + { &hf_e2ap_ranFunctionID , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_e2ap_RANfunctionID }, + { &hf_e2ap_cause , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_e2ap_Cause }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_e2ap_RANfunctionIDcause_Item(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_e2ap_RANfunctionIDcause_Item, RANfunctionIDcause_Item_sequence); + + return offset; +} + + +static const per_sequence_t RICserviceUpdateFailure_sequence[] = { + { &hf_e2ap_protocolIEs , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_e2ap_ProtocolIE_Container }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_e2ap_RICserviceUpdateFailure(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { +#line 492 "./asn1/e2ap/e2ap.cnf" + col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "RICserviceUpdateFailure"); + + + + + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_e2ap_RICserviceUpdateFailure, RICserviceUpdateFailure_sequence); + + return offset; +} + + +static const per_sequence_t RICserviceQuery_sequence[] = { + { &hf_e2ap_protocolIEs , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_e2ap_ProtocolIE_Container }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_e2ap_RICserviceQuery(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { +#line 482 "./asn1/e2ap/e2ap.cnf" + col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "RICserviceQuery"); + + + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_e2ap_RICserviceQuery, RICserviceQuery_sequence); + + return offset; +} + + + +static int +dissect_e2ap_InitiatingMessage_value(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { +#line 111 "./asn1/e2ap/e2ap.cnf" + struct e2ap_private_data *e2ap_data = e2ap_get_private_data(actx->pinfo); + e2ap_data->message_type = INITIATING_MESSAGE; + + offset = dissect_per_open_type_pdu_new(tvb, offset, actx, tree, hf_index, dissect_InitiatingMessageValue); + + return offset; +} + + +static const per_sequence_t InitiatingMessage_sequence[] = { + { &hf_e2ap_procedureCode , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_e2ap_ProcedureCode }, + { &hf_e2ap_criticality , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_e2ap_Criticality }, + { &hf_e2ap_initiatingMessagevalue, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_e2ap_InitiatingMessage_value }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_e2ap_InitiatingMessage(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_e2ap_InitiatingMessage, InitiatingMessage_sequence); + + return offset; +} + + + +static int +dissect_e2ap_SuccessfulOutcome_value(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { +#line 115 "./asn1/e2ap/e2ap.cnf" + struct e2ap_private_data *e2ap_data = e2ap_get_private_data(actx->pinfo); + e2ap_data->message_type = SUCCESSFUL_OUTCOME; + + offset = dissect_per_open_type_pdu_new(tvb, offset, actx, tree, hf_index, dissect_SuccessfulOutcomeValue); + + return offset; +} + + +static const per_sequence_t SuccessfulOutcome_sequence[] = { + { &hf_e2ap_procedureCode , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_e2ap_ProcedureCode }, + { &hf_e2ap_criticality , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_e2ap_Criticality }, + { &hf_e2ap_successfulOutcome_value, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_e2ap_SuccessfulOutcome_value }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_e2ap_SuccessfulOutcome(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_e2ap_SuccessfulOutcome, SuccessfulOutcome_sequence); + + return offset; +} + + + +static int +dissect_e2ap_UnsuccessfulOutcome_value(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { +#line 119 "./asn1/e2ap/e2ap.cnf" + struct e2ap_private_data *e2ap_data = e2ap_get_private_data(actx->pinfo); + e2ap_data->message_type = UNSUCCESSFUL_OUTCOME; + + + + + + + + + + + + + + + + + + + + + + offset = dissect_per_open_type_pdu_new(tvb, offset, actx, tree, hf_index, dissect_UnsuccessfulOutcomeValue); + + return offset; +} + + +static const per_sequence_t UnsuccessfulOutcome_sequence[] = { + { &hf_e2ap_procedureCode , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_e2ap_ProcedureCode }, + { &hf_e2ap_criticality , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_e2ap_Criticality }, + { &hf_e2ap_unsuccessfulOutcome_value, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_e2ap_UnsuccessfulOutcome_value }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_e2ap_UnsuccessfulOutcome(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_e2ap_UnsuccessfulOutcome, UnsuccessfulOutcome_sequence); + + return offset; +} + + +static const value_string e2ap_E2AP_PDU_vals[] = { + { 0, "initiatingMessage" }, + { 1, "successfulOutcome" }, + { 2, "unsuccessfulOutcome" }, + { 0, NULL } +}; + +static const per_choice_t E2AP_PDU_choice[] = { + { 0, &hf_e2ap_initiatingMessage, ASN1_EXTENSION_ROOT , dissect_e2ap_InitiatingMessage }, + { 1, &hf_e2ap_successfulOutcome, ASN1_EXTENSION_ROOT , dissect_e2ap_SuccessfulOutcome }, + { 2, &hf_e2ap_unsuccessfulOutcome, ASN1_EXTENSION_ROOT , dissect_e2ap_UnsuccessfulOutcome }, + { 0, NULL, 0, NULL } +}; + +static int +dissect_e2ap_E2AP_PDU(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_choice(tvb, offset, actx, tree, hf_index, + ett_e2ap_E2AP_PDU, E2AP_PDU_choice, + NULL); + + return offset; +} + + +static const per_sequence_t GlobalKPMnode_gNB_ID_sequence[] = { + { &hf_e2ap_global_gNB_ID_01, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_e2ap_GlobalgNB_ID }, + { &hf_e2ap_gNB_CU_UP_ID , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_e2ap_GNB_CU_UP_ID }, + { &hf_e2ap_gNB_DU_ID , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_e2ap_GNB_DU_ID }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_e2ap_GlobalKPMnode_gNB_ID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_e2ap_GlobalKPMnode_gNB_ID, GlobalKPMnode_gNB_ID_sequence); + + return offset; +} + + +static const per_sequence_t GlobalKPMnode_en_gNB_ID_sequence[] = { + { &hf_e2ap_global_gNB_ID , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_e2ap_GlobalenGNB_ID }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_e2ap_GlobalKPMnode_en_gNB_ID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_e2ap_GlobalKPMnode_en_gNB_ID, GlobalKPMnode_en_gNB_ID_sequence); + + return offset; +} + + +static const per_sequence_t GlobalKPMnode_ng_eNB_ID_sequence[] = { + { &hf_e2ap_global_ng_eNB_ID, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_e2ap_GlobalngeNB_ID }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_e2ap_GlobalKPMnode_ng_eNB_ID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_e2ap_GlobalKPMnode_ng_eNB_ID, GlobalKPMnode_ng_eNB_ID_sequence); + + return offset; +} + + +static const per_sequence_t GlobalKPMnode_eNB_ID_sequence[] = { + { &hf_e2ap_global_eNB_ID , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_e2ap_GlobalENB_ID }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_e2ap_GlobalKPMnode_eNB_ID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_e2ap_GlobalKPMnode_eNB_ID, GlobalKPMnode_eNB_ID_sequence); + + return offset; +} + + +static const value_string e2ap_GlobalKPMnode_ID_vals[] = { + { 0, "gNB" }, + { 1, "en-gNB" }, + { 2, "ng-eNB" }, + { 3, "eNB" }, + { 0, NULL } +}; + +static const per_choice_t GlobalKPMnode_ID_choice[] = { + { 0, &hf_e2ap_gNB_01 , ASN1_EXTENSION_ROOT , dissect_e2ap_GlobalKPMnode_gNB_ID }, + { 1, &hf_e2ap_en_gNB_01 , ASN1_EXTENSION_ROOT , dissect_e2ap_GlobalKPMnode_en_gNB_ID }, + { 2, &hf_e2ap_ng_eNB_01 , ASN1_EXTENSION_ROOT , dissect_e2ap_GlobalKPMnode_ng_eNB_ID }, + { 3, &hf_e2ap_eNB_01 , ASN1_EXTENSION_ROOT , dissect_e2ap_GlobalKPMnode_eNB_ID }, + { 0, NULL, 0, NULL } +}; + +static int +dissect_e2ap_GlobalKPMnode_ID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_choice(tvb, offset, actx, tree, hf_index, + ett_e2ap_GlobalKPMnode_ID, GlobalKPMnode_ID_choice, + NULL); + + return offset; +} + + + +static int +dissect_e2ap_NRCellIdentity(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index, + 36, 36, FALSE, NULL, 0, NULL, NULL); + + return offset; +} + + +static const per_sequence_t NRCGI_sequence[] = { + { &hf_e2ap_pLMN_Identity , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_e2ap_PLMN_Identity }, + { &hf_e2ap_nRCellIdentity , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_e2ap_NRCellIdentity }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_e2ap_NRCGI(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_e2ap_NRCGI, NRCGI_sequence); + + return offset; +} + + + +static int +dissect_e2ap_OCTET_STRING_SIZE_1(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index, + 1, 1, FALSE, NULL); + + return offset; +} + + + +static int +dissect_e2ap_OCTET_STRING_SIZE_3(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index, + 3, 3, FALSE, NULL); + + return offset; +} + + +static const per_sequence_t SNSSAI_sequence[] = { + { &hf_e2ap_sST , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_e2ap_OCTET_STRING_SIZE_1 }, + { &hf_e2ap_sD , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_e2ap_OCTET_STRING_SIZE_3 }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_e2ap_SNSSAI(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_e2ap_SNSSAI, SNSSAI_sequence); + + return offset; +} + + + +static int +dissect_e2ap_RIC_Style_Type(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_integer(tvb, offset, actx, tree, hf_index, NULL); + + return offset; +} + + + +static int +dissect_e2ap_RIC_Style_Name(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_PrintableString(tvb, offset, actx, tree, hf_index, + 1, 150, TRUE); + + return offset; +} + + + +static int +dissect_e2ap_RIC_Format_Type(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_integer(tvb, offset, actx, tree, hf_index, NULL); + + return offset; +} + + +static const value_string e2ap_RT_Period_IE_vals[] = { + { 0, "ms10" }, + { 1, "ms20" }, + { 2, "ms32" }, + { 3, "ms40" }, + { 4, "ms60" }, + { 5, "ms64" }, + { 6, "ms70" }, + { 7, "ms80" }, + { 8, "ms128" }, + { 9, "ms160" }, + { 10, "ms256" }, + { 11, "ms320" }, + { 12, "ms512" }, + { 13, "ms640" }, + { 14, "ms1024" }, + { 15, "ms1280" }, + { 16, "ms2048" }, + { 17, "ms2560" }, + { 18, "ms5120" }, + { 19, "ms10240" }, + { 0, NULL } +}; + + +static int +dissect_e2ap_RT_Period_IE(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, + 20, NULL, TRUE, 0, NULL); + + return offset; +} + + +static const per_sequence_t Trigger_ConditionIE_Item_sequence[] = { + { &hf_e2ap_report_Period_IE, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_e2ap_RT_Period_IE }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_e2ap_Trigger_ConditionIE_Item(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_e2ap_Trigger_ConditionIE_Item, Trigger_ConditionIE_Item_sequence); + + return offset; +} + + +static const per_sequence_t SEQUENCE_SIZE_1_maxofMessageProtocolTests_OF_Trigger_ConditionIE_Item_sequence_of[1] = { + { &hf_e2ap_policyTest_List_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_e2ap_Trigger_ConditionIE_Item }, +}; + +static int +dissect_e2ap_SEQUENCE_SIZE_1_maxofMessageProtocolTests_OF_Trigger_ConditionIE_Item(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index, + ett_e2ap_SEQUENCE_SIZE_1_maxofMessageProtocolTests_OF_Trigger_ConditionIE_Item, SEQUENCE_SIZE_1_maxofMessageProtocolTests_OF_Trigger_ConditionIE_Item_sequence_of, + 1, maxofMessageProtocolTests, FALSE); + + return offset; +} + + +static const per_sequence_t E2SM_KPM_EventTriggerDefinition_Format1_sequence[] = { + { &hf_e2ap_policyTest_List, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_e2ap_SEQUENCE_SIZE_1_maxofMessageProtocolTests_OF_Trigger_ConditionIE_Item }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_e2ap_E2SM_KPM_EventTriggerDefinition_Format1(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_e2ap_E2SM_KPM_EventTriggerDefinition_Format1, E2SM_KPM_EventTriggerDefinition_Format1_sequence); + + return offset; +} + + +static const value_string e2ap_E2SM_KPM_EventTriggerDefinition_vals[] = { + { 0, "eventDefinition-Format1" }, + { 0, NULL } +}; + +static const per_choice_t E2SM_KPM_EventTriggerDefinition_choice[] = { + { 0, &hf_e2ap_eventDefinition_Format1, ASN1_EXTENSION_ROOT , dissect_e2ap_E2SM_KPM_EventTriggerDefinition_Format1 }, + { 0, NULL, 0, NULL } +}; + +static int +dissect_e2ap_E2SM_KPM_EventTriggerDefinition(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_choice(tvb, offset, actx, tree, hf_index, + ett_e2ap_E2SM_KPM_EventTriggerDefinition, E2SM_KPM_EventTriggerDefinition_choice, + NULL); + + return offset; +} + + +static const per_sequence_t E2SM_KPM_ActionDefinition_sequence[] = { + { &hf_e2ap_ric_Style_Type , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_e2ap_RIC_Style_Type }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_e2ap_E2SM_KPM_ActionDefinition(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_e2ap_E2SM_KPM_ActionDefinition, E2SM_KPM_ActionDefinition_sequence); + + return offset; +} + + + +static int +dissect_e2ap_INTEGER_0_255(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index, + 0U, 255U, NULL, FALSE); + + return offset; +} + + +static const per_sequence_t E2SM_KPM_IndicationHeader_Format1_sequence[] = { + { &hf_e2ap_id_GlobalKPMnode_ID, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_e2ap_GlobalKPMnode_ID }, + { &hf_e2ap_nRCGI , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_e2ap_NRCGI }, + { &hf_e2ap_pLMN_Identity , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_e2ap_PLMN_Identity }, + { &hf_e2ap_sliceID , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_e2ap_SNSSAI }, + { &hf_e2ap_fiveQI , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_e2ap_INTEGER_0_255 }, + { &hf_e2ap_qci , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_e2ap_INTEGER_0_255 }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_e2ap_E2SM_KPM_IndicationHeader_Format1(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_e2ap_E2SM_KPM_IndicationHeader_Format1, E2SM_KPM_IndicationHeader_Format1_sequence); + + return offset; +} + + +static const value_string e2ap_E2SM_KPM_IndicationHeader_vals[] = { + { 0, "indicationHeader-Format1" }, + { 0, NULL } +}; + +static const per_choice_t E2SM_KPM_IndicationHeader_choice[] = { + { 0, &hf_e2ap_indicationHeader_Format1, ASN1_EXTENSION_ROOT , dissect_e2ap_E2SM_KPM_IndicationHeader_Format1 }, + { 0, NULL, 0, NULL } +}; + +static int +dissect_e2ap_E2SM_KPM_IndicationHeader(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_choice(tvb, offset, actx, tree, hf_index, + ett_e2ap_E2SM_KPM_IndicationHeader, E2SM_KPM_IndicationHeader_choice, + NULL); + + return offset; +} + + + +static int +dissect_e2ap_INTEGER_0_273(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index, + 0U, 273U, NULL, FALSE); + + return offset; +} + + +static const per_sequence_t FQIPERSlicesPerPlmnPerCellListItem_sequence[] = { + { &hf_e2ap_fiveQI , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_e2ap_INTEGER_0_255 }, + { &hf_e2ap_dl_PRBUsage , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_e2ap_INTEGER_0_273 }, + { &hf_e2ap_ul_PRBUsage , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_e2ap_INTEGER_0_273 }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_e2ap_FQIPERSlicesPerPlmnPerCellListItem(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_e2ap_FQIPERSlicesPerPlmnPerCellListItem, FQIPERSlicesPerPlmnPerCellListItem_sequence); + + return offset; +} + + +static const per_sequence_t SEQUENCE_SIZE_1_maxnoofQoSFlows_OF_FQIPERSlicesPerPlmnPerCellListItem_sequence_of[1] = { + { &hf_e2ap_fQIPERSlicesPerPlmnPerCellList_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_e2ap_FQIPERSlicesPerPlmnPerCellListItem }, +}; + +static int +dissect_e2ap_SEQUENCE_SIZE_1_maxnoofQoSFlows_OF_FQIPERSlicesPerPlmnPerCellListItem(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index, + ett_e2ap_SEQUENCE_SIZE_1_maxnoofQoSFlows_OF_FQIPERSlicesPerPlmnPerCellListItem, SEQUENCE_SIZE_1_maxnoofQoSFlows_OF_FQIPERSlicesPerPlmnPerCellListItem_sequence_of, + 1, maxnoofQoSFlows, FALSE); + + return offset; +} + + +static const per_sequence_t SlicePerPlmnPerCellListItem_sequence[] = { + { &hf_e2ap_sliceID , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_e2ap_SNSSAI }, + { &hf_e2ap_fQIPERSlicesPerPlmnPerCellList, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_e2ap_SEQUENCE_SIZE_1_maxnoofQoSFlows_OF_FQIPERSlicesPerPlmnPerCellListItem }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_e2ap_SlicePerPlmnPerCellListItem(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_e2ap_SlicePerPlmnPerCellListItem, SlicePerPlmnPerCellListItem_sequence); + + return offset; +} + + +static const per_sequence_t SEQUENCE_SIZE_1_maxnoofSliceItems_OF_SlicePerPlmnPerCellListItem_sequence_of[1] = { + { &hf_e2ap_slicePerPlmnPerCellList_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_e2ap_SlicePerPlmnPerCellListItem }, +}; + +static int +dissect_e2ap_SEQUENCE_SIZE_1_maxnoofSliceItems_OF_SlicePerPlmnPerCellListItem(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index, + ett_e2ap_SEQUENCE_SIZE_1_maxnoofSliceItems_OF_SlicePerPlmnPerCellListItem, SEQUENCE_SIZE_1_maxnoofSliceItems_OF_SlicePerPlmnPerCellListItem_sequence_of, + 1, maxnoofSliceItems, FALSE); + + return offset; +} + + +static const per_sequence_t FGC_DU_PM_Container_sequence[] = { + { &hf_e2ap_slicePerPlmnPerCellList, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_e2ap_SEQUENCE_SIZE_1_maxnoofSliceItems_OF_SlicePerPlmnPerCellListItem }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_e2ap_FGC_DU_PM_Container(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_e2ap_FGC_DU_PM_Container, FGC_DU_PM_Container_sequence); + + return offset; +} + + + +static int +dissect_e2ap_INTEGER_0_100(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index, + 0U, 100U, NULL, FALSE); + + return offset; +} + + +static const per_sequence_t PerQCIReportListItem_sequence[] = { + { &hf_e2ap_qci , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_e2ap_INTEGER_0_255 }, + { &hf_e2ap_dl_PRBUsage_01 , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_e2ap_INTEGER_0_100 }, + { &hf_e2ap_ul_PRBUsage_01 , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_e2ap_INTEGER_0_100 }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_e2ap_PerQCIReportListItem(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_e2ap_PerQCIReportListItem, PerQCIReportListItem_sequence); + + return offset; +} + + +static const per_sequence_t SEQUENCE_SIZE_1_maxnoofQCI_OF_PerQCIReportListItem_sequence_of[1] = { + { &hf_e2ap_perQCIReportList_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_e2ap_PerQCIReportListItem }, +}; + +static int +dissect_e2ap_SEQUENCE_SIZE_1_maxnoofQCI_OF_PerQCIReportListItem(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index, + ett_e2ap_SEQUENCE_SIZE_1_maxnoofQCI_OF_PerQCIReportListItem, SEQUENCE_SIZE_1_maxnoofQCI_OF_PerQCIReportListItem_sequence_of, + 1, maxnoofQCI, FALSE); + + return offset; +} + + +static const per_sequence_t EPC_DU_PM_Container_sequence[] = { + { &hf_e2ap_perQCIReportList, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_e2ap_SEQUENCE_SIZE_1_maxnoofQCI_OF_PerQCIReportListItem }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_e2ap_EPC_DU_PM_Container(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_e2ap_EPC_DU_PM_Container, EPC_DU_PM_Container_sequence); + + return offset; +} + + +static const per_sequence_t ServedPlmnPerCellListItem_sequence[] = { + { &hf_e2ap_pLMN_Identity , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_e2ap_PLMN_Identity }, + { &hf_e2ap_du_PM_5GC , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_e2ap_FGC_DU_PM_Container }, + { &hf_e2ap_du_PM_EPC , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_e2ap_EPC_DU_PM_Container }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_e2ap_ServedPlmnPerCellListItem(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_e2ap_ServedPlmnPerCellListItem, ServedPlmnPerCellListItem_sequence); + + return offset; +} + + +static const per_sequence_t SEQUENCE_SIZE_1_maxPLMN_OF_ServedPlmnPerCellListItem_sequence_of[1] = { + { &hf_e2ap_servedPlmnPerCellList_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_e2ap_ServedPlmnPerCellListItem }, +}; + +static int +dissect_e2ap_SEQUENCE_SIZE_1_maxPLMN_OF_ServedPlmnPerCellListItem(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index, + ett_e2ap_SEQUENCE_SIZE_1_maxPLMN_OF_ServedPlmnPerCellListItem, SEQUENCE_SIZE_1_maxPLMN_OF_ServedPlmnPerCellListItem_sequence_of, + 1, maxPLMN, FALSE); + + return offset; +} + + +static const per_sequence_t CellResourceReportListItem_sequence[] = { + { &hf_e2ap_nRCGI , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_e2ap_NRCGI }, + { &hf_e2ap_dl_TotalofAvailablePRBs, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_e2ap_INTEGER_0_273 }, + { &hf_e2ap_ul_TotalofAvailablePRBs, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_e2ap_INTEGER_0_273 }, + { &hf_e2ap_servedPlmnPerCellList, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_e2ap_SEQUENCE_SIZE_1_maxPLMN_OF_ServedPlmnPerCellListItem }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_e2ap_CellResourceReportListItem(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_e2ap_CellResourceReportListItem, CellResourceReportListItem_sequence); + + return offset; +} + + +static const per_sequence_t SEQUENCE_SIZE_1_maxCellingNBDU_OF_CellResourceReportListItem_sequence_of[1] = { + { &hf_e2ap_cellResourceReportList_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_e2ap_CellResourceReportListItem }, +}; + +static int +dissect_e2ap_SEQUENCE_SIZE_1_maxCellingNBDU_OF_CellResourceReportListItem(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index, + ett_e2ap_SEQUENCE_SIZE_1_maxCellingNBDU_OF_CellResourceReportListItem, SEQUENCE_SIZE_1_maxCellingNBDU_OF_CellResourceReportListItem_sequence_of, + 1, maxCellingNBDU, FALSE); + + return offset; +} + + +static const per_sequence_t ODU_PF_Container_sequence[] = { + { &hf_e2ap_cellResourceReportList, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_e2ap_SEQUENCE_SIZE_1_maxCellingNBDU_OF_CellResourceReportListItem }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_e2ap_ODU_PF_Container(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_e2ap_ODU_PF_Container, ODU_PF_Container_sequence); + + return offset; +} + + + +static int +dissect_e2ap_GNB_CU_CP_Name(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_PrintableString(tvb, offset, actx, tree, hf_index, + 1, 150, TRUE); + + return offset; +} + + + +static int +dissect_e2ap_INTEGER_1_65536_(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index, + 1U, 65536U, NULL, TRUE); + + return offset; +} + + +static const per_sequence_t T_cu_CP_Resource_Status_sequence[] = { + { &hf_e2ap_numberOfActive_UEs, ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_e2ap_INTEGER_1_65536_ }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_e2ap_T_cu_CP_Resource_Status(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_e2ap_T_cu_CP_Resource_Status, T_cu_CP_Resource_Status_sequence); + + return offset; +} + + +static const per_sequence_t OCUCP_PF_Container_sequence[] = { + { &hf_e2ap_gNB_CU_CP_Name , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_e2ap_GNB_CU_CP_Name }, + { &hf_e2ap_cu_CP_Resource_Status, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_e2ap_T_cu_CP_Resource_Status }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_e2ap_OCUCP_PF_Container(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_e2ap_OCUCP_PF_Container, OCUCP_PF_Container_sequence); + + return offset; +} + + + +static int +dissect_e2ap_GNB_CU_UP_Name(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_PrintableString(tvb, offset, actx, tree, hf_index, + 1, 150, TRUE); + + return offset; +} + + +static const value_string e2ap_NI_Type_vals[] = { + { 0, "x2-u" }, + { 1, "xn-u" }, + { 2, "f1-u" }, + { 0, NULL } +}; + + +static int +dissect_e2ap_NI_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, + 3, NULL, TRUE, 0, NULL); + + return offset; +} + + + +static int +dissect_e2ap_INTEGER_0_10000000000_(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_constrained_integer_64b(tvb, offset, actx, tree, hf_index, + 0U, G_GUINT64_CONSTANT(10000000000), NULL, TRUE); + + return offset; +} + + +static const per_sequence_t FQIPERSlicesPerPlmnListItem_sequence[] = { + { &hf_e2ap_fiveQI , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_e2ap_INTEGER_0_255 }, + { &hf_e2ap_pDCPBytesDL , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_e2ap_INTEGER_0_10000000000_ }, + { &hf_e2ap_pDCPBytesUL , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_e2ap_INTEGER_0_10000000000_ }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_e2ap_FQIPERSlicesPerPlmnListItem(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_e2ap_FQIPERSlicesPerPlmnListItem, FQIPERSlicesPerPlmnListItem_sequence); + + return offset; +} + + +static const per_sequence_t SEQUENCE_SIZE_1_maxnoofQoSFlows_OF_FQIPERSlicesPerPlmnListItem_sequence_of[1] = { + { &hf_e2ap_fQIPERSlicesPerPlmnList_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_e2ap_FQIPERSlicesPerPlmnListItem }, +}; + +static int +dissect_e2ap_SEQUENCE_SIZE_1_maxnoofQoSFlows_OF_FQIPERSlicesPerPlmnListItem(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index, + ett_e2ap_SEQUENCE_SIZE_1_maxnoofQoSFlows_OF_FQIPERSlicesPerPlmnListItem, SEQUENCE_SIZE_1_maxnoofQoSFlows_OF_FQIPERSlicesPerPlmnListItem_sequence_of, + 1, maxnoofQoSFlows, FALSE); + + return offset; +} + + +static const per_sequence_t SliceToReportListItem_sequence[] = { + { &hf_e2ap_sliceID , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_e2ap_SNSSAI }, + { &hf_e2ap_fQIPERSlicesPerPlmnList, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_e2ap_SEQUENCE_SIZE_1_maxnoofQoSFlows_OF_FQIPERSlicesPerPlmnListItem }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_e2ap_SliceToReportListItem(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_e2ap_SliceToReportListItem, SliceToReportListItem_sequence); + + return offset; +} + + +static const per_sequence_t SEQUENCE_SIZE_1_maxnoofSliceItems_OF_SliceToReportListItem_sequence_of[1] = { + { &hf_e2ap_sliceToReportList_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_e2ap_SliceToReportListItem }, +}; + +static int +dissect_e2ap_SEQUENCE_SIZE_1_maxnoofSliceItems_OF_SliceToReportListItem(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index, + ett_e2ap_SEQUENCE_SIZE_1_maxnoofSliceItems_OF_SliceToReportListItem, SEQUENCE_SIZE_1_maxnoofSliceItems_OF_SliceToReportListItem_sequence_of, + 1, maxnoofSliceItems, FALSE); + + return offset; +} + + +static const per_sequence_t FGC_CUUP_PM_Format_sequence[] = { + { &hf_e2ap_sliceToReportList, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_e2ap_SEQUENCE_SIZE_1_maxnoofSliceItems_OF_SliceToReportListItem }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_e2ap_FGC_CUUP_PM_Format(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_e2ap_FGC_CUUP_PM_Format, FGC_CUUP_PM_Format_sequence); + + return offset; +} + + +static const per_sequence_t PerQCIReportListItemFormat_sequence[] = { + { &hf_e2ap_qci , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_e2ap_INTEGER_0_255 }, + { &hf_e2ap_pDCPBytesDL , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_e2ap_INTEGER_0_10000000000_ }, + { &hf_e2ap_pDCPBytesUL , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_e2ap_INTEGER_0_10000000000_ }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_e2ap_PerQCIReportListItemFormat(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_e2ap_PerQCIReportListItemFormat, PerQCIReportListItemFormat_sequence); + + return offset; +} + + +static const per_sequence_t SEQUENCE_SIZE_1_maxnoofQCI_OF_PerQCIReportListItemFormat_sequence_of[1] = { + { &hf_e2ap_perQCIReportList_item_01, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_e2ap_PerQCIReportListItemFormat }, +}; + +static int +dissect_e2ap_SEQUENCE_SIZE_1_maxnoofQCI_OF_PerQCIReportListItemFormat(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index, + ett_e2ap_SEQUENCE_SIZE_1_maxnoofQCI_OF_PerQCIReportListItemFormat, SEQUENCE_SIZE_1_maxnoofQCI_OF_PerQCIReportListItemFormat_sequence_of, + 1, maxnoofQCI, FALSE); + + return offset; +} + + +static const per_sequence_t EPC_CUUP_PM_Format_sequence[] = { + { &hf_e2ap_perQCIReportList_01, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_e2ap_SEQUENCE_SIZE_1_maxnoofQCI_OF_PerQCIReportListItemFormat }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_e2ap_EPC_CUUP_PM_Format(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_e2ap_EPC_CUUP_PM_Format, EPC_CUUP_PM_Format_sequence); + + return offset; +} + + +static const per_sequence_t PlmnID_List_sequence[] = { + { &hf_e2ap_pLMN_Identity , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_e2ap_PLMN_Identity }, + { &hf_e2ap_cu_UP_PM_5GC , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_e2ap_FGC_CUUP_PM_Format }, + { &hf_e2ap_cu_UP_PM_EPC , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_e2ap_EPC_CUUP_PM_Format }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_e2ap_PlmnID_List(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_e2ap_PlmnID_List, PlmnID_List_sequence); + + return offset; +} + + +static const per_sequence_t SEQUENCE_SIZE_1_maxPLMN_OF_PlmnID_List_sequence_of[1] = { + { &hf_e2ap_plmnList_item , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_e2ap_PlmnID_List }, +}; + +static int +dissect_e2ap_SEQUENCE_SIZE_1_maxPLMN_OF_PlmnID_List(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index, + ett_e2ap_SEQUENCE_SIZE_1_maxPLMN_OF_PlmnID_List, SEQUENCE_SIZE_1_maxPLMN_OF_PlmnID_List_sequence_of, + 1, maxPLMN, FALSE); + + return offset; +} + + +static const per_sequence_t CUUPMeasurement_Container_sequence[] = { + { &hf_e2ap_plmnList , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_e2ap_SEQUENCE_SIZE_1_maxPLMN_OF_PlmnID_List }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_e2ap_CUUPMeasurement_Container(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_e2ap_CUUPMeasurement_Container, CUUPMeasurement_Container_sequence); + + return offset; +} + + +static const per_sequence_t PF_ContainerListItem_sequence[] = { + { &hf_e2ap_interface_type , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_e2ap_NI_Type }, + { &hf_e2ap_o_CU_UP_PM_Container, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_e2ap_CUUPMeasurement_Container }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_e2ap_PF_ContainerListItem(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_e2ap_PF_ContainerListItem, PF_ContainerListItem_sequence); + + return offset; +} + + +static const per_sequence_t SEQUENCE_SIZE_1_maxnoofContainerListItems_OF_PF_ContainerListItem_sequence_of[1] = { + { &hf_e2ap_pf_ContainerList_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_e2ap_PF_ContainerListItem }, +}; + +static int +dissect_e2ap_SEQUENCE_SIZE_1_maxnoofContainerListItems_OF_PF_ContainerListItem(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index, + ett_e2ap_SEQUENCE_SIZE_1_maxnoofContainerListItems_OF_PF_ContainerListItem, SEQUENCE_SIZE_1_maxnoofContainerListItems_OF_PF_ContainerListItem_sequence_of, + 1, maxnoofContainerListItems, FALSE); + + return offset; +} + + +static const per_sequence_t OCUUP_PF_Container_sequence[] = { + { &hf_e2ap_gNB_CU_UP_Name , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_e2ap_GNB_CU_UP_Name }, + { &hf_e2ap_pf_ContainerList, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_e2ap_SEQUENCE_SIZE_1_maxnoofContainerListItems_OF_PF_ContainerListItem }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_e2ap_OCUUP_PF_Container(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_e2ap_OCUUP_PF_Container, OCUUP_PF_Container_sequence); + + return offset; +} + + +static const value_string e2ap_PF_Container_vals[] = { + { 0, "oDU" }, + { 1, "oCU-CP" }, + { 2, "oCU-UP" }, + { 0, NULL } +}; + +static const per_choice_t PF_Container_choice[] = { + { 0, &hf_e2ap_oDU , ASN1_NO_EXTENSIONS , dissect_e2ap_ODU_PF_Container }, + { 1, &hf_e2ap_oCU_CP , ASN1_NO_EXTENSIONS , dissect_e2ap_OCUCP_PF_Container }, + { 2, &hf_e2ap_oCU_UP , ASN1_NO_EXTENSIONS , dissect_e2ap_OCUUP_PF_Container }, + { 0, NULL, 0, NULL } +}; + +static int +dissect_e2ap_PF_Container(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_choice(tvb, offset, actx, tree, hf_index, + ett_e2ap_PF_Container, PF_Container_choice, + NULL); + + return offset; +} + + + +static int +dissect_e2ap_RAN_Container(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index, + NO_BOUND, NO_BOUND, FALSE, NULL); + + return offset; +} + + +static const per_sequence_t PM_Containers_List_sequence[] = { + { &hf_e2ap_performanceContainer, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_e2ap_PF_Container }, + { &hf_e2ap_theRANContainer, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_e2ap_RAN_Container }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_e2ap_PM_Containers_List(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_e2ap_PM_Containers_List, PM_Containers_List_sequence); + + return offset; +} + + +static const per_sequence_t SEQUENCE_SIZE_1_maxCellingNBDU_OF_PM_Containers_List_sequence_of[1] = { + { &hf_e2ap_pm_Containers_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_e2ap_PM_Containers_List }, +}; + +static int +dissect_e2ap_SEQUENCE_SIZE_1_maxCellingNBDU_OF_PM_Containers_List(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index, + ett_e2ap_SEQUENCE_SIZE_1_maxCellingNBDU_OF_PM_Containers_List, SEQUENCE_SIZE_1_maxCellingNBDU_OF_PM_Containers_List_sequence_of, + 1, maxCellingNBDU, FALSE); + + return offset; +} + + +static const per_sequence_t E2SM_KPM_IndicationMessage_Format1_sequence[] = { + { &hf_e2ap_pm_Containers , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_e2ap_SEQUENCE_SIZE_1_maxCellingNBDU_OF_PM_Containers_List }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_e2ap_E2SM_KPM_IndicationMessage_Format1(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_e2ap_E2SM_KPM_IndicationMessage_Format1, E2SM_KPM_IndicationMessage_Format1_sequence); + + return offset; +} + + + +static int +dissect_e2ap_PrintableString_SIZE_1_150_(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_PrintableString(tvb, offset, actx, tree, hf_index, + 1, 150, TRUE); + + return offset; +} + + + +static int +dissect_e2ap_PrintableString_SIZE_1_1000_(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_PrintableString(tvb, offset, actx, tree, hf_index, + 1, 1000, TRUE); + + return offset; +} + + + +static int +dissect_e2ap_INTEGER(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_integer(tvb, offset, actx, tree, hf_index, NULL); + + return offset; +} + + +static const per_sequence_t RANfunction_Name_sequence[] = { + { &hf_e2ap_ranFunction_ShortName, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_e2ap_PrintableString_SIZE_1_150_ }, + { &hf_e2ap_ranFunction_E2SM_OID, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_e2ap_PrintableString_SIZE_1_1000_ }, + { &hf_e2ap_ranFunction_Description, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_e2ap_PrintableString_SIZE_1_150_ }, + { &hf_e2ap_ranFunction_Instance, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_e2ap_INTEGER }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_e2ap_RANfunction_Name(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_e2ap_RANfunction_Name, RANfunction_Name_sequence); + + return offset; +} + + +static const per_sequence_t RIC_EventTriggerStyle_List_sequence[] = { + { &hf_e2ap_ric_EventTriggerStyle_Type, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_e2ap_RIC_Style_Type }, + { &hf_e2ap_ric_EventTriggerStyle_Name, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_e2ap_RIC_Style_Name }, + { &hf_e2ap_ric_EventTriggerFormat_Type, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_e2ap_RIC_Format_Type }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_e2ap_RIC_EventTriggerStyle_List(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_e2ap_RIC_EventTriggerStyle_List, RIC_EventTriggerStyle_List_sequence); + + return offset; +} + + +static const per_sequence_t SEQUENCE_SIZE_1_maxofRICstyles_OF_RIC_EventTriggerStyle_List_sequence_of[1] = { + { &hf_e2ap_ric_EventTriggerStyle_List_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_e2ap_RIC_EventTriggerStyle_List }, +}; + +static int +dissect_e2ap_SEQUENCE_SIZE_1_maxofRICstyles_OF_RIC_EventTriggerStyle_List(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index, + ett_e2ap_SEQUENCE_SIZE_1_maxofRICstyles_OF_RIC_EventTriggerStyle_List, SEQUENCE_SIZE_1_maxofRICstyles_OF_RIC_EventTriggerStyle_List_sequence_of, + 1, maxofRICstyles, FALSE); + + return offset; +} + + +static const per_sequence_t RIC_ReportStyle_List_sequence[] = { + { &hf_e2ap_ric_ReportStyle_Type, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_e2ap_RIC_Style_Type }, + { &hf_e2ap_ric_ReportStyle_Name, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_e2ap_RIC_Style_Name }, + { &hf_e2ap_ric_IndicationHeaderFormat_Type, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_e2ap_RIC_Format_Type }, + { &hf_e2ap_ric_IndicationMessageFormat_Type, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_e2ap_RIC_Format_Type }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_e2ap_RIC_ReportStyle_List(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_e2ap_RIC_ReportStyle_List, RIC_ReportStyle_List_sequence); + + return offset; +} + + +static const per_sequence_t SEQUENCE_SIZE_1_maxofRICstyles_OF_RIC_ReportStyle_List_sequence_of[1] = { + { &hf_e2ap_ric_ReportStyle_List_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_e2ap_RIC_ReportStyle_List }, +}; + +static int +dissect_e2ap_SEQUENCE_SIZE_1_maxofRICstyles_OF_RIC_ReportStyle_List(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index, + ett_e2ap_SEQUENCE_SIZE_1_maxofRICstyles_OF_RIC_ReportStyle_List, SEQUENCE_SIZE_1_maxofRICstyles_OF_RIC_ReportStyle_List_sequence_of, + 1, maxofRICstyles, FALSE); + + return offset; +} + + +static const per_sequence_t T_e2SM_KPM_RANfunction_Item_sequence[] = { + { &hf_e2ap_ric_EventTriggerStyle_List, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_e2ap_SEQUENCE_SIZE_1_maxofRICstyles_OF_RIC_EventTriggerStyle_List }, + { &hf_e2ap_ric_ReportStyle_List, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_e2ap_SEQUENCE_SIZE_1_maxofRICstyles_OF_RIC_ReportStyle_List }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_e2ap_T_e2SM_KPM_RANfunction_Item(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_e2ap_T_e2SM_KPM_RANfunction_Item, T_e2SM_KPM_RANfunction_Item_sequence); + + return offset; +} + + +static const per_sequence_t E2SM_KPM_RANfunction_Description_sequence[] = { + { &hf_e2ap_ranFunction_Name, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_e2ap_RANfunction_Name }, + { &hf_e2ap_e2SM_KPM_RANfunction_Item, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_e2ap_T_e2SM_KPM_RANfunction_Item }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_e2ap_E2SM_KPM_RANfunction_Description(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_e2ap_E2SM_KPM_RANfunction_Description, E2SM_KPM_RANfunction_Description_sequence); + + return offset; +} + + + +static int +dissect_e2ap_RANcallProcess_ID_string(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_PrintableString(tvb, offset, actx, tree, hf_index, + 1, 150, TRUE); + + return offset; +} + +/*--- PDUs ---*/ + +static int dissect_Cause_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) { + int offset = 0; + asn1_ctx_t asn1_ctx; + asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo); + offset = dissect_e2ap_Cause(tvb, offset, &asn1_ctx, tree, hf_e2ap_Cause_PDU); + offset += 7; offset >>= 3; + return offset; +} +static int dissect_CriticalityDiagnostics_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) { + int offset = 0; + asn1_ctx_t asn1_ctx; + asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo); + offset = dissect_e2ap_CriticalityDiagnostics(tvb, offset, &asn1_ctx, tree, hf_e2ap_CriticalityDiagnostics_PDU); + offset += 7; offset >>= 3; + return offset; +} +static int dissect_GlobalE2node_ID_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) { + int offset = 0; + asn1_ctx_t asn1_ctx; + asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo); + offset = dissect_e2ap_GlobalE2node_ID(tvb, offset, &asn1_ctx, tree, hf_e2ap_GlobalE2node_ID_PDU); + offset += 7; offset >>= 3; + return offset; +} +static int dissect_GlobalRIC_ID_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) { + int offset = 0; + asn1_ctx_t asn1_ctx; + asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo); + offset = dissect_e2ap_GlobalRIC_ID(tvb, offset, &asn1_ctx, tree, hf_e2ap_GlobalRIC_ID_PDU); + offset += 7; offset >>= 3; + return offset; +} +static int dissect_RANfunctionID_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) { + int offset = 0; + asn1_ctx_t asn1_ctx; + asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo); + offset = dissect_e2ap_RANfunctionID(tvb, offset, &asn1_ctx, tree, hf_e2ap_RANfunctionID_PDU); + offset += 7; offset >>= 3; + return offset; +} +static int dissect_RICactionID_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) { + int offset = 0; + asn1_ctx_t asn1_ctx; + asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo); + offset = dissect_e2ap_RICactionID(tvb, offset, &asn1_ctx, tree, hf_e2ap_RICactionID_PDU); + offset += 7; offset >>= 3; + return offset; +} +static int dissect_RICcallProcessID_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) { + int offset = 0; + asn1_ctx_t asn1_ctx; + asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo); + offset = dissect_e2ap_RICcallProcessID(tvb, offset, &asn1_ctx, tree, hf_e2ap_RICcallProcessID_PDU); + offset += 7; offset >>= 3; + return offset; +} +static int dissect_RICcontrolAckRequest_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) { + int offset = 0; + asn1_ctx_t asn1_ctx; + asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo); + offset = dissect_e2ap_RICcontrolAckRequest(tvb, offset, &asn1_ctx, tree, hf_e2ap_RICcontrolAckRequest_PDU); + offset += 7; offset >>= 3; + return offset; +} +static int dissect_RICcontrolHeader_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) { + int offset = 0; + asn1_ctx_t asn1_ctx; + asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo); + offset = dissect_e2ap_RICcontrolHeader(tvb, offset, &asn1_ctx, tree, hf_e2ap_RICcontrolHeader_PDU); + offset += 7; offset >>= 3; + return offset; +} +static int dissect_RICcontrolMessage_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) { + int offset = 0; + asn1_ctx_t asn1_ctx; + asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo); + offset = dissect_e2ap_RICcontrolMessage(tvb, offset, &asn1_ctx, tree, hf_e2ap_RICcontrolMessage_PDU); + offset += 7; offset >>= 3; + return offset; +} +static int dissect_RICcontrolOutcome_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) { + int offset = 0; + asn1_ctx_t asn1_ctx; + asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo); + offset = dissect_e2ap_RICcontrolOutcome(tvb, offset, &asn1_ctx, tree, hf_e2ap_RICcontrolOutcome_PDU); + offset += 7; offset >>= 3; + return offset; +} +static int dissect_RICcontrolStatus_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) { + int offset = 0; + asn1_ctx_t asn1_ctx; + asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo); + offset = dissect_e2ap_RICcontrolStatus(tvb, offset, &asn1_ctx, tree, hf_e2ap_RICcontrolStatus_PDU); + offset += 7; offset >>= 3; + return offset; +} +static int dissect_RICindicationHeader_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) { + int offset = 0; + asn1_ctx_t asn1_ctx; + asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo); + offset = dissect_e2ap_RICindicationHeader(tvb, offset, &asn1_ctx, tree, hf_e2ap_RICindicationHeader_PDU); + offset += 7; offset >>= 3; + return offset; +} +static int dissect_RICindicationMessage_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) { + int offset = 0; + asn1_ctx_t asn1_ctx; + asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo); + offset = dissect_e2ap_RICindicationMessage(tvb, offset, &asn1_ctx, tree, hf_e2ap_RICindicationMessage_PDU); + offset += 7; offset >>= 3; + return offset; +} +static int dissect_RICindicationSN_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) { + int offset = 0; + asn1_ctx_t asn1_ctx; + asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo); + offset = dissect_e2ap_RICindicationSN(tvb, offset, &asn1_ctx, tree, hf_e2ap_RICindicationSN_PDU); + offset += 7; offset >>= 3; + return offset; +} +static int dissect_RICindicationType_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) { + int offset = 0; + asn1_ctx_t asn1_ctx; + asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo); + offset = dissect_e2ap_RICindicationType(tvb, offset, &asn1_ctx, tree, hf_e2ap_RICindicationType_PDU); + offset += 7; offset >>= 3; + return offset; +} +static int dissect_RICrequestID_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) { + int offset = 0; + asn1_ctx_t asn1_ctx; + asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo); + offset = dissect_e2ap_RICrequestID(tvb, offset, &asn1_ctx, tree, hf_e2ap_RICrequestID_PDU); + offset += 7; offset >>= 3; + return offset; +} +static int dissect_TimeToWait_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) { + int offset = 0; + asn1_ctx_t asn1_ctx; + asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo); + offset = dissect_e2ap_TimeToWait(tvb, offset, &asn1_ctx, tree, hf_e2ap_TimeToWait_PDU); + offset += 7; offset >>= 3; + return offset; +} +static int dissect_RICsubscriptionRequest_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) { + int offset = 0; + asn1_ctx_t asn1_ctx; + asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo); + offset = dissect_e2ap_RICsubscriptionRequest(tvb, offset, &asn1_ctx, tree, hf_e2ap_RICsubscriptionRequest_PDU); + offset += 7; offset >>= 3; + return offset; +} +static int dissect_RICsubscriptionDetails_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) { + int offset = 0; + asn1_ctx_t asn1_ctx; + asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo); + offset = dissect_e2ap_RICsubscriptionDetails(tvb, offset, &asn1_ctx, tree, hf_e2ap_RICsubscriptionDetails_PDU); + offset += 7; offset >>= 3; + return offset; +} +static int dissect_RICaction_ToBeSetup_Item_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) { + int offset = 0; + asn1_ctx_t asn1_ctx; + asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo); + offset = dissect_e2ap_RICaction_ToBeSetup_Item(tvb, offset, &asn1_ctx, tree, hf_e2ap_RICaction_ToBeSetup_Item_PDU); + offset += 7; offset >>= 3; + return offset; +} +static int dissect_RICsubscriptionResponse_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) { + int offset = 0; + asn1_ctx_t asn1_ctx; + asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo); + offset = dissect_e2ap_RICsubscriptionResponse(tvb, offset, &asn1_ctx, tree, hf_e2ap_RICsubscriptionResponse_PDU); + offset += 7; offset >>= 3; + return offset; +} +static int dissect_RICaction_Admitted_List_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) { + int offset = 0; + asn1_ctx_t asn1_ctx; + asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo); + offset = dissect_e2ap_RICaction_Admitted_List(tvb, offset, &asn1_ctx, tree, hf_e2ap_RICaction_Admitted_List_PDU); + offset += 7; offset >>= 3; + return offset; +} +static int dissect_RICaction_Admitted_Item_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) { + int offset = 0; + asn1_ctx_t asn1_ctx; + asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo); + offset = dissect_e2ap_RICaction_Admitted_Item(tvb, offset, &asn1_ctx, tree, hf_e2ap_RICaction_Admitted_Item_PDU); + offset += 7; offset >>= 3; + return offset; +} +static int dissect_RICaction_NotAdmitted_List_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) { + int offset = 0; + asn1_ctx_t asn1_ctx; + asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo); + offset = dissect_e2ap_RICaction_NotAdmitted_List(tvb, offset, &asn1_ctx, tree, hf_e2ap_RICaction_NotAdmitted_List_PDU); + offset += 7; offset >>= 3; + return offset; +} +static int dissect_RICaction_NotAdmitted_Item_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) { + int offset = 0; + asn1_ctx_t asn1_ctx; + asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo); + offset = dissect_e2ap_RICaction_NotAdmitted_Item(tvb, offset, &asn1_ctx, tree, hf_e2ap_RICaction_NotAdmitted_Item_PDU); + offset += 7; offset >>= 3; + return offset; +} +static int dissect_RICsubscriptionFailure_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) { + int offset = 0; + asn1_ctx_t asn1_ctx; + asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo); + offset = dissect_e2ap_RICsubscriptionFailure(tvb, offset, &asn1_ctx, tree, hf_e2ap_RICsubscriptionFailure_PDU); + offset += 7; offset >>= 3; + return offset; +} +static int dissect_RICsubscriptionDeleteRequest_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) { + int offset = 0; + asn1_ctx_t asn1_ctx; + asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo); + offset = dissect_e2ap_RICsubscriptionDeleteRequest(tvb, offset, &asn1_ctx, tree, hf_e2ap_RICsubscriptionDeleteRequest_PDU); + offset += 7; offset >>= 3; + return offset; +} +static int dissect_RICsubscriptionDeleteResponse_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) { + int offset = 0; + asn1_ctx_t asn1_ctx; + asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo); + offset = dissect_e2ap_RICsubscriptionDeleteResponse(tvb, offset, &asn1_ctx, tree, hf_e2ap_RICsubscriptionDeleteResponse_PDU); + offset += 7; offset >>= 3; + return offset; +} +static int dissect_RICsubscriptionDeleteFailure_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) { + int offset = 0; + asn1_ctx_t asn1_ctx; + asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo); + offset = dissect_e2ap_RICsubscriptionDeleteFailure(tvb, offset, &asn1_ctx, tree, hf_e2ap_RICsubscriptionDeleteFailure_PDU); + offset += 7; offset >>= 3; + return offset; +} +static int dissect_RICindication_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) { + int offset = 0; + asn1_ctx_t asn1_ctx; + asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo); + offset = dissect_e2ap_RICindication(tvb, offset, &asn1_ctx, tree, hf_e2ap_RICindication_PDU); + offset += 7; offset >>= 3; + return offset; +} +static int dissect_RICcontrolRequest_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) { + int offset = 0; + asn1_ctx_t asn1_ctx; + asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo); + offset = dissect_e2ap_RICcontrolRequest(tvb, offset, &asn1_ctx, tree, hf_e2ap_RICcontrolRequest_PDU); + offset += 7; offset >>= 3; + return offset; +} +static int dissect_RICcontrolAcknowledge_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) { + int offset = 0; + asn1_ctx_t asn1_ctx; + asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo); + offset = dissect_e2ap_RICcontrolAcknowledge(tvb, offset, &asn1_ctx, tree, hf_e2ap_RICcontrolAcknowledge_PDU); + offset += 7; offset >>= 3; + return offset; +} +static int dissect_RICcontrolFailure_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) { + int offset = 0; + asn1_ctx_t asn1_ctx; + asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo); + offset = dissect_e2ap_RICcontrolFailure(tvb, offset, &asn1_ctx, tree, hf_e2ap_RICcontrolFailure_PDU); + offset += 7; offset >>= 3; + return offset; +} +static int dissect_ErrorIndication_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) { + int offset = 0; + asn1_ctx_t asn1_ctx; + asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo); + offset = dissect_e2ap_ErrorIndication(tvb, offset, &asn1_ctx, tree, hf_e2ap_ErrorIndication_PDU); + offset += 7; offset >>= 3; + return offset; +} +static int dissect_E2setupRequest_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) { + int offset = 0; + asn1_ctx_t asn1_ctx; + asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo); + offset = dissect_e2ap_E2setupRequest(tvb, offset, &asn1_ctx, tree, hf_e2ap_E2setupRequest_PDU); + offset += 7; offset >>= 3; + return offset; +} +static int dissect_E2setupResponse_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) { + int offset = 0; + asn1_ctx_t asn1_ctx; + asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo); + offset = dissect_e2ap_E2setupResponse(tvb, offset, &asn1_ctx, tree, hf_e2ap_E2setupResponse_PDU); + offset += 7; offset >>= 3; + return offset; +} +static int dissect_E2setupFailure_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) { + int offset = 0; + asn1_ctx_t asn1_ctx; + asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo); + offset = dissect_e2ap_E2setupFailure(tvb, offset, &asn1_ctx, tree, hf_e2ap_E2setupFailure_PDU); + offset += 7; offset >>= 3; + return offset; +} +static int dissect_ResetRequest_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) { + int offset = 0; + asn1_ctx_t asn1_ctx; + asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo); + offset = dissect_e2ap_ResetRequest(tvb, offset, &asn1_ctx, tree, hf_e2ap_ResetRequest_PDU); + offset += 7; offset >>= 3; + return offset; +} +static int dissect_ResetResponse_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) { + int offset = 0; + asn1_ctx_t asn1_ctx; + asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo); + offset = dissect_e2ap_ResetResponse(tvb, offset, &asn1_ctx, tree, hf_e2ap_ResetResponse_PDU); + offset += 7; offset >>= 3; + return offset; +} +static int dissect_RICserviceUpdate_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) { + int offset = 0; + asn1_ctx_t asn1_ctx; + asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo); + offset = dissect_e2ap_RICserviceUpdate(tvb, offset, &asn1_ctx, tree, hf_e2ap_RICserviceUpdate_PDU); + offset += 7; offset >>= 3; + return offset; +} +static int dissect_RANfunctions_List_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) { + int offset = 0; + asn1_ctx_t asn1_ctx; + asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo); + offset = dissect_e2ap_RANfunctions_List(tvb, offset, &asn1_ctx, tree, hf_e2ap_RANfunctions_List_PDU); + offset += 7; offset >>= 3; + return offset; +} +static int dissect_RANfunction_Item_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) { + int offset = 0; + asn1_ctx_t asn1_ctx; + asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo); + offset = dissect_e2ap_RANfunction_Item(tvb, offset, &asn1_ctx, tree, hf_e2ap_RANfunction_Item_PDU); + offset += 7; offset >>= 3; + return offset; +} +static int dissect_RANfunctionsID_List_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) { + int offset = 0; + asn1_ctx_t asn1_ctx; + asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo); + offset = dissect_e2ap_RANfunctionsID_List(tvb, offset, &asn1_ctx, tree, hf_e2ap_RANfunctionsID_List_PDU); + offset += 7; offset >>= 3; + return offset; +} +static int dissect_RANfunctionID_Item_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) { + int offset = 0; + asn1_ctx_t asn1_ctx; + asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo); + offset = dissect_e2ap_RANfunctionID_Item(tvb, offset, &asn1_ctx, tree, hf_e2ap_RANfunctionID_Item_PDU); + offset += 7; offset >>= 3; + return offset; +} +static int dissect_RICserviceUpdateAcknowledge_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) { + int offset = 0; + asn1_ctx_t asn1_ctx; + asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo); + offset = dissect_e2ap_RICserviceUpdateAcknowledge(tvb, offset, &asn1_ctx, tree, hf_e2ap_RICserviceUpdateAcknowledge_PDU); + offset += 7; offset >>= 3; + return offset; +} +static int dissect_RANfunctionsIDcause_List_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) { + int offset = 0; + asn1_ctx_t asn1_ctx; + asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo); + offset = dissect_e2ap_RANfunctionsIDcause_List(tvb, offset, &asn1_ctx, tree, hf_e2ap_RANfunctionsIDcause_List_PDU); + offset += 7; offset >>= 3; + return offset; +} +static int dissect_RANfunctionIDcause_Item_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) { + int offset = 0; + asn1_ctx_t asn1_ctx; + asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo); + offset = dissect_e2ap_RANfunctionIDcause_Item(tvb, offset, &asn1_ctx, tree, hf_e2ap_RANfunctionIDcause_Item_PDU); + offset += 7; offset >>= 3; + return offset; +} +static int dissect_RICserviceUpdateFailure_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) { + int offset = 0; + asn1_ctx_t asn1_ctx; + asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo); + offset = dissect_e2ap_RICserviceUpdateFailure(tvb, offset, &asn1_ctx, tree, hf_e2ap_RICserviceUpdateFailure_PDU); + offset += 7; offset >>= 3; + return offset; +} +static int dissect_RICserviceQuery_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) { + int offset = 0; + asn1_ctx_t asn1_ctx; + asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo); + offset = dissect_e2ap_RICserviceQuery(tvb, offset, &asn1_ctx, tree, hf_e2ap_RICserviceQuery_PDU); + offset += 7; offset >>= 3; + return offset; +} +static int dissect_E2AP_PDU_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) { + int offset = 0; + asn1_ctx_t asn1_ctx; + asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo); + offset = dissect_e2ap_E2AP_PDU(tvb, offset, &asn1_ctx, tree, hf_e2ap_E2AP_PDU_PDU); + offset += 7; offset >>= 3; + return offset; +} +static int dissect_E2SM_KPM_EventTriggerDefinition_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) { + int offset = 0; + asn1_ctx_t asn1_ctx; + asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo); + offset = dissect_e2ap_E2SM_KPM_EventTriggerDefinition(tvb, offset, &asn1_ctx, tree, hf_e2ap_E2SM_KPM_EventTriggerDefinition_PDU); + offset += 7; offset >>= 3; + return offset; +} +static int dissect_E2SM_KPM_ActionDefinition_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) { + int offset = 0; + asn1_ctx_t asn1_ctx; + asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo); + offset = dissect_e2ap_E2SM_KPM_ActionDefinition(tvb, offset, &asn1_ctx, tree, hf_e2ap_E2SM_KPM_ActionDefinition_PDU); + offset += 7; offset >>= 3; + return offset; +} +static int dissect_E2SM_KPM_IndicationHeader_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) { + int offset = 0; + asn1_ctx_t asn1_ctx; + asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo); + offset = dissect_e2ap_E2SM_KPM_IndicationHeader(tvb, offset, &asn1_ctx, tree, hf_e2ap_E2SM_KPM_IndicationHeader_PDU); + offset += 7; offset >>= 3; + return offset; +} +static int dissect_E2SM_KPM_IndicationMessage_Format1_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) { + int offset = 0; + asn1_ctx_t asn1_ctx; + asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo); + offset = dissect_e2ap_E2SM_KPM_IndicationMessage_Format1(tvb, offset, &asn1_ctx, tree, hf_e2ap_E2SM_KPM_IndicationMessage_Format1_PDU); + offset += 7; offset >>= 3; + return offset; +} +static int dissect_E2SM_KPM_RANfunction_Description_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) { + int offset = 0; + asn1_ctx_t asn1_ctx; + asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo); + offset = dissect_e2ap_E2SM_KPM_RANfunction_Description(tvb, offset, &asn1_ctx, tree, hf_e2ap_E2SM_KPM_RANfunction_Description_PDU); + offset += 7; offset >>= 3; + return offset; +} +static int dissect_RANcallProcess_ID_string_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) { + int offset = 0; + asn1_ctx_t asn1_ctx; + asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo); + offset = dissect_e2ap_RANcallProcess_ID_string(tvb, offset, &asn1_ctx, tree, hf_e2ap_RANcallProcess_ID_string_PDU); + offset += 7; offset >>= 3; + return offset; +} + + +/*--- End of included file: packet-e2ap-fn.c ---*/ +#line 121 "./asn1/e2ap/packet-e2ap-template.c" + +static int dissect_ProtocolIEFieldValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_) +{ + e2ap_ctx_t e2ap_ctx; + struct e2ap_private_data *e2ap_data = e2ap_get_private_data(pinfo); + + e2ap_ctx.message_type = e2ap_data->message_type; + e2ap_ctx.ProcedureCode = e2ap_data->procedure_code; + e2ap_ctx.ProtocolIE_ID = e2ap_data->protocol_ie_id; + e2ap_ctx.ProtocolExtensionID = e2ap_data->protocol_extension_id; + + return (dissector_try_uint_new(e2ap_ies_dissector_table, e2ap_data->protocol_ie_id, tvb, pinfo, tree, FALSE, &e2ap_ctx)) ? tvb_captured_length(tvb) : 0; +} +/* Currently not used +static int dissect_ProtocolIEFieldPairFirstValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) +{ + struct e2ap_private_data *e2ap_data = e2ap_get_private_data(pinfo); + + return (dissector_try_uint(e2ap_ies_p1_dissector_table, e2ap_data->protocol_ie_id, tvb, pinfo, tree)) ? tvb_captured_length(tvb) : 0; +} + +static int dissect_ProtocolIEFieldPairSecondValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) +{ + struct e2ap_private_data *e2ap_data = e2ap_get_private_data(pinfo); + + return (dissector_try_uint(e2ap_ies_p2_dissector_table, e2ap_data->protocol_ie_id, tvb, pinfo, tree)) ? tvb_captured_length(tvb) : 0; +} +*/ + + +static int dissect_InitiatingMessageValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data) +{ + struct e2ap_private_data *e2ap_data = e2ap_get_private_data(pinfo); + + return (dissector_try_uint_new(e2ap_proc_imsg_dissector_table, e2ap_data->procedure_code, tvb, pinfo, tree, TRUE, data)) ? tvb_captured_length(tvb) : 0; +} + +static int dissect_SuccessfulOutcomeValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data) +{ + struct e2ap_private_data *e2ap_data = e2ap_get_private_data(pinfo); + + return (dissector_try_uint_new(e2ap_proc_sout_dissector_table, e2ap_data->procedure_code, tvb, pinfo, tree, TRUE, data)) ? tvb_captured_length(tvb) : 0; +} + +static int dissect_UnsuccessfulOutcomeValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data) +{ + struct e2ap_private_data *e2ap_data = e2ap_get_private_data(pinfo); + + return (dissector_try_uint_new(e2ap_proc_uout_dissector_table, e2ap_data->procedure_code, tvb, pinfo, tree, TRUE, data)) ? tvb_captured_length(tvb) : 0; +} + + +static int +dissect_e2ap(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_) +{ + proto_item *e2ap_item = NULL; + proto_tree *e2ap_tree = NULL; + + /* make entry in the Protocol column on summary display */ + col_set_str(pinfo->cinfo, COL_PROTOCOL, "E2AP"); + /* ensure that parent dissector is not e2ap before clearing fence */ + col_clear(pinfo->cinfo, COL_INFO); + + /* create the e2ap protocol tree */ + e2ap_item = proto_tree_add_item(tree, proto_e2ap, tvb, 0, -1, ENC_NA); + e2ap_tree = proto_item_add_subtree(e2ap_item, ett_e2ap); + + + return dissect_E2AP_PDU_PDU(tvb, pinfo, e2ap_tree, NULL); +} + + +/*--- proto_reg_handoff_e2ap ---------------------------------------*/ +void +proto_reg_handoff_e2ap(void) +{ + static gboolean Initialized=FALSE; + static guint SctpPort; + + if (!Initialized) { + dissector_add_for_decode_as("sctp.port", e2ap_handle); +#if 0 + /* TODO: should one or more of these be registered? */ + dissector_add_uint("sctp.ppi", E2_CP_PROTOCOL_ID, e2ap_handle); + dissector_add_uint("sctp.ppi", E2_UP_PROTOCOL_ID, e2ap_handle); + dissector_add_uint("sctp.ppi", E2_DU_PROTOCOL_ID, e2ap_handle); +#endif + + Initialized=TRUE; + +/*--- Included file: packet-e2ap-dis-tab.c ---*/ +#line 1 "./asn1/e2ap/packet-e2ap-dis-tab.c" + dissector_add_uint("e2ap.ies", id_Cause, create_dissector_handle(dissect_Cause_PDU, proto_e2ap)); + dissector_add_uint("e2ap.ies", id_CriticalityDiagnostics, create_dissector_handle(dissect_CriticalityDiagnostics_PDU, proto_e2ap)); + dissector_add_uint("e2ap.ies", id_GlobalE2node_ID, create_dissector_handle(dissect_GlobalE2node_ID_PDU, proto_e2ap)); + dissector_add_uint("e2ap.ies", id_GlobalRIC_ID, create_dissector_handle(dissect_GlobalRIC_ID_PDU, proto_e2ap)); + dissector_add_uint("e2ap.ies", id_RANfunctionID, create_dissector_handle(dissect_RANfunctionID_PDU, proto_e2ap)); + dissector_add_uint("e2ap.ies", id_RANfunctionID_Item, create_dissector_handle(dissect_RANfunctionID_Item_PDU, proto_e2ap)); + dissector_add_uint("e2ap.ies", id_RANfunctionIEcause_Item, create_dissector_handle(dissect_RANfunctionIDcause_Item_PDU, proto_e2ap)); + dissector_add_uint("e2ap.ies", id_RANfunction_Item, create_dissector_handle(dissect_RANfunction_Item_PDU, proto_e2ap)); + dissector_add_uint("e2ap.ies", id_RANfunctionsAccepted, create_dissector_handle(dissect_RANfunctionsID_List_PDU, proto_e2ap)); + dissector_add_uint("e2ap.ies", id_RANfunctionsAdded, create_dissector_handle(dissect_RANfunctions_List_PDU, proto_e2ap)); + dissector_add_uint("e2ap.ies", id_RANfunctionsDeleted, create_dissector_handle(dissect_RANfunctionsID_List_PDU, proto_e2ap)); + dissector_add_uint("e2ap.ies", id_RANfunctionsModified, create_dissector_handle(dissect_RANfunctions_List_PDU, proto_e2ap)); + dissector_add_uint("e2ap.ies", id_RANfunctionsRejected, create_dissector_handle(dissect_RANfunctionsIDcause_List_PDU, proto_e2ap)); + dissector_add_uint("e2ap.ies", id_RICaction_Admitted_Item, create_dissector_handle(dissect_RICaction_Admitted_Item_PDU, proto_e2ap)); + dissector_add_uint("e2ap.ies", id_RICactionID, create_dissector_handle(dissect_RICactionID_PDU, proto_e2ap)); + dissector_add_uint("e2ap.ies", id_RICaction_NotAdmitted_Item, create_dissector_handle(dissect_RICaction_NotAdmitted_Item_PDU, proto_e2ap)); + dissector_add_uint("e2ap.ies", id_RICactions_Admitted, create_dissector_handle(dissect_RICaction_Admitted_List_PDU, proto_e2ap)); + dissector_add_uint("e2ap.ies", id_RICaction_ToBeSetup_Item, create_dissector_handle(dissect_RICaction_ToBeSetup_Item_PDU, proto_e2ap)); + dissector_add_uint("e2ap.ies", id_RICcallProcessID, create_dissector_handle(dissect_RICcallProcessID_PDU, proto_e2ap)); + dissector_add_uint("e2ap.ies", id_RICactions_NotAdmitted, create_dissector_handle(dissect_RICaction_NotAdmitted_List_PDU, proto_e2ap)); + dissector_add_uint("e2ap.ies", id_RICcontrolAckRequest, create_dissector_handle(dissect_RICcontrolAckRequest_PDU, proto_e2ap)); + dissector_add_uint("e2ap.ies", id_RICcontrolHeader, create_dissector_handle(dissect_RICcontrolHeader_PDU, proto_e2ap)); + dissector_add_uint("e2ap.ies", id_RICcontrolMessage, create_dissector_handle(dissect_RICcontrolMessage_PDU, proto_e2ap)); + dissector_add_uint("e2ap.ies", id_RICcontrolOutcome, create_dissector_handle(dissect_RICcontrolOutcome_PDU, proto_e2ap)); + dissector_add_uint("e2ap.ies", id_RICcontrolStatus, create_dissector_handle(dissect_RICcontrolStatus_PDU, proto_e2ap)); + dissector_add_uint("e2ap.ies", id_RICindicationHeader, create_dissector_handle(dissect_RICindicationHeader_PDU, proto_e2ap)); + dissector_add_uint("e2ap.ies", id_RICindicationMessage, create_dissector_handle(dissect_RICindicationMessage_PDU, proto_e2ap)); + dissector_add_uint("e2ap.ies", id_RICindicationSN, create_dissector_handle(dissect_RICindicationSN_PDU, proto_e2ap)); + dissector_add_uint("e2ap.ies", id_RICindicationType, create_dissector_handle(dissect_RICindicationType_PDU, proto_e2ap)); + dissector_add_uint("e2ap.ies", id_RICrequestID, create_dissector_handle(dissect_RICrequestID_PDU, proto_e2ap)); + dissector_add_uint("e2ap.ies", id_RICsubscriptionDetails, create_dissector_handle(dissect_RICsubscriptionDetails_PDU, proto_e2ap)); + dissector_add_uint("e2ap.ies", id_TimeToWait, create_dissector_handle(dissect_TimeToWait_PDU, proto_e2ap)); + dissector_add_uint("e2ap.proc.uout", id_E2setup, create_dissector_handle(dissect_E2setupFailure_PDU, proto_e2ap)); + dissector_add_uint("e2ap.proc.imsg", id_E2setup, create_dissector_handle(dissect_E2setupRequest_PDU, proto_e2ap)); + dissector_add_uint("e2ap.proc.sout", id_E2setup, create_dissector_handle(dissect_E2setupResponse_PDU, proto_e2ap)); + dissector_add_uint("e2ap.proc.imsg", id_ErrorIndication, create_dissector_handle(dissect_ErrorIndication_PDU, proto_e2ap)); + dissector_add_uint("e2ap.proc.imsg", id_Reset, create_dissector_handle(dissect_ResetRequest_PDU, proto_e2ap)); + dissector_add_uint("e2ap.proc.sout", id_Reset, create_dissector_handle(dissect_ResetResponse_PDU, proto_e2ap)); + dissector_add_uint("e2ap.proc.sout", id_RICcontrol, create_dissector_handle(dissect_RICcontrolAcknowledge_PDU, proto_e2ap)); + dissector_add_uint("e2ap.proc.uout", id_RICcontrol, create_dissector_handle(dissect_RICcontrolFailure_PDU, proto_e2ap)); + dissector_add_uint("e2ap.proc.imsg", id_RICcontrol, create_dissector_handle(dissect_RICcontrolRequest_PDU, proto_e2ap)); + dissector_add_uint("e2ap.proc.imsg", id_RICindication, create_dissector_handle(dissect_RICindication_PDU, proto_e2ap)); + dissector_add_uint("e2ap.proc.imsg", id_RICserviceQuery, create_dissector_handle(dissect_RICserviceQuery_PDU, proto_e2ap)); + dissector_add_uint("e2ap.proc.imsg", id_RICserviceUpdate, create_dissector_handle(dissect_RICserviceUpdate_PDU, proto_e2ap)); + dissector_add_uint("e2ap.proc.sout", id_RICserviceUpdate, create_dissector_handle(dissect_RICserviceUpdateAcknowledge_PDU, proto_e2ap)); + dissector_add_uint("e2ap.proc.uout", id_RICserviceUpdate, create_dissector_handle(dissect_RICserviceUpdateFailure_PDU, proto_e2ap)); + dissector_add_uint("e2ap.proc.uout", id_RICsubscription, create_dissector_handle(dissect_RICsubscriptionFailure_PDU, proto_e2ap)); + dissector_add_uint("e2ap.proc.imsg", id_RICsubscription, create_dissector_handle(dissect_RICsubscriptionRequest_PDU, proto_e2ap)); + dissector_add_uint("e2ap.proc.sout", id_RICsubscription, create_dissector_handle(dissect_RICsubscriptionResponse_PDU, proto_e2ap)); + dissector_add_uint("e2ap.proc.uout", id_RICsubscriptionDelete, create_dissector_handle(dissect_RICsubscriptionDeleteFailure_PDU, proto_e2ap)); + dissector_add_uint("e2ap.proc.imsg", id_RICsubscriptionDelete, create_dissector_handle(dissect_RICsubscriptionDeleteRequest_PDU, proto_e2ap)); + dissector_add_uint("e2ap.proc.sout", id_RICsubscriptionDelete, create_dissector_handle(dissect_RICsubscriptionDeleteResponse_PDU, proto_e2ap)); + + +/*--- End of included file: packet-e2ap-dis-tab.c ---*/ +#line 211 "./asn1/e2ap/packet-e2ap-template.c" + + } else { + if (SctpPort != 0) { + dissector_delete_uint("sctp.port", SctpPort, e2ap_handle); + } + } + + SctpPort=gbl_e2apSctpPort; + if (SctpPort != 0) { + dissector_add_uint("sctp.port", SctpPort, e2ap_handle); + } +} + +/*--- proto_register_e2ap -------------------------------------------*/ +void proto_register_e2ap(void) { + + /* List of fields */ + + static hf_register_info hf[] = { + +/*--- Included file: packet-e2ap-hfarr.c ---*/ +#line 1 "./asn1/e2ap/packet-e2ap-hfarr.c" + { &hf_e2ap_Cause_PDU, + { "Cause", "e2ap.Cause", + FT_UINT32, BASE_DEC, VALS(e2ap_Cause_vals), 0, + NULL, HFILL }}, + { &hf_e2ap_CriticalityDiagnostics_PDU, + { "CriticalityDiagnostics", "e2ap.CriticalityDiagnostics_element", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_e2ap_GlobalE2node_ID_PDU, + { "GlobalE2node-ID", "e2ap.GlobalE2node_ID", + FT_UINT32, BASE_DEC, VALS(e2ap_GlobalE2node_ID_vals), 0, + NULL, HFILL }}, + { &hf_e2ap_GlobalRIC_ID_PDU, + { "GlobalRIC-ID", "e2ap.GlobalRIC_ID_element", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_e2ap_RANfunctionID_PDU, + { "RANfunctionID", "e2ap.RANfunctionID", + FT_UINT32, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_e2ap_RICactionID_PDU, + { "RICactionID", "e2ap.RICactionID", + FT_UINT32, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_e2ap_RICcallProcessID_PDU, + { "RICcallProcessID", "e2ap.RICcallProcessID", + FT_BYTES, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_e2ap_RICcontrolAckRequest_PDU, + { "RICcontrolAckRequest", "e2ap.RICcontrolAckRequest", + FT_UINT32, BASE_DEC, VALS(e2ap_RICcontrolAckRequest_vals), 0, + NULL, HFILL }}, + { &hf_e2ap_RICcontrolHeader_PDU, + { "RICcontrolHeader", "e2ap.RICcontrolHeader", + FT_BYTES, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_e2ap_RICcontrolMessage_PDU, + { "RICcontrolMessage", "e2ap.RICcontrolMessage", + FT_BYTES, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_e2ap_RICcontrolOutcome_PDU, + { "RICcontrolOutcome", "e2ap.RICcontrolOutcome", + FT_BYTES, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_e2ap_RICcontrolStatus_PDU, + { "RICcontrolStatus", "e2ap.RICcontrolStatus", + FT_UINT32, BASE_DEC, VALS(e2ap_RICcontrolStatus_vals), 0, + NULL, HFILL }}, + { &hf_e2ap_RICindicationHeader_PDU, + { "RICindicationHeader", "e2ap.RICindicationHeader", + FT_BYTES, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_e2ap_RICindicationMessage_PDU, + { "RICindicationMessage", "e2ap.RICindicationMessage", + FT_BYTES, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_e2ap_RICindicationSN_PDU, + { "RICindicationSN", "e2ap.RICindicationSN", + FT_UINT32, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_e2ap_RICindicationType_PDU, + { "RICindicationType", "e2ap.RICindicationType", + FT_UINT32, BASE_DEC, VALS(e2ap_RICindicationType_vals), 0, + NULL, HFILL }}, + { &hf_e2ap_RICrequestID_PDU, + { "RICrequestID", "e2ap.RICrequestID_element", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_e2ap_TimeToWait_PDU, + { "TimeToWait", "e2ap.TimeToWait", + FT_UINT32, BASE_DEC, VALS(e2ap_TimeToWait_vals), 0, + NULL, HFILL }}, + { &hf_e2ap_RICsubscriptionRequest_PDU, + { "RICsubscriptionRequest", "e2ap.RICsubscriptionRequest_element", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_e2ap_RICsubscriptionDetails_PDU, + { "RICsubscriptionDetails", "e2ap.RICsubscriptionDetails_element", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_e2ap_RICaction_ToBeSetup_Item_PDU, + { "RICaction-ToBeSetup-Item", "e2ap.RICaction_ToBeSetup_Item_element", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_e2ap_RICsubscriptionResponse_PDU, + { "RICsubscriptionResponse", "e2ap.RICsubscriptionResponse_element", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_e2ap_RICaction_Admitted_List_PDU, + { "RICaction-Admitted-List", "e2ap.RICaction_Admitted_List", + FT_UINT32, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_e2ap_RICaction_Admitted_Item_PDU, + { "RICaction-Admitted-Item", "e2ap.RICaction_Admitted_Item_element", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_e2ap_RICaction_NotAdmitted_List_PDU, + { "RICaction-NotAdmitted-List", "e2ap.RICaction_NotAdmitted_List", + FT_UINT32, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_e2ap_RICaction_NotAdmitted_Item_PDU, + { "RICaction-NotAdmitted-Item", "e2ap.RICaction_NotAdmitted_Item_element", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_e2ap_RICsubscriptionFailure_PDU, + { "RICsubscriptionFailure", "e2ap.RICsubscriptionFailure_element", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_e2ap_RICsubscriptionDeleteRequest_PDU, + { "RICsubscriptionDeleteRequest", "e2ap.RICsubscriptionDeleteRequest_element", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_e2ap_RICsubscriptionDeleteResponse_PDU, + { "RICsubscriptionDeleteResponse", "e2ap.RICsubscriptionDeleteResponse_element", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_e2ap_RICsubscriptionDeleteFailure_PDU, + { "RICsubscriptionDeleteFailure", "e2ap.RICsubscriptionDeleteFailure_element", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_e2ap_RICindication_PDU, + { "RICindication", "e2ap.RICindication_element", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_e2ap_RICcontrolRequest_PDU, + { "RICcontrolRequest", "e2ap.RICcontrolRequest_element", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_e2ap_RICcontrolAcknowledge_PDU, + { "RICcontrolAcknowledge", "e2ap.RICcontrolAcknowledge_element", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_e2ap_RICcontrolFailure_PDU, + { "RICcontrolFailure", "e2ap.RICcontrolFailure_element", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_e2ap_ErrorIndication_PDU, + { "ErrorIndication", "e2ap.ErrorIndication_element", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_e2ap_E2setupRequest_PDU, + { "E2setupRequest", "e2ap.E2setupRequest_element", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_e2ap_E2setupResponse_PDU, + { "E2setupResponse", "e2ap.E2setupResponse_element", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_e2ap_E2setupFailure_PDU, + { "E2setupFailure", "e2ap.E2setupFailure_element", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_e2ap_ResetRequest_PDU, + { "ResetRequest", "e2ap.ResetRequest_element", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_e2ap_ResetResponse_PDU, + { "ResetResponse", "e2ap.ResetResponse_element", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_e2ap_RICserviceUpdate_PDU, + { "RICserviceUpdate", "e2ap.RICserviceUpdate_element", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_e2ap_RANfunctions_List_PDU, + { "RANfunctions-List", "e2ap.RANfunctions_List", + FT_UINT32, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_e2ap_RANfunction_Item_PDU, + { "RANfunction-Item", "e2ap.RANfunction_Item_element", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_e2ap_RANfunctionsID_List_PDU, + { "RANfunctionsID-List", "e2ap.RANfunctionsID_List", + FT_UINT32, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_e2ap_RANfunctionID_Item_PDU, + { "RANfunctionID-Item", "e2ap.RANfunctionID_Item_element", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_e2ap_RICserviceUpdateAcknowledge_PDU, + { "RICserviceUpdateAcknowledge", "e2ap.RICserviceUpdateAcknowledge_element", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_e2ap_RANfunctionsIDcause_List_PDU, + { "RANfunctionsIDcause-List", "e2ap.RANfunctionsIDcause_List", + FT_UINT32, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_e2ap_RANfunctionIDcause_Item_PDU, + { "RANfunctionIDcause-Item", "e2ap.RANfunctionIDcause_Item_element", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_e2ap_RICserviceUpdateFailure_PDU, + { "RICserviceUpdateFailure", "e2ap.RICserviceUpdateFailure_element", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_e2ap_RICserviceQuery_PDU, + { "RICserviceQuery", "e2ap.RICserviceQuery_element", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_e2ap_E2AP_PDU_PDU, + { "E2AP-PDU", "e2ap.E2AP_PDU", + FT_UINT32, BASE_DEC, VALS(e2ap_E2AP_PDU_vals), 0, + NULL, HFILL }}, + { &hf_e2ap_E2SM_KPM_EventTriggerDefinition_PDU, + { "E2SM-KPM-EventTriggerDefinition", "e2ap.E2SM_KPM_EventTriggerDefinition", + FT_UINT32, BASE_DEC, VALS(e2ap_E2SM_KPM_EventTriggerDefinition_vals), 0, + NULL, HFILL }}, + { &hf_e2ap_E2SM_KPM_ActionDefinition_PDU, + { "E2SM-KPM-ActionDefinition", "e2ap.E2SM_KPM_ActionDefinition_element", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_e2ap_E2SM_KPM_IndicationHeader_PDU, + { "E2SM-KPM-IndicationHeader", "e2ap.E2SM_KPM_IndicationHeader", + FT_UINT32, BASE_DEC, VALS(e2ap_E2SM_KPM_IndicationHeader_vals), 0, + NULL, HFILL }}, + { &hf_e2ap_E2SM_KPM_IndicationMessage_Format1_PDU, + { "E2SM-KPM-IndicationMessage-Format1", "e2ap.E2SM_KPM_IndicationMessage_Format1_element", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_e2ap_E2SM_KPM_RANfunction_Description_PDU, + { "E2SM-KPM-RANfunction-Description", "e2ap.E2SM_KPM_RANfunction_Description_element", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_e2ap_RANcallProcess_ID_string_PDU, + { "RANcallProcess-ID-string", "e2ap.RANcallProcess_ID_string", + FT_STRING, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_e2ap_ProtocolIE_Container_item, + { "ProtocolIE-Field", "e2ap.ProtocolIE_Field_element", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_e2ap_id, + { "id", "e2ap.id", + FT_UINT32, BASE_DEC|BASE_EXT_STRING, &e2ap_ProtocolIE_ID_vals_ext, 0, + "ProtocolIE_ID", HFILL }}, + { &hf_e2ap_criticality, + { "criticality", "e2ap.criticality", + FT_UINT32, BASE_DEC, VALS(e2ap_Criticality_vals), 0, + NULL, HFILL }}, + { &hf_e2ap_value, + { "value", "e2ap.value_element", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_e2ap_ricRequest, + { "ricRequest", "e2ap.ricRequest", + FT_UINT32, BASE_DEC, VALS(e2ap_CauseRIC_vals), 0, + "CauseRIC", HFILL }}, + { &hf_e2ap_ricService, + { "ricService", "e2ap.ricService", + FT_UINT32, BASE_DEC, VALS(e2ap_CauseRICservice_vals), 0, + "CauseRICservice", HFILL }}, + { &hf_e2ap_transport, + { "transport", "e2ap.transport", + FT_UINT32, BASE_DEC, VALS(e2ap_CauseTransport_vals), 0, + "CauseTransport", HFILL }}, + { &hf_e2ap_protocol, + { "protocol", "e2ap.protocol", + FT_UINT32, BASE_DEC, VALS(e2ap_CauseProtocol_vals), 0, + "CauseProtocol", HFILL }}, + { &hf_e2ap_misc, + { "misc", "e2ap.misc", + FT_UINT32, BASE_DEC, VALS(e2ap_CauseMisc_vals), 0, + "CauseMisc", HFILL }}, + { &hf_e2ap_procedureCode, + { "procedureCode", "e2ap.procedureCode", + FT_UINT32, BASE_DEC|BASE_EXT_STRING, &e2ap_ProcedureCode_vals_ext, 0, + NULL, HFILL }}, + { &hf_e2ap_triggeringMessage, + { "triggeringMessage", "e2ap.triggeringMessage", + FT_UINT32, BASE_DEC, VALS(e2ap_TriggeringMessage_vals), 0, + NULL, HFILL }}, + { &hf_e2ap_procedureCriticality, + { "procedureCriticality", "e2ap.procedureCriticality", + FT_UINT32, BASE_DEC, VALS(e2ap_Criticality_vals), 0, + "Criticality", HFILL }}, + { &hf_e2ap_ricRequestorID, + { "ricRequestorID", "e2ap.ricRequestorID_element", + FT_NONE, BASE_NONE, NULL, 0, + "RICrequestID", HFILL }}, + { &hf_e2ap_iEsCriticalityDiagnostics, + { "iEsCriticalityDiagnostics", "e2ap.iEsCriticalityDiagnostics", + FT_UINT32, BASE_DEC, NULL, 0, + "CriticalityDiagnostics_IE_List", HFILL }}, + { &hf_e2ap_CriticalityDiagnostics_IE_List_item, + { "CriticalityDiagnostics-IE-Item", "e2ap.CriticalityDiagnostics_IE_Item_element", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_e2ap_iECriticality, + { "iECriticality", "e2ap.iECriticality", + FT_UINT32, BASE_DEC, VALS(e2ap_Criticality_vals), 0, + "Criticality", HFILL }}, + { &hf_e2ap_iE_ID, + { "iE-ID", "e2ap.iE_ID", + FT_UINT32, BASE_DEC|BASE_EXT_STRING, &e2ap_ProtocolIE_ID_vals_ext, 0, + "ProtocolIE_ID", HFILL }}, + { &hf_e2ap_typeOfError, + { "typeOfError", "e2ap.typeOfError", + FT_UINT32, BASE_DEC, VALS(e2ap_TypeOfError_vals), 0, + NULL, HFILL }}, + { &hf_e2ap_macro_eNB_ID, + { "macro-eNB-ID", "e2ap.macro_eNB_ID", + FT_BYTES, BASE_NONE, NULL, 0, + "BIT_STRING_SIZE_20", HFILL }}, + { &hf_e2ap_home_eNB_ID, + { "home-eNB-ID", "e2ap.home_eNB_ID", + FT_BYTES, BASE_NONE, NULL, 0, + "BIT_STRING_SIZE_28", HFILL }}, + { &hf_e2ap_short_Macro_eNB_ID, + { "short-Macro-eNB-ID", "e2ap.short_Macro_eNB_ID", + FT_BYTES, BASE_NONE, NULL, 0, + "BIT_STRING_SIZE_18", HFILL }}, + { &hf_e2ap_long_Macro_eNB_ID, + { "long-Macro-eNB-ID", "e2ap.long_Macro_eNB_ID", + FT_BYTES, BASE_NONE, NULL, 0, + "BIT_STRING_SIZE_21", HFILL }}, + { &hf_e2ap_enb_ID_macro, + { "enb-ID-macro", "e2ap.enb_ID_macro", + FT_BYTES, BASE_NONE, NULL, 0, + "BIT_STRING_SIZE_20", HFILL }}, + { &hf_e2ap_enb_ID_shortmacro, + { "enb-ID-shortmacro", "e2ap.enb_ID_shortmacro", + FT_BYTES, BASE_NONE, NULL, 0, + "BIT_STRING_SIZE_18", HFILL }}, + { &hf_e2ap_enb_ID_longmacro, + { "enb-ID-longmacro", "e2ap.enb_ID_longmacro", + FT_BYTES, BASE_NONE, NULL, 0, + "BIT_STRING_SIZE_21", HFILL }}, + { &hf_e2ap_gNB_ID, + { "gNB-ID", "e2ap.gNB_ID", + FT_BYTES, BASE_NONE, NULL, 0, + "BIT_STRING_SIZE_22_32", HFILL }}, + { &hf_e2ap_gNB, + { "gNB", "e2ap.gNB_element", + FT_NONE, BASE_NONE, NULL, 0, + "GlobalE2node_gNB_ID", HFILL }}, + { &hf_e2ap_en_gNB, + { "en-gNB", "e2ap.en_gNB_element", + FT_NONE, BASE_NONE, NULL, 0, + "GlobalE2node_en_gNB_ID", HFILL }}, + { &hf_e2ap_ng_eNB, + { "ng-eNB", "e2ap.ng_eNB_element", + FT_NONE, BASE_NONE, NULL, 0, + "GlobalE2node_ng_eNB_ID", HFILL }}, + { &hf_e2ap_eNB, + { "eNB", "e2ap.eNB_element", + FT_NONE, BASE_NONE, NULL, 0, + "GlobalE2node_eNB_ID", HFILL }}, + { &hf_e2ap_global_gNB_ID, + { "global-gNB-ID", "e2ap.global_gNB_ID_element", + FT_NONE, BASE_NONE, NULL, 0, + "GlobalenGNB_ID", HFILL }}, + { &hf_e2ap_global_eNB_ID, + { "global-eNB-ID", "e2ap.global_eNB_ID_element", + FT_NONE, BASE_NONE, NULL, 0, + "GlobalENB_ID", HFILL }}, + { &hf_e2ap_global_gNB_ID_01, + { "global-gNB-ID", "e2ap.global_gNB_ID_element", + FT_NONE, BASE_NONE, NULL, 0, + "GlobalgNB_ID", HFILL }}, + { &hf_e2ap_gNB_CU_UP_ID, + { "gNB-CU-UP-ID", "e2ap.gNB_CU_UP_ID", + FT_UINT64, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_e2ap_gNB_DU_ID, + { "gNB-DU-ID", "e2ap.gNB_DU_ID", + FT_UINT64, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_e2ap_global_ng_eNB_ID, + { "global-ng-eNB-ID", "e2ap.global_ng_eNB_ID_element", + FT_NONE, BASE_NONE, NULL, 0, + "GlobalngeNB_ID", HFILL }}, + { &hf_e2ap_pLMN_Identity, + { "pLMN-Identity", "e2ap.pLMN_Identity", + FT_BYTES, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_e2ap_eNB_ID, + { "eNB-ID", "e2ap.eNB_ID", + FT_UINT32, BASE_DEC, VALS(e2ap_ENB_ID_vals), 0, + NULL, HFILL }}, + { &hf_e2ap_gNB_ID_01, + { "gNB-ID", "e2ap.gNB_ID", + FT_UINT32, BASE_DEC, VALS(e2ap_ENGNB_ID_vals), 0, + "ENGNB_ID", HFILL }}, + { &hf_e2ap_plmn_id, + { "plmn-id", "e2ap.plmn_id", + FT_BYTES, BASE_NONE, NULL, 0, + "PLMN_Identity", HFILL }}, + { &hf_e2ap_gnb_id, + { "gnb-id", "e2ap.gnb_id", + FT_UINT32, BASE_DEC, VALS(e2ap_GNB_ID_Choice_vals), 0, + "GNB_ID_Choice", HFILL }}, + { &hf_e2ap_enb_id, + { "enb-id", "e2ap.enb_id", + FT_UINT32, BASE_DEC, VALS(e2ap_ENB_ID_Choice_vals), 0, + "ENB_ID_Choice", HFILL }}, + { &hf_e2ap_ric_ID, + { "ric-ID", "e2ap.ric_ID", + FT_BYTES, BASE_NONE, NULL, 0, + "BIT_STRING_SIZE_20", HFILL }}, + { &hf_e2ap_gnb_ID, + { "gnb-ID", "e2ap.gnb_ID", + FT_BYTES, BASE_NONE, NULL, 0, + "BIT_STRING_SIZE_22_32", HFILL }}, + { &hf_e2ap_ricRequestorID_01, + { "ricRequestorID", "e2ap.ricRequestorID", + FT_UINT32, BASE_DEC, NULL, 0, + "INTEGER_0_65535", HFILL }}, + { &hf_e2ap_ricInstanceID, + { "ricInstanceID", "e2ap.ricInstanceID", + FT_UINT32, BASE_DEC, NULL, 0, + "INTEGER_0_65535", HFILL }}, + { &hf_e2ap_ricSubsequentActionType, + { "ricSubsequentActionType", "e2ap.ricSubsequentActionType", + FT_UINT32, BASE_DEC, VALS(e2ap_RICsubsequentActionType_vals), 0, + NULL, HFILL }}, + { &hf_e2ap_ricTimeToWait, + { "ricTimeToWait", "e2ap.ricTimeToWait", + FT_UINT32, BASE_DEC, VALS(e2ap_RICtimeToWait_vals), 0, + NULL, HFILL }}, + { &hf_e2ap_protocolIEs, + { "protocolIEs", "e2ap.protocolIEs", + FT_UINT32, BASE_DEC, NULL, 0, + "ProtocolIE_Container", HFILL }}, + { &hf_e2ap_ricEventTriggerDefinition, + { "ricEventTriggerDefinition", "e2ap.ricEventTriggerDefinition", + FT_BYTES, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_e2ap_ricAction_ToBeSetup_List, + { "ricAction-ToBeSetup-List", "e2ap.ricAction_ToBeSetup_List", + FT_UINT32, BASE_DEC, NULL, 0, + "RICactions_ToBeSetup_List", HFILL }}, + { &hf_e2ap_RICactions_ToBeSetup_List_item, + { "ProtocolIE-SingleContainer", "e2ap.ProtocolIE_SingleContainer_element", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_e2ap_ricActionID, + { "ricActionID", "e2ap.ricActionID", + FT_UINT32, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_e2ap_ricActionType, + { "ricActionType", "e2ap.ricActionType", + FT_UINT32, BASE_DEC, VALS(e2ap_RICactionType_vals), 0, + NULL, HFILL }}, + { &hf_e2ap_ricActionDefinition, + { "ricActionDefinition", "e2ap.ricActionDefinition", + FT_BYTES, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_e2ap_ricSubsequentAction, + { "ricSubsequentAction", "e2ap.ricSubsequentAction_element", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_e2ap_RICaction_Admitted_List_item, + { "ProtocolIE-SingleContainer", "e2ap.ProtocolIE_SingleContainer_element", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_e2ap_RICaction_NotAdmitted_List_item, + { "ProtocolIE-SingleContainer", "e2ap.ProtocolIE_SingleContainer_element", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_e2ap_cause, + { "cause", "e2ap.cause", + FT_UINT32, BASE_DEC, VALS(e2ap_Cause_vals), 0, + NULL, HFILL }}, + { &hf_e2ap_RANfunctions_List_item, + { "ProtocolIE-SingleContainer", "e2ap.ProtocolIE_SingleContainer_element", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_e2ap_ranFunctionID, + { "ranFunctionID", "e2ap.ranFunctionID", + FT_UINT32, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_e2ap_ranFunctionDefinition, + { "ranFunctionDefinition", "e2ap.ranFunctionDefinition", + FT_BYTES, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_e2ap_ranFunctionRevision, + { "ranFunctionRevision", "e2ap.ranFunctionRevision", + FT_UINT32, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_e2ap_RANfunctionsID_List_item, + { "ProtocolIE-SingleContainer", "e2ap.ProtocolIE_SingleContainer_element", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_e2ap_RANfunctionsIDcause_List_item, + { "ProtocolIE-SingleContainer", "e2ap.ProtocolIE_SingleContainer_element", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_e2ap_initiatingMessage, + { "initiatingMessage", "e2ap.initiatingMessage_element", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_e2ap_successfulOutcome, + { "successfulOutcome", "e2ap.successfulOutcome_element", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_e2ap_unsuccessfulOutcome, + { "unsuccessfulOutcome", "e2ap.unsuccessfulOutcome_element", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_e2ap_initiatingMessagevalue, + { "value", "e2ap.value_element", + FT_NONE, BASE_NONE, NULL, 0, + "InitiatingMessage_value", HFILL }}, + { &hf_e2ap_successfulOutcome_value, + { "value", "e2ap.value_element", + FT_NONE, BASE_NONE, NULL, 0, + "SuccessfulOutcome_value", HFILL }}, + { &hf_e2ap_unsuccessfulOutcome_value, + { "value", "e2ap.value_element", + FT_NONE, BASE_NONE, NULL, 0, + "UnsuccessfulOutcome_value", HFILL }}, + { &hf_e2ap_gNB_01, + { "gNB", "e2ap.gNB_element", + FT_NONE, BASE_NONE, NULL, 0, + "GlobalKPMnode_gNB_ID", HFILL }}, + { &hf_e2ap_en_gNB_01, + { "en-gNB", "e2ap.en_gNB_element", + FT_NONE, BASE_NONE, NULL, 0, + "GlobalKPMnode_en_gNB_ID", HFILL }}, + { &hf_e2ap_ng_eNB_01, + { "ng-eNB", "e2ap.ng_eNB_element", + FT_NONE, BASE_NONE, NULL, 0, + "GlobalKPMnode_ng_eNB_ID", HFILL }}, + { &hf_e2ap_eNB_01, + { "eNB", "e2ap.eNB_element", + FT_NONE, BASE_NONE, NULL, 0, + "GlobalKPMnode_eNB_ID", HFILL }}, + { &hf_e2ap_nRCellIdentity, + { "nRCellIdentity", "e2ap.nRCellIdentity", + FT_BYTES, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_e2ap_sST, + { "sST", "e2ap.sST", + FT_BYTES, BASE_NONE, NULL, 0, + "OCTET_STRING_SIZE_1", HFILL }}, + { &hf_e2ap_sD, + { "sD", "e2ap.sD", + FT_BYTES, BASE_NONE, NULL, 0, + "OCTET_STRING_SIZE_3", HFILL }}, + { &hf_e2ap_eventDefinition_Format1, + { "eventDefinition-Format1", "e2ap.eventDefinition_Format1_element", + FT_NONE, BASE_NONE, NULL, 0, + "E2SM_KPM_EventTriggerDefinition_Format1", HFILL }}, + { &hf_e2ap_policyTest_List, + { "policyTest-List", "e2ap.policyTest_List", + FT_UINT32, BASE_DEC, NULL, 0, + "SEQUENCE_SIZE_1_maxofMessageProtocolTests_OF_Trigger_ConditionIE_Item", HFILL }}, + { &hf_e2ap_policyTest_List_item, + { "Trigger-ConditionIE-Item", "e2ap.Trigger_ConditionIE_Item_element", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_e2ap_ric_Style_Type, + { "ric-Style-Type", "e2ap.ric_Style_Type", + FT_INT32, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_e2ap_indicationHeader_Format1, + { "indicationHeader-Format1", "e2ap.indicationHeader_Format1_element", + FT_NONE, BASE_NONE, NULL, 0, + "E2SM_KPM_IndicationHeader_Format1", HFILL }}, + { &hf_e2ap_id_GlobalKPMnode_ID, + { "id-GlobalKPMnode-ID", "e2ap.id_GlobalKPMnode_ID", + FT_UINT32, BASE_DEC, VALS(e2ap_GlobalKPMnode_ID_vals), 0, + "GlobalKPMnode_ID", HFILL }}, + { &hf_e2ap_nRCGI, + { "nRCGI", "e2ap.nRCGI_element", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_e2ap_sliceID, + { "sliceID", "e2ap.sliceID_element", + FT_NONE, BASE_NONE, NULL, 0, + "SNSSAI", HFILL }}, + { &hf_e2ap_fiveQI, + { "fiveQI", "e2ap.fiveQI", + FT_UINT32, BASE_DEC, NULL, 0, + "INTEGER_0_255", HFILL }}, + { &hf_e2ap_qci, + { "qci", "e2ap.qci", + FT_UINT32, BASE_DEC, NULL, 0, + "INTEGER_0_255", HFILL }}, + { &hf_e2ap_pm_Containers, + { "pm-Containers", "e2ap.pm_Containers", + FT_UINT32, BASE_DEC, NULL, 0, + "SEQUENCE_SIZE_1_maxCellingNBDU_OF_PM_Containers_List", HFILL }}, + { &hf_e2ap_pm_Containers_item, + { "PM-Containers-List", "e2ap.PM_Containers_List_element", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_e2ap_performanceContainer, + { "performanceContainer", "e2ap.performanceContainer", + FT_UINT32, BASE_DEC, VALS(e2ap_PF_Container_vals), 0, + "PF_Container", HFILL }}, + { &hf_e2ap_theRANContainer, + { "theRANContainer", "e2ap.theRANContainer", + FT_BYTES, BASE_NONE, NULL, 0, + "RAN_Container", HFILL }}, + { &hf_e2ap_ranFunction_Name, + { "ranFunction-Name", "e2ap.ranFunction_Name_element", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_e2ap_e2SM_KPM_RANfunction_Item, + { "e2SM-KPM-RANfunction-Item", "e2ap.e2SM_KPM_RANfunction_Item_element", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_e2ap_ric_EventTriggerStyle_List, + { "ric-EventTriggerStyle-List", "e2ap.ric_EventTriggerStyle_List", + FT_UINT32, BASE_DEC, NULL, 0, + "SEQUENCE_SIZE_1_maxofRICstyles_OF_RIC_EventTriggerStyle_List", HFILL }}, + { &hf_e2ap_ric_EventTriggerStyle_List_item, + { "RIC-EventTriggerStyle-List", "e2ap.RIC_EventTriggerStyle_List_element", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_e2ap_ric_ReportStyle_List, + { "ric-ReportStyle-List", "e2ap.ric_ReportStyle_List", + FT_UINT32, BASE_DEC, NULL, 0, + "SEQUENCE_SIZE_1_maxofRICstyles_OF_RIC_ReportStyle_List", HFILL }}, + { &hf_e2ap_ric_ReportStyle_List_item, + { "RIC-ReportStyle-List", "e2ap.RIC_ReportStyle_List_element", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_e2ap_report_Period_IE, + { "report-Period-IE", "e2ap.report_Period_IE", + FT_UINT32, BASE_DEC, VALS(e2ap_RT_Period_IE_vals), 0, + "RT_Period_IE", HFILL }}, + { &hf_e2ap_ranFunction_ShortName, + { "ranFunction-ShortName", "e2ap.ranFunction_ShortName", + FT_STRING, BASE_NONE, NULL, 0, + "PrintableString_SIZE_1_150_", HFILL }}, + { &hf_e2ap_ranFunction_E2SM_OID, + { "ranFunction-E2SM-OID", "e2ap.ranFunction_E2SM_OID", + FT_STRING, BASE_NONE, NULL, 0, + "PrintableString_SIZE_1_1000_", HFILL }}, + { &hf_e2ap_ranFunction_Description, + { "ranFunction-Description", "e2ap.ranFunction_Description", + FT_STRING, BASE_NONE, NULL, 0, + "PrintableString_SIZE_1_150_", HFILL }}, + { &hf_e2ap_ranFunction_Instance, + { "ranFunction-Instance", "e2ap.ranFunction_Instance", + FT_INT32, BASE_DEC, NULL, 0, + "INTEGER", HFILL }}, + { &hf_e2ap_ric_EventTriggerStyle_Type, + { "ric-EventTriggerStyle-Type", "e2ap.ric_EventTriggerStyle_Type", + FT_INT32, BASE_DEC, NULL, 0, + "RIC_Style_Type", HFILL }}, + { &hf_e2ap_ric_EventTriggerStyle_Name, + { "ric-EventTriggerStyle-Name", "e2ap.ric_EventTriggerStyle_Name", + FT_STRING, BASE_NONE, NULL, 0, + "RIC_Style_Name", HFILL }}, + { &hf_e2ap_ric_EventTriggerFormat_Type, + { "ric-EventTriggerFormat-Type", "e2ap.ric_EventTriggerFormat_Type", + FT_INT32, BASE_DEC, NULL, 0, + "RIC_Format_Type", HFILL }}, + { &hf_e2ap_ric_ReportStyle_Type, + { "ric-ReportStyle-Type", "e2ap.ric_ReportStyle_Type", + FT_INT32, BASE_DEC, NULL, 0, + "RIC_Style_Type", HFILL }}, + { &hf_e2ap_ric_ReportStyle_Name, + { "ric-ReportStyle-Name", "e2ap.ric_ReportStyle_Name", + FT_STRING, BASE_NONE, NULL, 0, + "RIC_Style_Name", HFILL }}, + { &hf_e2ap_ric_IndicationHeaderFormat_Type, + { "ric-IndicationHeaderFormat-Type", "e2ap.ric_IndicationHeaderFormat_Type", + FT_INT32, BASE_DEC, NULL, 0, + "RIC_Format_Type", HFILL }}, + { &hf_e2ap_ric_IndicationMessageFormat_Type, + { "ric-IndicationMessageFormat-Type", "e2ap.ric_IndicationMessageFormat_Type", + FT_INT32, BASE_DEC, NULL, 0, + "RIC_Format_Type", HFILL }}, + { &hf_e2ap_oDU, + { "oDU", "e2ap.oDU_element", + FT_NONE, BASE_NONE, NULL, 0, + "ODU_PF_Container", HFILL }}, + { &hf_e2ap_oCU_CP, + { "oCU-CP", "e2ap.oCU_CP_element", + FT_NONE, BASE_NONE, NULL, 0, + "OCUCP_PF_Container", HFILL }}, + { &hf_e2ap_oCU_UP, + { "oCU-UP", "e2ap.oCU_UP_element", + FT_NONE, BASE_NONE, NULL, 0, + "OCUUP_PF_Container", HFILL }}, + { &hf_e2ap_cellResourceReportList, + { "cellResourceReportList", "e2ap.cellResourceReportList", + FT_UINT32, BASE_DEC, NULL, 0, + "SEQUENCE_SIZE_1_maxCellingNBDU_OF_CellResourceReportListItem", HFILL }}, + { &hf_e2ap_cellResourceReportList_item, + { "CellResourceReportListItem", "e2ap.CellResourceReportListItem_element", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_e2ap_dl_TotalofAvailablePRBs, + { "dl-TotalofAvailablePRBs", "e2ap.dl_TotalofAvailablePRBs", + FT_UINT32, BASE_DEC, NULL, 0, + "INTEGER_0_273", HFILL }}, + { &hf_e2ap_ul_TotalofAvailablePRBs, + { "ul-TotalofAvailablePRBs", "e2ap.ul_TotalofAvailablePRBs", + FT_UINT32, BASE_DEC, NULL, 0, + "INTEGER_0_273", HFILL }}, + { &hf_e2ap_servedPlmnPerCellList, + { "servedPlmnPerCellList", "e2ap.servedPlmnPerCellList", + FT_UINT32, BASE_DEC, NULL, 0, + "SEQUENCE_SIZE_1_maxPLMN_OF_ServedPlmnPerCellListItem", HFILL }}, + { &hf_e2ap_servedPlmnPerCellList_item, + { "ServedPlmnPerCellListItem", "e2ap.ServedPlmnPerCellListItem_element", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_e2ap_du_PM_5GC, + { "du-PM-5GC", "e2ap.du_PM_5GC_element", + FT_NONE, BASE_NONE, NULL, 0, + "FGC_DU_PM_Container", HFILL }}, + { &hf_e2ap_du_PM_EPC, + { "du-PM-EPC", "e2ap.du_PM_EPC_element", + FT_NONE, BASE_NONE, NULL, 0, + "EPC_DU_PM_Container", HFILL }}, + { &hf_e2ap_slicePerPlmnPerCellList, + { "slicePerPlmnPerCellList", "e2ap.slicePerPlmnPerCellList", + FT_UINT32, BASE_DEC, NULL, 0, + "SEQUENCE_SIZE_1_maxnoofSliceItems_OF_SlicePerPlmnPerCellListItem", HFILL }}, + { &hf_e2ap_slicePerPlmnPerCellList_item, + { "SlicePerPlmnPerCellListItem", "e2ap.SlicePerPlmnPerCellListItem_element", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_e2ap_fQIPERSlicesPerPlmnPerCellList, + { "fQIPERSlicesPerPlmnPerCellList", "e2ap.fQIPERSlicesPerPlmnPerCellList", + FT_UINT32, BASE_DEC, NULL, 0, + "SEQUENCE_SIZE_1_maxnoofQoSFlows_OF_FQIPERSlicesPerPlmnPerCellListItem", HFILL }}, + { &hf_e2ap_fQIPERSlicesPerPlmnPerCellList_item, + { "FQIPERSlicesPerPlmnPerCellListItem", "e2ap.FQIPERSlicesPerPlmnPerCellListItem_element", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_e2ap_dl_PRBUsage, + { "dl-PRBUsage", "e2ap.dl_PRBUsage", + FT_UINT32, BASE_DEC, NULL, 0, + "INTEGER_0_273", HFILL }}, + { &hf_e2ap_ul_PRBUsage, + { "ul-PRBUsage", "e2ap.ul_PRBUsage", + FT_UINT32, BASE_DEC, NULL, 0, + "INTEGER_0_273", HFILL }}, + { &hf_e2ap_perQCIReportList, + { "perQCIReportList", "e2ap.perQCIReportList", + FT_UINT32, BASE_DEC, NULL, 0, + "SEQUENCE_SIZE_1_maxnoofQCI_OF_PerQCIReportListItem", HFILL }}, + { &hf_e2ap_perQCIReportList_item, + { "PerQCIReportListItem", "e2ap.PerQCIReportListItem_element", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_e2ap_dl_PRBUsage_01, + { "dl-PRBUsage", "e2ap.dl_PRBUsage", + FT_UINT32, BASE_DEC, NULL, 0, + "INTEGER_0_100", HFILL }}, + { &hf_e2ap_ul_PRBUsage_01, + { "ul-PRBUsage", "e2ap.ul_PRBUsage", + FT_UINT32, BASE_DEC, NULL, 0, + "INTEGER_0_100", HFILL }}, + { &hf_e2ap_gNB_CU_CP_Name, + { "gNB-CU-CP-Name", "e2ap.gNB_CU_CP_Name", + FT_STRING, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_e2ap_cu_CP_Resource_Status, + { "cu-CP-Resource-Status", "e2ap.cu_CP_Resource_Status_element", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_e2ap_numberOfActive_UEs, + { "numberOfActive-UEs", "e2ap.numberOfActive_UEs", + FT_UINT32, BASE_DEC, NULL, 0, + "INTEGER_1_65536_", HFILL }}, + { &hf_e2ap_gNB_CU_UP_Name, + { "gNB-CU-UP-Name", "e2ap.gNB_CU_UP_Name", + FT_STRING, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_e2ap_pf_ContainerList, + { "pf-ContainerList", "e2ap.pf_ContainerList", + FT_UINT32, BASE_DEC, NULL, 0, + "SEQUENCE_SIZE_1_maxnoofContainerListItems_OF_PF_ContainerListItem", HFILL }}, + { &hf_e2ap_pf_ContainerList_item, + { "PF-ContainerListItem", "e2ap.PF_ContainerListItem_element", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_e2ap_interface_type, + { "interface-type", "e2ap.interface_type", + FT_UINT32, BASE_DEC, VALS(e2ap_NI_Type_vals), 0, + "NI_Type", HFILL }}, + { &hf_e2ap_o_CU_UP_PM_Container, + { "o-CU-UP-PM-Container", "e2ap.o_CU_UP_PM_Container_element", + FT_NONE, BASE_NONE, NULL, 0, + "CUUPMeasurement_Container", HFILL }}, + { &hf_e2ap_plmnList, + { "plmnList", "e2ap.plmnList", + FT_UINT32, BASE_DEC, NULL, 0, + "SEQUENCE_SIZE_1_maxPLMN_OF_PlmnID_List", HFILL }}, + { &hf_e2ap_plmnList_item, + { "PlmnID-List", "e2ap.PlmnID_List_element", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_e2ap_cu_UP_PM_5GC, + { "cu-UP-PM-5GC", "e2ap.cu_UP_PM_5GC_element", + FT_NONE, BASE_NONE, NULL, 0, + "FGC_CUUP_PM_Format", HFILL }}, + { &hf_e2ap_cu_UP_PM_EPC, + { "cu-UP-PM-EPC", "e2ap.cu_UP_PM_EPC_element", + FT_NONE, BASE_NONE, NULL, 0, + "EPC_CUUP_PM_Format", HFILL }}, + { &hf_e2ap_sliceToReportList, + { "sliceToReportList", "e2ap.sliceToReportList", + FT_UINT32, BASE_DEC, NULL, 0, + "SEQUENCE_SIZE_1_maxnoofSliceItems_OF_SliceToReportListItem", HFILL }}, + { &hf_e2ap_sliceToReportList_item, + { "SliceToReportListItem", "e2ap.SliceToReportListItem_element", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_e2ap_fQIPERSlicesPerPlmnList, + { "fQIPERSlicesPerPlmnList", "e2ap.fQIPERSlicesPerPlmnList", + FT_UINT32, BASE_DEC, NULL, 0, + "SEQUENCE_SIZE_1_maxnoofQoSFlows_OF_FQIPERSlicesPerPlmnListItem", HFILL }}, + { &hf_e2ap_fQIPERSlicesPerPlmnList_item, + { "FQIPERSlicesPerPlmnListItem", "e2ap.FQIPERSlicesPerPlmnListItem_element", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_e2ap_pDCPBytesDL, + { "pDCPBytesDL", "e2ap.pDCPBytesDL", + FT_UINT64, BASE_DEC, NULL, 0, + "INTEGER_0_10000000000_", HFILL }}, + { &hf_e2ap_pDCPBytesUL, + { "pDCPBytesUL", "e2ap.pDCPBytesUL", + FT_UINT64, BASE_DEC, NULL, 0, + "INTEGER_0_10000000000_", HFILL }}, + { &hf_e2ap_perQCIReportList_01, + { "perQCIReportList", "e2ap.perQCIReportList", + FT_UINT32, BASE_DEC, NULL, 0, + "SEQUENCE_SIZE_1_maxnoofQCI_OF_PerQCIReportListItemFormat", HFILL }}, + { &hf_e2ap_perQCIReportList_item_01, + { "PerQCIReportListItemFormat", "e2ap.PerQCIReportListItemFormat_element", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + +/*--- End of included file: packet-e2ap-hfarr.c ---*/ +#line 231 "./asn1/e2ap/packet-e2ap-template.c" + + }; + + /* List of subtrees */ + static gint *ett[] = { + &ett_e2ap, + +/*--- Included file: packet-e2ap-ettarr.c ---*/ +#line 1 "./asn1/e2ap/packet-e2ap-ettarr.c" + &ett_e2ap_ProtocolIE_Container, + &ett_e2ap_ProtocolIE_Field, + &ett_e2ap_Cause, + &ett_e2ap_CriticalityDiagnostics, + &ett_e2ap_CriticalityDiagnostics_IE_List, + &ett_e2ap_CriticalityDiagnostics_IE_Item, + &ett_e2ap_ENB_ID, + &ett_e2ap_ENB_ID_Choice, + &ett_e2ap_ENGNB_ID, + &ett_e2ap_GlobalE2node_ID, + &ett_e2ap_GlobalE2node_en_gNB_ID, + &ett_e2ap_GlobalE2node_eNB_ID, + &ett_e2ap_GlobalE2node_gNB_ID, + &ett_e2ap_GlobalE2node_ng_eNB_ID, + &ett_e2ap_GlobalENB_ID, + &ett_e2ap_GlobalenGNB_ID, + &ett_e2ap_GlobalgNB_ID, + &ett_e2ap_GlobalngeNB_ID, + &ett_e2ap_GlobalRIC_ID, + &ett_e2ap_GNB_ID_Choice, + &ett_e2ap_RICrequestID, + &ett_e2ap_RICsubsequentAction, + &ett_e2ap_RICsubscriptionRequest, + &ett_e2ap_RICsubscriptionDetails, + &ett_e2ap_RICactions_ToBeSetup_List, + &ett_e2ap_RICaction_ToBeSetup_Item, + &ett_e2ap_RICsubscriptionResponse, + &ett_e2ap_RICaction_Admitted_List, + &ett_e2ap_RICaction_Admitted_Item, + &ett_e2ap_RICaction_NotAdmitted_List, + &ett_e2ap_RICaction_NotAdmitted_Item, + &ett_e2ap_RICsubscriptionFailure, + &ett_e2ap_RICsubscriptionDeleteRequest, + &ett_e2ap_RICsubscriptionDeleteResponse, + &ett_e2ap_RICsubscriptionDeleteFailure, + &ett_e2ap_RICindication, + &ett_e2ap_RICcontrolRequest, + &ett_e2ap_RICcontrolAcknowledge, + &ett_e2ap_RICcontrolFailure, + &ett_e2ap_ErrorIndication, + &ett_e2ap_E2setupRequest, + &ett_e2ap_E2setupResponse, + &ett_e2ap_E2setupFailure, + &ett_e2ap_ResetRequest, + &ett_e2ap_ResetResponse, + &ett_e2ap_RICserviceUpdate, + &ett_e2ap_RANfunctions_List, + &ett_e2ap_RANfunction_Item, + &ett_e2ap_RANfunctionsID_List, + &ett_e2ap_RANfunctionID_Item, + &ett_e2ap_RICserviceUpdateAcknowledge, + &ett_e2ap_RANfunctionsIDcause_List, + &ett_e2ap_RANfunctionIDcause_Item, + &ett_e2ap_RICserviceUpdateFailure, + &ett_e2ap_RICserviceQuery, + &ett_e2ap_E2AP_PDU, + &ett_e2ap_InitiatingMessage, + &ett_e2ap_SuccessfulOutcome, + &ett_e2ap_UnsuccessfulOutcome, + &ett_e2ap_GlobalKPMnode_ID, + &ett_e2ap_GlobalKPMnode_gNB_ID, + &ett_e2ap_GlobalKPMnode_en_gNB_ID, + &ett_e2ap_GlobalKPMnode_ng_eNB_ID, + &ett_e2ap_GlobalKPMnode_eNB_ID, + &ett_e2ap_NRCGI, + &ett_e2ap_SNSSAI, + &ett_e2ap_E2SM_KPM_EventTriggerDefinition, + &ett_e2ap_E2SM_KPM_EventTriggerDefinition_Format1, + &ett_e2ap_SEQUENCE_SIZE_1_maxofMessageProtocolTests_OF_Trigger_ConditionIE_Item, + &ett_e2ap_E2SM_KPM_ActionDefinition, + &ett_e2ap_E2SM_KPM_IndicationHeader, + &ett_e2ap_E2SM_KPM_IndicationHeader_Format1, + &ett_e2ap_E2SM_KPM_IndicationMessage_Format1, + &ett_e2ap_SEQUENCE_SIZE_1_maxCellingNBDU_OF_PM_Containers_List, + &ett_e2ap_PM_Containers_List, + &ett_e2ap_E2SM_KPM_RANfunction_Description, + &ett_e2ap_T_e2SM_KPM_RANfunction_Item, + &ett_e2ap_SEQUENCE_SIZE_1_maxofRICstyles_OF_RIC_EventTriggerStyle_List, + &ett_e2ap_SEQUENCE_SIZE_1_maxofRICstyles_OF_RIC_ReportStyle_List, + &ett_e2ap_Trigger_ConditionIE_Item, + &ett_e2ap_RANfunction_Name, + &ett_e2ap_RIC_EventTriggerStyle_List, + &ett_e2ap_RIC_ReportStyle_List, + &ett_e2ap_PF_Container, + &ett_e2ap_ODU_PF_Container, + &ett_e2ap_SEQUENCE_SIZE_1_maxCellingNBDU_OF_CellResourceReportListItem, + &ett_e2ap_CellResourceReportListItem, + &ett_e2ap_SEQUENCE_SIZE_1_maxPLMN_OF_ServedPlmnPerCellListItem, + &ett_e2ap_ServedPlmnPerCellListItem, + &ett_e2ap_FGC_DU_PM_Container, + &ett_e2ap_SEQUENCE_SIZE_1_maxnoofSliceItems_OF_SlicePerPlmnPerCellListItem, + &ett_e2ap_SlicePerPlmnPerCellListItem, + &ett_e2ap_SEQUENCE_SIZE_1_maxnoofQoSFlows_OF_FQIPERSlicesPerPlmnPerCellListItem, + &ett_e2ap_FQIPERSlicesPerPlmnPerCellListItem, + &ett_e2ap_EPC_DU_PM_Container, + &ett_e2ap_SEQUENCE_SIZE_1_maxnoofQCI_OF_PerQCIReportListItem, + &ett_e2ap_PerQCIReportListItem, + &ett_e2ap_OCUCP_PF_Container, + &ett_e2ap_T_cu_CP_Resource_Status, + &ett_e2ap_OCUUP_PF_Container, + &ett_e2ap_SEQUENCE_SIZE_1_maxnoofContainerListItems_OF_PF_ContainerListItem, + &ett_e2ap_PF_ContainerListItem, + &ett_e2ap_CUUPMeasurement_Container, + &ett_e2ap_SEQUENCE_SIZE_1_maxPLMN_OF_PlmnID_List, + &ett_e2ap_PlmnID_List, + &ett_e2ap_FGC_CUUP_PM_Format, + &ett_e2ap_SEQUENCE_SIZE_1_maxnoofSliceItems_OF_SliceToReportListItem, + &ett_e2ap_SliceToReportListItem, + &ett_e2ap_SEQUENCE_SIZE_1_maxnoofQoSFlows_OF_FQIPERSlicesPerPlmnListItem, + &ett_e2ap_FQIPERSlicesPerPlmnListItem, + &ett_e2ap_EPC_CUUP_PM_Format, + &ett_e2ap_SEQUENCE_SIZE_1_maxnoofQCI_OF_PerQCIReportListItemFormat, + &ett_e2ap_PerQCIReportListItemFormat, + +/*--- End of included file: packet-e2ap-ettarr.c ---*/ +#line 238 "./asn1/e2ap/packet-e2ap-template.c" + }; + + + module_t *e2ap_module; + + /* Register protocol */ + proto_e2ap = proto_register_protocol(PNAME, PSNAME, PFNAME); + /* Register fields and subtrees */ + proto_register_field_array(proto_e2ap, hf, array_length(hf)); + proto_register_subtree_array(ett, array_length(ett)); + + + /* Register dissector */ + e2ap_handle = register_dissector("e2ap", dissect_e2ap, proto_e2ap); + + /* Register dissector tables */ + e2ap_ies_dissector_table = register_dissector_table("e2ap.ies", "E2AP-PROTOCOL-IES", proto_e2ap, FT_UINT32, BASE_DEC); +// e2ap_ies_p1_dissector_table = register_dissector_table("e2ap.ies.pair.first", "E2AP-PROTOCOL-IES-PAIR FirstValue", proto_e2ap, FT_UINT32, BASE_DEC); +// e2ap_ies_p2_dissector_table = register_dissector_table("e2ap.ies.pair.second", "E2AP-PROTOCOL-IES-PAIR SecondValue", proto_e2ap, FT_UINT32, BASE_DEC); + e2ap_extension_dissector_table = register_dissector_table("e2ap.extension", "E2AP-PROTOCOL-EXTENSION", proto_e2ap, FT_UINT32, BASE_DEC); + e2ap_proc_imsg_dissector_table = register_dissector_table("e2ap.proc.imsg", "E2AP-ELEMENTARY-PROCEDURE InitiatingMessage", proto_e2ap, FT_UINT32, BASE_DEC); + e2ap_proc_sout_dissector_table = register_dissector_table("e2ap.proc.sout", "E2AP-ELEMENTARY-PROCEDURE SuccessfulOutcome", proto_e2ap, FT_UINT32, BASE_DEC); + e2ap_proc_uout_dissector_table = register_dissector_table("e2ap.proc.uout", "E2AP-ELEMENTARY-PROCEDURE UnsuccessfulOutcome", proto_e2ap, FT_UINT32, BASE_DEC); + e2ap_n2_ie_type_dissector_table = register_dissector_table("e2ap.n2_ie_type", "E2AP N2 IE Type", proto_e2ap, FT_STRING, FALSE); + + /* Register configuration options for ports */ + e2ap_module = prefs_register_protocol(proto_e2ap, proto_reg_handoff_e2ap); + + prefs_register_uint_preference(e2ap_module, "sctp.port", + "e2ap SCTP Port", + "Set the SCTP port for e2ap messages", + 10, + &gbl_e2apSctpPort); +} + +/* + * 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: + */ diff --git a/epan/dissectors/packet-e2ap.h b/epan/dissectors/packet-e2ap.h new file mode 100644 index 0000000000..d99cfe40ce --- /dev/null +++ b/epan/dissectors/packet-e2ap.h @@ -0,0 +1,42 @@ +/* Do not modify this file. Changes will be overwritten. */ +/* Generated automatically by the ASN.1 to Wireshark dissector compiler */ +/* packet-e2ap.h */ +/* asn2wrs.py -p e2ap -c ./e2ap.cnf -s ./packet-e2ap-template -D . -O ../.. E2AP-CommonDataTypes.asn E2AP-Constants.asn E2AP-Containers.asn E2AP-IEs.asn E2AP-PDU-Contents.asn E2AP-PDU-Descriptions.asn e2sm-kpm-v1.asn */ + +/* Input file: packet-e2ap-template.h */ + +#line 1 "./asn1/e2ap/packet-e2ap-template.h" +/* packet-e2ap.h + * Routines for NG-RAN NG Application Protocol (NGAP) packet dissection + * + * Wireshark - Network traffic analyzer + * By Gerald Combs + * Copyright 1998 Gerald Combs + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#ifndef PACKET_E2AP_H +#define PACKET_E2AP_H + + +/*--- Included file: packet-e2ap-exp.h ---*/ +#line 1 "./asn1/e2ap/packet-e2ap-exp.h" + +/*--- End of included file: packet-e2ap-exp.h ---*/ +#line 15 "./asn1/e2ap/packet-e2ap-template.h" + +#endif /* PACKET_E2AP_H */ + +/* + * 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: + */